-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgoshawkdb.browser.js
185 lines (136 loc) · 365 KB
/
goshawkdb.browser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("WebSocket"));
else if(typeof define === 'function' && define.amd)
define(["WebSocket"], factory);
else if(typeof exports === 'object')
exports["goshawkdb"] = factory(require("WebSocket"));
else
root["goshawkdb"] = factory(root["WebSocket"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_15__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 16);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(Buffer) {/**\n * @param {ArrayBuffer|Buffer|TypedArray} binary the binary we want to represent in hex.\n * @returns {string} a hexadecimal representation of this binary.\n */\nexports.binaryToHex = function binaryToHex(binary) {\n\tlet uintarray = null\n\tif (binary instanceof Uint8Array) {\n\t\tuintarray = binary\n\t} else {\n\t\tuintarray = new Uint8Array(toArrayBuffer(binary))\n\t}\n\treturn \"0x\" + Array.from(uintarray).map((x) => ('0' + x.toString(16)).substr(-2)).join(\"\")\n}\n\n/**\n * Tries to convert a binary value into an array buffer.\n * @param {ArrayBuffer|Buffer|TypedArray} value the value to convert.\n * @returns {ArrayBuffer}\n */\nexports.toArrayBuffer = function toArrayBuffer(value) {\n\tif (value instanceof ArrayBuffer) {\n\t\treturn value\n\t} else if (value instanceof Buffer) {\n\t\treturn value.buffer.slice(value.offset, value.offset + value.length)\n\t} else if (value instanceof ArrayBuffer === false && value.buffer && value.buffer instanceof ArrayBuffer) {\n\t\treturn value.buffer\n\t}\n\tthrow new TypeError(\"Unable to convert value to array buffer \" + value)\n}\n\n/**\n * Runs the provided function, and wraps the output or thrown error in a promise.\n * This is useful for writing code that deals with functions that may be either synchronous or\n * asynchronous.\n * @param {function} fn the function that will be evaluated to populate the promise.\n * @returns {Promise}\n */\nexports.asPromise = function asPromise(fn) {\n\ttry {\n\t\treturn Promise.resolve(fn())\n\t} catch (e) {\n\t\treturn Promise.reject(e)\n\t}\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5).Buffer))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy91dGlscy5qcz8yZmY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcnxCdWZmZXJ8VHlwZWRBcnJheX0gYmluYXJ5IHRoZSBiaW5hcnkgd2Ugd2FudCB0byByZXByZXNlbnQgaW4gaGV4LlxuICogQHJldHVybnMge3N0cmluZ30gYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGJpbmFyeS5cbiAqL1xuZXhwb3J0cy5iaW5hcnlUb0hleCA9IGZ1bmN0aW9uIGJpbmFyeVRvSGV4KGJpbmFyeSkge1xuXHRsZXQgdWludGFycmF5ID0gbnVsbFxuXHRpZiAoYmluYXJ5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHRcdHVpbnRhcnJheSA9IGJpbmFyeVxuXHR9IGVsc2Uge1xuXHRcdHVpbnRhcnJheSA9IG5ldyBVaW50OEFycmF5KHRvQXJyYXlCdWZmZXIoYmluYXJ5KSlcblx0fVxuXHRyZXR1cm4gXCIweFwiICsgQXJyYXkuZnJvbSh1aW50YXJyYXkpLm1hcCgoeCkgPT4gKCcwJyArIHgudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpKS5qb2luKFwiXCIpXG59XG5cbi8qKlxuICogVHJpZXMgdG8gY29udmVydCBhIGJpbmFyeSB2YWx1ZSBpbnRvIGFuIGFycmF5IGJ1ZmZlci5cbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ8QnVmZmVyfFR5cGVkQXJyYXl9IHZhbHVlIHRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfVxuICovXG5leHBvcnRzLnRvQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiB0b0FycmF5QnVmZmVyKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdFx0cmV0dXJuIHZhbHVlXG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcblx0XHRyZXR1cm4gdmFsdWUuYnVmZmVyLnNsaWNlKHZhbHVlLm9mZnNldCwgdmFsdWUub2Zmc2V0ICsgdmFsdWUubGVuZ3RoKVxuXHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPT09IGZhbHNlICYmIHZhbHVlLmJ1ZmZlciAmJiB2YWx1ZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuXHRcdHJldHVybiB2YWx1ZS5idWZmZXJcblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGNvbnZlcnQgdmFsdWUgdG8gYXJyYXkgYnVmZmVyIFwiICsgdmFsdWUpXG59XG5cbi8qKlxuICogUnVucyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24sIGFuZCB3cmFwcyB0aGUgb3V0cHV0IG9yIHRocm93biBlcnJvciBpbiBhIHByb21pc2UuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3Igd3JpdGluZyBjb2RlIHRoYXQgZGVhbHMgd2l0aCBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgZWl0aGVyIHN5bmNocm9ub3VzIG9yXG4gKiBhc3luY2hyb25vdXMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB0byBwb3B1bGF0ZSB0aGUgcHJvbWlzZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnRzLmFzUHJvbWlzZSA9IGZ1bmN0aW9uIGFzUHJvbWlzZShmbikge1xuXHR0cnkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZm4oKSlcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlKVxuXHR9XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdXRpbHMuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }),
/* 1 */
/***/ (function(module, exports) {
eval("// Adds type name to inherited js errors so they behave more like the built in ones.\nexports.Throwable = class Throwable extends Error {\n\t/** @param {string} message a human readable description of this error. */\n\tconstructor(message) {\n\t\tsuper(message)\n\t\t/** the type of this error.\n\t\t * @type {string} */\n\t\tthis.name = this.constructor.name\n\t\t/** human readable description of this error.\n\t\t * @type {string} */\n\t\tthis.message = message\n\t}\n}\n\n/**\n * Thrown when a transaction should be retried, either because the user called 'retry' or because values are missing.\n */\nexports.TransactionRetryNeeded = class TransactionRetryNeeded extends exports.Throwable {}\n\n/**\n * Thrown when a user attempts to modify a value without using the appropriate methods.\n */\nexports.MutationNotAllowed = class MutationNotAllowed extends exports.Throwable {}\n\n/**\n * Thrown when a user attempts to read or write with a reference that doesn't allow it.\n */\nexports.CapabilityDenied = class CapabilityDenied extends exports.Throwable {}\n\n/**\n * Thrown when the server sends back an error because it was not able to commit the transaction.\n */\nexports.TransactionRejectedError = class TransactionRejectedError extends exports.Throwable {}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lcnJvcnMuanM/ZDZkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBZGRzIHR5cGUgbmFtZSB0byBpbmhlcml0ZWQganMgZXJyb3JzIHNvIHRoZXkgYmVoYXZlIG1vcmUgbGlrZSB0aGUgYnVpbHQgaW4gb25lcy5cbmV4cG9ydHMuVGhyb3dhYmxlID0gY2xhc3MgVGhyb3dhYmxlIGV4dGVuZHMgRXJyb3Ige1xuXHQvKiogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgYSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVycm9yLiAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSlcblx0XHQvKiogdGhlIHR5cGUgb2YgdGhpcyBlcnJvci5cblx0XHQgKiBAdHlwZSB7c3RyaW5nfSAqL1xuXHRcdHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZVxuXHRcdC8qKiBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVycm9yLlxuXHRcdCAqIEB0eXBlIHtzdHJpbmd9ICovXG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuXHR9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcmV0cmllZCwgZWl0aGVyIGJlY2F1c2UgdGhlIHVzZXIgY2FsbGVkICdyZXRyeScgb3IgYmVjYXVzZSB2YWx1ZXMgYXJlIG1pc3NpbmcuXG4gKi9cbmV4cG9ydHMuVHJhbnNhY3Rpb25SZXRyeU5lZWRlZCA9IGNsYXNzIFRyYW5zYWN0aW9uUmV0cnlOZWVkZWQgZXh0ZW5kcyBleHBvcnRzLlRocm93YWJsZSB7fVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgdXNlciBhdHRlbXB0cyB0byBtb2RpZnkgYSB2YWx1ZSB3aXRob3V0IHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRob2RzLlxuICovXG5leHBvcnRzLk11dGF0aW9uTm90QWxsb3dlZCA9IGNsYXNzIE11dGF0aW9uTm90QWxsb3dlZCBleHRlbmRzIGV4cG9ydHMuVGhyb3dhYmxlIHt9XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSB1c2VyIGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgd2l0aCBhIHJlZmVyZW5jZSB0aGF0IGRvZXNuJ3QgYWxsb3cgaXQuXG4gKi9cbmV4cG9ydHMuQ2FwYWJpbGl0eURlbmllZCA9IGNsYXNzIENhcGFiaWxpdHlEZW5pZWQgZXh0ZW5kcyBleHBvcnRzLlRocm93YWJsZSB7fVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBhbiBlcnJvciBiZWNhdXNlIGl0IHdhcyBub3QgYWJsZSB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uLlxuICovXG5leHBvcnRzLlRyYW5zYWN0aW9uUmVqZWN0ZWRFcnJvciA9IGNsYXNzIFRyYW5zYWN0aW9uUmVqZWN0ZWRFcnJvciBleHRlbmRzIGV4cG9ydHMuVGhyb3dhYmxlIHt9XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9lcnJvcnMuanNcbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9");
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
eval("const {binaryToHex, toArrayBuffer} = __webpack_require__(0)\n\n/**\n * A representation of a Uint64, since otherwise javascript can't do them.\n */\nclass Uint64 {\n\t/**\n\t * Makes a new Uint64 from a Uint8Array\n\t * @param {Uint8Array} uintArray an array of bytes to be used to represent this 64 bit integer.\n\t */\n\tconstructor(uintArray = new Uint8Array(8)) {\n\t\tif (uintArray instanceof Uint8Array === false) {\n\t\t\tthrow new TypeError(\"Uint64 source must be a Uint8Array, Uint64.from(bytes), Uint64.fromTypedArray, Uint64.fromArrayBuffer might suit your needs better.\")\n\t\t}\n\t\t/**\n\t\t * @private\n\t\t * @type {Uint8Array}\n\t\t */\n\t\tthis.data = uintArray\n\n\t\t/**\n\t\t * An arraybuffer representation of this value.\n\t\t * @type {ArrayBuffer}\n\t\t */\n\t\tthis.buffer = this.data.buffer\n\t}\n\n\t/**\n\t * Creates a Uint64 from bytes\n\t * @param {number[]} bytes\n\t * @returns {Uint64}\n\t */\n\tstatic from(...bytes) {\n\t\tconst result = new Uint64()\n\t\tresult.set(...bytes)\n\t\treturn result\n\t}\n\n\t/**\n\t * Creates a Uint64 from the first 8 bytes of one of the binary forms.\n\t * @param {ArrayBuffer|Buffer|TypedArray} binary\n\t * @returns {Uint64}\n\t */\n\tstatic fromBinary(binary) {\n\t\treturn Uint64.fromArrayBuffer(toArrayBuffer(binary))\n\t}\n\n\t/**\n\t * Creates a Uint64 from an array buffer. Potentially with a byte offset.\n\t * Only the first 8 bytes will be taken.\n\t * @param {ArrayBuffer} arrayBuffer\n\t * @param {number} byteOffset the starting position in the array buffer. Defaults to 0.\n\t * @returns {Uint64}\n\t */\n\tstatic fromArrayBuffer(arrayBuffer, byteOffset = 0) {\n\t\treturn new Uint64(new Uint8Array(arrayBuffer.slice(byteOffset, byteOffset + 8)))\n\t}\n\n\t/**\n\t * Modifies this Uint64 to represent the succeeding integer. If\n\t * this represents the largest integer the Uint64 can represent, it will wrap to 0.\n\t * @returns {Uint64} this, modified Uint64.\n\t */\n\tinc() {\n\t\tfor (let idx = this.data.length - 1; idx >= 0; --idx) {\n\t\t\tthis.data[idx] += 1\n\t\t\tif (this.data[idx] != 0) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn this\n\t}\n\n\t/**\n\t * @returns {Uint64} a copy of this Uint64.\n\t */\n\tclone() {\n\t\tconst dst = new ArrayBuffer(this.data.byteLength)\n\t\tconst uintArray = new Uint8Array(dst)\n\t\tuintArray.set(this.data)\n\t\treturn new Uint64(uintArray)\n\t}\n\n\t/**\n\t * Set the last last bytes.length bytes.\n\t * @param {number[]} bytes the bytes to set.\n\t */\n\tset(...bytes) {\n\t\tif (bytes[0] instanceof Uint64) {\n\t\t\tthis.data.set(bytes[0].data, 0)\n\t\t} else {\n\t\t\tfor (let i = 0; i < bytes.length; ++i) {\n\t\t\t\tthis.data[this.data.length - bytes.length + i] = bytes[i]\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns an array buffer where this Uint64 is the first 8 bytes and\n\t * the passed buffer is the subsequent bytes.\n\t * @param {ArrayBuffer|Buffer|TypedArray} buffer the subsequent bytes.\n\t * @returns {ArrayBuffer}\n\t */\n\tconcat(buffer) {\n\t\tbuffer = toArrayBuffer(buffer)\n\t\tconst result = new Uint8Array(this.data.length + buffer.byteLength)\n\t\tresult.set(this.data, 0)\n\t\tresult.set(new Uint8Array(buffer), this.data.length)\n\t\treturn result.buffer\n\t}\n\n\t/**\n\t * A string representation of this Uint64. This string representation is for debugging purposes\n\t * and does not form part of the public API.\n\t */\n\ttoString() {\n\t\treturn binaryToHex(this.data)\n\t}\n}\n\nmodule.exports = Uint64//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy91aW50NjQuanM/NTc4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7YmluYXJ5VG9IZXgsIHRvQXJyYXlCdWZmZXJ9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhIFVpbnQ2NCwgc2luY2Ugb3RoZXJ3aXNlIGphdmFzY3JpcHQgY2FuJ3QgZG8gdGhlbS5cbiAqL1xuY2xhc3MgVWludDY0IHtcblx0LyoqXG5cdCAqIE1ha2VzIGEgbmV3IFVpbnQ2NCBmcm9tIGEgVWludDhBcnJheVxuXHQgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHVpbnRBcnJheSBhbiBhcnJheSBvZiBieXRlcyB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGlzIDY0IGJpdCBpbnRlZ2VyLlxuXHQgKi9cblx0Y29uc3RydWN0b3IodWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoOCkpIHtcblx0XHRpZiAodWludEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJVaW50NjQgc291cmNlIG11c3QgYmUgYSBVaW50OEFycmF5LCBVaW50NjQuZnJvbShieXRlcyksIFVpbnQ2NC5mcm9tVHlwZWRBcnJheSwgVWludDY0LmZyb21BcnJheUJ1ZmZlciBtaWdodCBzdWl0IHlvdXIgbmVlZHMgYmV0dGVyLlwiKVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtVaW50OEFycmF5fVxuXHRcdCAqL1xuXHRcdHRoaXMuZGF0YSA9IHVpbnRBcnJheVxuXG5cdFx0LyoqXG5cdFx0ICogQW4gYXJyYXlidWZmZXIgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB2YWx1ZS5cblx0XHQgKiBAdHlwZSB7QXJyYXlCdWZmZXJ9XG5cdFx0ICovXG5cdFx0dGhpcy5idWZmZXIgPSB0aGlzLmRhdGEuYnVmZmVyXG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIFVpbnQ2NCBmcm9tIGJ5dGVzXG5cdCAqIEBwYXJhbSB7bnVtYmVyW119IGJ5dGVzXG5cdCAqIEByZXR1cm5zIHtVaW50NjR9XG5cdCAqL1xuXHRzdGF0aWMgZnJvbSguLi5ieXRlcykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50NjQoKVxuXHRcdHJlc3VsdC5zZXQoLi4uYnl0ZXMpXG5cdFx0cmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBVaW50NjQgZnJvbSB0aGUgZmlyc3QgOCBieXRlcyBvZiBvbmUgb2YgdGhlIGJpbmFyeSBmb3Jtcy5cblx0ICogQHBhcmFtIHtBcnJheUJ1ZmZlcnxCdWZmZXJ8VHlwZWRBcnJheX0gYmluYXJ5XG5cdCAqIEByZXR1cm5zIHtVaW50NjR9XG5cdCAqL1xuXHRzdGF0aWMgZnJvbUJpbmFyeShiaW5hcnkpIHtcblx0XHRyZXR1cm4gVWludDY0LmZyb21BcnJheUJ1ZmZlcih0b0FycmF5QnVmZmVyKGJpbmFyeSkpXG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIFVpbnQ2NCBmcm9tIGFuIGFycmF5IGJ1ZmZlci4gUG90ZW50aWFsbHkgd2l0aCBhIGJ5dGUgb2Zmc2V0LlxuXHQgKiBPbmx5IHRoZSBmaXJzdCA4IGJ5dGVzIHdpbGwgYmUgdGFrZW4uXG5cdCAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBieXRlT2Zmc2V0IHRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUgYXJyYXkgYnVmZmVyLiBEZWZhdWx0cyB0byAwLlxuXHQgKiBAcmV0dXJucyB7VWludDY0fVxuXHQgKi9cblx0c3RhdGljIGZyb21BcnJheUJ1ZmZlcihhcnJheUJ1ZmZlciwgYnl0ZU9mZnNldCA9IDApIHtcblx0XHRyZXR1cm4gbmV3IFVpbnQ2NChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlci5zbGljZShieXRlT2Zmc2V0LCBieXRlT2Zmc2V0ICsgOCkpKVxuXHR9XG5cblx0LyoqXG5cdCAqIE1vZGlmaWVzIHRoaXMgVWludDY0IHRvIHJlcHJlc2VudCB0aGUgc3VjY2VlZGluZyBpbnRlZ2VyLiAgSWZcblx0ICogdGhpcyByZXByZXNlbnRzIHRoZSBsYXJnZXN0IGludGVnZXIgdGhlIFVpbnQ2NCBjYW4gcmVwcmVzZW50LCBpdCB3aWxsIHdyYXAgdG8gMC5cblx0ICogQHJldHVybnMge1VpbnQ2NH0gdGhpcywgbW9kaWZpZWQgVWludDY0LlxuXHQgKi9cblx0aW5jKCkge1xuXHRcdGZvciAobGV0IGlkeCA9IHRoaXMuZGF0YS5sZW5ndGggLSAxOyBpZHggPj0gMDsgLS1pZHgpIHtcblx0XHRcdHRoaXMuZGF0YVtpZHhdICs9IDFcblx0XHRcdGlmICh0aGlzLmRhdGFbaWR4XSAhPSAwKSB7XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge1VpbnQ2NH0gYSBjb3B5IG9mIHRoaXMgVWludDY0LlxuXHQgKi9cblx0Y2xvbmUoKSB7XG5cdFx0Y29uc3QgZHN0ID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuZGF0YS5ieXRlTGVuZ3RoKVxuXHRcdGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KGRzdClcblx0XHR1aW50QXJyYXkuc2V0KHRoaXMuZGF0YSlcblx0XHRyZXR1cm4gbmV3IFVpbnQ2NCh1aW50QXJyYXkpXG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBsYXN0IGxhc3QgYnl0ZXMubGVuZ3RoIGJ5dGVzLlxuXHQgKiBAcGFyYW0ge251bWJlcltdfSBieXRlcyB0aGUgYnl0ZXMgdG8gc2V0LlxuXHQgKi9cblx0c2V0KC4uLmJ5dGVzKSB7XG5cdFx0aWYgKGJ5dGVzWzBdIGluc3RhbmNlb2YgVWludDY0KSB7XG5cdFx0XHR0aGlzLmRhdGEuc2V0KGJ5dGVzWzBdLmRhdGEsIDApXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSBieXRlcy5sZW5ndGggKyBpXSA9IGJ5dGVzW2ldXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgYnVmZmVyIHdoZXJlIHRoaXMgVWludDY0IGlzIHRoZSBmaXJzdCA4IGJ5dGVzIGFuZFxuXHQgKiB0aGUgcGFzc2VkIGJ1ZmZlciBpcyB0aGUgc3Vic2VxdWVudCBieXRlcy5cblx0ICogQHBhcmFtIHtBcnJheUJ1ZmZlcnxCdWZmZXJ8VHlwZWRBcnJheX0gYnVmZmVyIHRoZSBzdWJzZXF1ZW50IGJ5dGVzLlxuXHQgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9XG5cdCAqL1xuXHRjb25jYXQoYnVmZmVyKSB7XG5cdFx0YnVmZmVyID0gdG9BcnJheUJ1ZmZlcihidWZmZXIpXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmxlbmd0aCArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXHRcdHJlc3VsdC5zZXQodGhpcy5kYXRhLCAwKVxuXHRcdHJlc3VsdC5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgdGhpcy5kYXRhLmxlbmd0aClcblx0XHRyZXR1cm4gcmVzdWx0LmJ1ZmZlclxuXHR9XG5cblx0LyoqXG5cdCAqIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgVWludDY0LiAgVGhpcyBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuXHQgKiBhbmQgZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLlxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGJpbmFyeVRvSGV4KHRoaXMuZGF0YSlcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ2NFxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3VpbnQ2NC5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9");
/***/ }),
/* 3 */
/***/ (function(module, exports) {
eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanM/MzY5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9");
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
eval("const {binaryToHex} = __webpack_require__(0)\n\n/**\n * A Ref represents a pointer to an object in the database.\n * Each Ref also carries with it some capabilities that determine\n * which of the actions `read` and `write` can be done with that reference.\n *\n * You can get a Ref either by looking at the roots of the transaction,\n * creating a new object or reading it from an objects references with\n * {@link Transaction#read}.\n */\nclass Ref {\n\t/** @private */\n\tconstructor(varId, read, write) {\n\t\tif (varId instanceof Uint8Array == false) {\n\t\t\tthrow new TypeError(\"var id must be a uint8 array\")\n\t\t}\n\n\t\t/**\n\t\t * The goshawkdb id of the object this reference refers to.\n\t\t * @private\n\t\t */\n\t\tthis.varId = varId\n\n\t\t/**\n\t\t * Whether this reference can be used to read the object.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.read = read\n\t\t/**\n\t\t * Whether this reference can be used to write the object.\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.write = write\n\t}\n\n\t/** @private */\n\tstatic fromCapRef(capability, varId) {\n\t\treturn new Ref(varId, capability.Read, capability.Write)\n\t}\n\n\t/** @private */\n\tstatic fromMessage(msg) {\n\t\treturn Ref.fromCapRef(msg.Capability, msg.VarId)\n\t}\n\n\t/**\n\t * Checks to see if this reference and the other reference\n\t * refer to the same object in the database.\n\t * @param {Ref} otherRef\n\t * @returns {boolean} true if the other reference points to the same object, false otherwise.\n\t */\n\tsameReferent(otherRef) {\n\t\treturn binaryToHex(this.varId) === binaryToHex(otherRef.varId)\n\t}\n\n\t/**\n\t * @returns {Ref} a new reference the same as this one, but that cannot be used to read.\n\t */\n\tdenyRead() {\n\t\treturn new Ref(this.varId, false, this.write)\n\t}\n\n\t/**\n\t * @returns {Ref} a new reference the same as this one, but that cannot be used to write.\n\t */\n\tdenyWrite() {\n\t\treturn new Ref(this.varId, this.read, false)\n\t}\n\n\t/** @returns {string} a representation of this reference. String representations are for debug only and are not considered part of the public API. */\n\ttoString() {\n\t\treturn `{Ref ${binaryToHex(this.varId)} ${this.read ? 'r' : '-'}${this.write ? 'w' : '-'}}`\n\t}\n\n\t/** @private */\n\ttoMessage() {\n\t\treturn {VarId: this.varId.buffer, Capability: {Read: this.read, Write: this.write}}\n\t}\n}\n\nmodule.exports = Ref//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9yZWYuanM/NDU5OSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7YmluYXJ5VG9IZXh9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbi8qKlxuICogQSBSZWYgcmVwcmVzZW50cyBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0IGluIHRoZSBkYXRhYmFzZS5cbiAqIEVhY2ggUmVmIGFsc28gY2FycmllcyB3aXRoIGl0IHNvbWUgY2FwYWJpbGl0aWVzIHRoYXQgZGV0ZXJtaW5lXG4gKiB3aGljaCBvZiB0aGUgYWN0aW9ucyBgcmVhZGAgYW5kIGB3cml0ZWAgY2FuIGJlIGRvbmUgd2l0aCB0aGF0IHJlZmVyZW5jZS5cbiAqXG4gKiBZb3UgY2FuIGdldCBhIFJlZiBlaXRoZXIgYnkgbG9va2luZyBhdCB0aGUgcm9vdHMgb2YgdGhlIHRyYW5zYWN0aW9uLFxuICogY3JlYXRpbmcgYSBuZXcgb2JqZWN0IG9yIHJlYWRpbmcgaXQgZnJvbSBhbiBvYmplY3RzIHJlZmVyZW5jZXMgd2l0aFxuICoge0BsaW5rIFRyYW5zYWN0aW9uI3JlYWR9LlxuICovXG5jbGFzcyBSZWYge1xuXHQvKiogQHByaXZhdGUgKi9cblx0Y29uc3RydWN0b3IodmFySWQsIHJlYWQsIHdyaXRlKSB7XG5cdFx0aWYgKHZhcklkIGluc3RhbmNlb2YgVWludDhBcnJheSA9PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhciBpZCBtdXN0IGJlIGEgdWludDggYXJyYXlcIilcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBUaGUgZ29zaGF3a2RiIGlkIG9mIHRoZSBvYmplY3QgdGhpcyByZWZlcmVuY2UgcmVmZXJzIHRvLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy52YXJJZCA9IHZhcklkXG5cblx0XHQvKipcblx0XHQgKiBXaGV0aGVyIHRoaXMgcmVmZXJlbmNlIGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIG9iamVjdC5cblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKi9cblx0XHR0aGlzLnJlYWQgPSByZWFkXG5cdFx0LyoqXG5cdFx0ICogV2hldGhlciB0aGlzIHJlZmVyZW5jZSBjYW4gYmUgdXNlZCB0byB3cml0ZSB0aGUgb2JqZWN0LlxuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdHRoaXMud3JpdGUgPSB3cml0ZVxuXHR9XG5cblx0LyoqIEBwcml2YXRlICovXG5cdHN0YXRpYyBmcm9tQ2FwUmVmKGNhcGFiaWxpdHksIHZhcklkKSB7XG5cdFx0cmV0dXJuIG5ldyBSZWYodmFySWQsIGNhcGFiaWxpdHkuUmVhZCwgY2FwYWJpbGl0eS5Xcml0ZSlcblx0fVxuXG5cdC8qKiBAcHJpdmF0ZSAqL1xuXHRzdGF0aWMgZnJvbU1lc3NhZ2UobXNnKSB7XG5cdFx0cmV0dXJuIFJlZi5mcm9tQ2FwUmVmKG1zZy5DYXBhYmlsaXR5LCBtc2cuVmFySWQpXG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHRvIHNlZSBpZiB0aGlzIHJlZmVyZW5jZSBhbmQgdGhlIG90aGVyIHJlZmVyZW5jZVxuXHQgKiByZWZlciB0byB0aGUgc2FtZSBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLlxuXHQgKiBAcGFyYW0ge1JlZn0gb3RoZXJSZWZcblx0ICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIG90aGVyIHJlZmVyZW5jZSBwb2ludHMgdG8gdGhlIHNhbWUgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRzYW1lUmVmZXJlbnQob3RoZXJSZWYpIHtcblx0XHRyZXR1cm4gYmluYXJ5VG9IZXgodGhpcy52YXJJZCkgPT09IGJpbmFyeVRvSGV4KG90aGVyUmVmLnZhcklkKVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtSZWZ9IGEgbmV3IHJlZmVyZW5jZSB0aGUgc2FtZSBhcyB0aGlzIG9uZSwgYnV0IHRoYXQgY2Fubm90IGJlIHVzZWQgdG8gcmVhZC5cblx0ICovXG5cdGRlbnlSZWFkKCkge1xuXHRcdHJldHVybiBuZXcgUmVmKHRoaXMudmFySWQsIGZhbHNlLCB0aGlzLndyaXRlKVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtSZWZ9IGEgbmV3IHJlZmVyZW5jZSB0aGUgc2FtZSBhcyB0aGlzIG9uZSwgYnV0IHRoYXQgY2Fubm90IGJlIHVzZWQgdG8gd3JpdGUuXG5cdCAqL1xuXHRkZW55V3JpdGUoKSB7XG5cdFx0cmV0dXJuIG5ldyBSZWYodGhpcy52YXJJZCwgdGhpcy5yZWFkLCBmYWxzZSlcblx0fVxuXG5cdC8qKiBAcmV0dXJucyB7c3RyaW5nfSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcmVmZXJlbmNlLiAgU3RyaW5nIHJlcHJlc2VudGF0aW9ucyBhcmUgZm9yIGRlYnVnIG9ubHkgYW5kIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLiAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gYHtSZWYgJHtiaW5hcnlUb0hleCh0aGlzLnZhcklkKX0gJHt0aGlzLnJlYWQgPyAncicgOiAnLSd9JHt0aGlzLndyaXRlID8gJ3cnIDogJy0nfX1gXG5cdH1cblxuXHQvKiogQHByaXZhdGUgKi9cblx0dG9NZXNzYWdlKCkge1xuXHRcdHJldHVybiB7VmFySWQ6IHRoaXMudmFySWQuYnVmZmVyLCBDYXBhYmlsaXR5OiB7UmVhZDogdGhpcy5yZWFkLCBXcml0ZTogdGhpcy53cml0ZX19XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9yZWYuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==");
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <[email protected]> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(7)\nvar ieee754 = __webpack_require__(8)\nvar isArray = __webpack_require__(9)\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vYnVmZmVyL2luZGV4LmpzPzFhNTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2J1ZmZlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==");
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(global) {const Connection = __webpack_require__(11)\n\n// Ensure that all our calls to console.debug don't cause errors.\nif (!global.console.debug) {\n\tglobal.console.debug = () => {}\n}\n\n/**\n * Goshawkdb client.\n */\nmodule.exports = class GoshawkDb {\n\t/**\n\t * Connects to the websocket port of a goshawkdb server.\n\t * See the [goshawkdb documentation](https://goshawkdb.io/documentation.html) for more information.\n\t *\n\t * @param {string} url the url of the websocket endpoint. e.g. wss://localhost:7895/ws\n\t * @param {*} connectionOptions in node.js, the connection options are used to make the connection.\n\t * \t\t\t\tThey are for the WS module and are defined [here](https://github.com/websockets/ws/blob/master/doc/ws.md).\n\t * \t\t\t\tThe options should include `key`, `cert` and if you don't want it to check\n\t * \t\t\t\tthe server certificates, `{rejectUnauthorized: false}`.\n\t * @return {Promise<Connection, Error>} A promise that resolves with a connection or rejects with an error.\n\t */\n\tstatic connect(url, connectionOptions) {\n\t\treturn new Connection(url).connect(connectionOptions)\n\t}\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9nb3NoYXdrZGIuanM/OTI3NyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDb25uZWN0aW9uID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uJylcblxuLy8gRW5zdXJlIHRoYXQgYWxsIG91ciBjYWxscyB0byBjb25zb2xlLmRlYnVnIGRvbid0IGNhdXNlIGVycm9ycy5cbmlmICghZ2xvYmFsLmNvbnNvbGUuZGVidWcpIHtcblx0Z2xvYmFsLmNvbnNvbGUuZGVidWcgPSAoKSA9PiB7fVxufVxuXG4vKipcbiAqIEdvc2hhd2tkYiBjbGllbnQuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgR29zaGF3a0RiIHtcblx0LyoqXG5cdCAqIENvbm5lY3RzIHRvIHRoZSB3ZWJzb2NrZXQgcG9ydCBvZiBhIGdvc2hhd2tkYiBzZXJ2ZXIuXG5cdCAqIFNlZSB0aGUgW2dvc2hhd2tkYiBkb2N1bWVudGF0aW9uXShodHRwczovL2dvc2hhd2tkYi5pby9kb2N1bWVudGF0aW9uLmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIHRoZSB1cmwgb2YgdGhlIHdlYnNvY2tldCBlbmRwb2ludC4gZS5nLiB3c3M6Ly9sb2NhbGhvc3Q6Nzg5NS93c1xuXHQgKiBAcGFyYW0geyp9IGNvbm5lY3Rpb25PcHRpb25zIGluIG5vZGUuanMsIHRoZSBjb25uZWN0aW9uIG9wdGlvbnMgYXJlIHVzZWQgdG8gbWFrZSB0aGUgY29ubmVjdGlvbi5cblx0ICogXHRcdFx0XHRUaGV5IGFyZSBmb3IgdGhlIFdTIG1vZHVsZSBhbmQgYXJlIGRlZmluZWQgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL2Jsb2IvbWFzdGVyL2RvYy93cy5tZCkuXG5cdCAqIFx0XHRcdFx0VGhlIG9wdGlvbnMgc2hvdWxkIGluY2x1ZGUgYGtleWAsIGBjZXJ0YCBhbmQgaWYgeW91IGRvbid0IHdhbnQgaXQgdG8gY2hlY2tcblx0ICogXHRcdFx0XHR0aGUgc2VydmVyIGNlcnRpZmljYXRlcywgYHtyZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlfWAuXG5cdCAqIEByZXR1cm4ge1Byb21pc2U8Q29ubmVjdGlvbiwgRXJyb3I+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgY29ubmVjdGlvbiBvciByZWplY3RzIHdpdGggYW4gZXJyb3IuXG5cdCAqL1xuXHRzdGF0aWMgY29ubmVjdCh1cmwsIGNvbm5lY3Rpb25PcHRpb25zKSB7XG5cdFx0cmV0dXJuIG5ldyBDb25uZWN0aW9uKHVybCkuY29ubmVjdChjb25uZWN0aW9uT3B0aW9ucylcblx0fVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvZ29zaGF3a2RiLmpzXG4vLyBtb2R1bGUgaWQgPSA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vYmFzZTY0LWpzL2luZGV4LmpzPzJhZGQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gcGxhY2VIb2xkZXJzQ291bnQgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcbiAgLy8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuICAvLyByZXByZXNlbnQgb25lIGJ5dGVcbiAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG4gIC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2VcbiAgcmV0dXJuIGI2NFtsZW4gLSAyXSA9PT0gJz0nID8gMiA6IGI2NFtsZW4gLSAxXSA9PT0gJz0nID8gMSA6IDBcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuICByZXR1cm4gYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIHBsYWNlSG9sZGVycyA9IHBsYWNlSG9sZGVyc0NvdW50KGI2NClcblxuICBhcnIgPSBuZXcgQXJyKGxlbiAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgbCA9IHBsYWNlSG9sZGVycyA+IDAgPyBsZW4gLSA0IDogbGVuXG5cbiAgdmFyIEwgPSAwXG5cbiAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltMKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgb3V0cHV0ID0gJydcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDJdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz09J1xuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyAodWludDhbbGVuIC0gMV0pXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMTBdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPSdcbiAgfVxuXG4gIHBhcnRzLnB1c2gob3V0cHV0KVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2Jhc2U2NC1qcy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }),
/* 8 */
/***/ (function(module, exports) {
eval("exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vaWVlZTc1NC9pbmRleC5qcz83MGZlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9");
/***/ }),
/* 9 */
/***/ (function(module, exports) {
eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL34vaXNhcnJheS9pbmRleC5qcz9lYWJjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2lzYXJyYXkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==");
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(Buffer, global) {var require;var require;!function(t){if(true)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var r;r=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,r.msgpack=t()}}(function(){return function t(r,e,n){function i(f,u){if(!e[f]){if(!r[f]){var a=\"function\"==typeof require&&require;if(!u&&a)return require(f,!0);if(o)return o(f,!0);var s=new Error(\"Cannot find module '\"+f+\"'\");throw s.code=\"MODULE_NOT_FOUND\",s}var c=e[f]={exports:{}};r[f][0].call(c.exports,function(t){var e=r[f][1][t];return i(e?e:t)},c,c.exports,t,r,e,n)}return e[f].exports}for(var o=\"function\"==typeof require&&require,f=0;f<n.length;f++)i(n[f]);return i}({1:[function(t,r,e){e.encode=t(\"./encode\").encode,e.decode=t(\"./decode\").decode,e.Encoder=t(\"./encoder\").Encoder,e.Decoder=t(\"./decoder\").Decoder,e.createCodec=t(\"./ext\").createCodec,e.codec=t(\"./codec\").codec},{\"./codec\":10,\"./decode\":12,\"./decoder\":13,\"./encode\":15,\"./encoder\":16,\"./ext\":20}],2:[function(t,r,e){(function(Buffer){function t(t){return t&&t.isBuffer&&t}r.exports=t(\"undefined\"!=typeof Buffer&&Buffer)||t(this.Buffer)||t(\"undefined\"!=typeof window&&window.Buffer)||this.Buffer}).call(this,t(\"buffer\").Buffer)},{buffer:29}],3:[function(t,r,e){function n(t,r){for(var e=this,n=r||(r|=0),i=t.length,o=0,f=0;f<i;)o=t.charCodeAt(f++),o<128?e[n++]=o:o<2048?(e[n++]=192|o>>>6,e[n++]=128|63&o):o<55296||o>57343?(e[n++]=224|o>>>12,e[n++]=128|o>>>6&63,e[n++]=128|63&o):(o=(o-55296<<10|t.charCodeAt(f++)-56320)+65536,e[n++]=240|o>>>18,e[n++]=128|o>>>12&63,e[n++]=128|o>>>6&63,e[n++]=128|63&o);return n-r}function i(t,r,e){var n=this,i=0|r;e||(e=n.length);for(var o=\"\",f=0;i<e;)f=n[i++],f<128?o+=String.fromCharCode(f):(192===(224&f)?f=(31&f)<<6|63&n[i++]:224===(240&f)?f=(15&f)<<12|(63&n[i++])<<6|63&n[i++]:240===(248&f)&&(f=(7&f)<<18|(63&n[i++])<<12|(63&n[i++])<<6|63&n[i++]),f>=65536?(f-=65536,o+=String.fromCharCode((f>>>10)+55296,(1023&f)+56320)):o+=String.fromCharCode(f));return o}function o(t,r,e,n){var i;e||(e=0),n||0===n||(n=this.length),r||(r=0);var o=n-e;if(t===this&&e<r&&r<n)for(i=o-1;i>=0;i--)t[i+r]=this[i+e];else for(i=0;i<o;i++)t[i+r]=this[i+e];return o}e.copy=o,e.toString=i,e.write=n},{}],4:[function(t,r,e){function n(t){return new Array(t)}function i(t){if(!o.isBuffer(t)&&o.isView(t))t=o.Uint8Array.from(t);else if(o.isArrayBuffer(t))t=new Uint8Array(t);else{if(\"string\"==typeof t)return o.from.call(e,t);if(\"number\"==typeof t)throw new TypeError('\"value\" argument must not be a number')}return Array.prototype.slice.call(t)}var o=t(\"./bufferish\"),e=r.exports=n(0);e.alloc=n,e.concat=o.concat,e.from=i},{\"./bufferish\":8}],5:[function(t,r,e){function n(t){return new Buffer(t)}function i(t){if(!o.isBuffer(t)&&o.isView(t))t=o.Uint8Array.from(t);else if(o.isArrayBuffer(t))t=new Uint8Array(t);else{if(\"string\"==typeof t)return o.from.call(e,t);if(\"number\"==typeof t)throw new TypeError('\"value\" argument must not be a number')}return Buffer.from&&1!==Buffer.from.length?Buffer.from(t):new Buffer(t)}var o=t(\"./bufferish\"),Buffer=o.global,e=r.exports=o.hasBuffer?n(0):[];e.alloc=o.hasBuffer&&Buffer.alloc||n,e.concat=o.concat,e.from=i},{\"./bufferish\":8}],6:[function(t,r,e){function n(t,r,e,n){var o=a.isBuffer(this),f=a.isBuffer(t);if(o&&f)return this.copy(t,r,e,n);if(c||o||f||!a.isView(this)||!a.isView(t))return u.copy.call(this,t,r,e,n);var s=e||null!=n?i.call(this,e,n):this;return t.set(s,r),s.length}function i(t,r){var e=this.slice||!c&&this.subarray;if(e)return e.call(this,t,r);var i=a.alloc.call(this,r-t);return n.call(this,i,0,t,r),i}function o(t,r,e){var n=!s&&a.isBuffer(this)?this.toString:u.toString;return n.apply(this,arguments)}function f(t){function r(){var r=this[t]||u[t];return r.apply(this,arguments)}return r}var u=t(\"./buffer-lite\");e.copy=n,e.slice=i,e.toString=o,e.write=f(\"write\");var a=t(\"./bufferish\"),Buffer=a.global,s=a.hasBuffer&&\"TYPED_ARRAY_SUPPORT\"in Buffer,c=s&&!Buffer.TYPED_ARRAY_SUPPORT},{\"./buffer-lite\":3,\"./bufferish\":8}],7:[function(t,r,e){function n(t){return new Uint8Array(t)}function i(t){if(o.isView(t)){var r=t.byteOffset,n=t.byteLength;t=t.buffer,t.byteLength!==n&&(t.slice?t=t.slice(r,r+n):(t=new Uint8Array(t),t.byteLength!==n&&(t=Array.prototype.slice.call(t,r,r+n))))}else{if(\"string\"==typeof t)return o.from.call(e,t);if(\"number\"==typeof t)throw new TypeError('\"value\" argument must not be a number')}return new Uint8Array(t)}var o=t(\"./bufferish\"),e=r.exports=o.hasArrayBuffer?n(0):[];e.alloc=n,e.concat=o.concat,e.from=i},{\"./bufferish\":8}],8:[function(t,r,e){function n(t){return\"string\"==typeof t?u.call(this,t):a(this).from(t)}function i(t){return a(this).alloc(t)}function o(t,r){function n(t){r+=t.length}function o(t){a+=w.copy.call(t,u,a)}r||(r=0,Array.prototype.forEach.call(t,n));var f=this!==e&&this||t[0],u=i.call(f,r),a=0;return Array.prototype.forEach.call(t,o),u}function f(t){return t instanceof ArrayBuffer||E(t)}function u(t){var r=3*t.length,e=i.call(this,r),n=w.write.call(e,t);return r!==n&&(e=w.slice.call(e,0,n)),e}function a(t){return d(t)?g:y(t)?b:p(t)?v:h?g:l?b:v}function s(){return!1}function c(t,r){return t=\"[object \"+t+\"]\",function(e){return null!=e&&{}.toString.call(r?e[r]:e)===t}}var Buffer=e.global=t(\"./buffer-global\"),h=e.hasBuffer=Buffer&&!!Buffer.isBuffer,l=e.hasArrayBuffer=\"undefined\"!=typeof ArrayBuffer,p=e.isArray=t(\"isarray\");e.isArrayBuffer=l?f:s;var d=e.isBuffer=h?Buffer.isBuffer:s,y=e.isView=l?ArrayBuffer.isView||c(\"ArrayBuffer\",\"buffer\"):s;e.alloc=i,e.concat=o,e.from=n;var v=e.Array=t(\"./bufferish-array\"),g=e.Buffer=t(\"./bufferish-buffer\"),b=e.Uint8Array=t(\"./bufferish-uint8array\"),w=e.prototype=t(\"./bufferish-proto\"),E=c(\"ArrayBuffer\")},{\"./buffer-global\":2,\"./bufferish-array\":4,\"./bufferish-buffer\":5,\"./bufferish-proto\":6,\"./bufferish-uint8array\":7,isarray:34}],9:[function(t,r,e){function n(t){return this instanceof n?(this.options=t,void this.init()):new n(t)}function i(t){for(var r in t)n.prototype[r]=o(n.prototype[r],t[r])}function o(t,r){function e(){return t.apply(this,arguments),r.apply(this,arguments)}return t&&r?e:t||r}function f(t){function r(t,r){return r(t)}return t=t.slice(),function(e){return t.reduce(r,e)}}function u(t){return s(t)?f(t):t}function a(t){return new n(t)}var s=t(\"isarray\");e.createCodec=a,e.install=i,e.filter=u;var c=t(\"./bufferish\");n.prototype.init=function(){var t=this.options;return t&&t.uint8array&&(this.bufferish=c.Uint8Array),this},e.preset=a({preset:!0})},{\"./bufferish\":8,isarray:34}],10:[function(t,r,e){t(\"./read-core\"),t(\"./write-core\"),e.codec={preset:t(\"./codec-base\").preset}},{\"./codec-base\":9,\"./read-core\":22,\"./write-core\":25}],11:[function(t,r,e){function n(t){if(!(this instanceof n))return new n(t);if(t&&(this.options=t,t.codec)){var r=this.codec=t.codec;r.bufferish&&(this.bufferish=r.bufferish)}}e.DecodeBuffer=n;var i=t(\"./read-core\").preset,o=t(\"./flex-buffer\").FlexDecoder;o.mixin(n.prototype),n.prototype.codec=i,n.prototype.fetch=function(){return this.codec.decode(this)}},{\"./flex-buffer\":21,\"./read-core\":22}],12:[function(t,r,e){function n(t,r){var e=new i(r);return e.write(t),e.read()}e.decode=n;var i=t(\"./decode-buffer\").DecodeBuffer},{\"./decode-buffer\":11}],13:[function(t,r,e){function n(t){return this instanceof n?void o.call(this,t):new n(t)}e.Decoder=n;var i=t(\"event-lite\"),o=t(\"./decode-buffer\").DecodeBuffer;n.prototype=new o,i.mixin(n.prototype),n.prototype.decode=function(t){arguments.length&&this.write(t),this.flush()},n.prototype.push=function(t){this.emit(\"data\",t)},n.prototype.end=function(t){this.decode(t),this.emit(\"end\")}},{\"./decode-buffer\":11,\"event-lite\":31}],14:[function(t,r,e){function n(t){if(!(this instanceof n))return new n(t);if(t&&(this.options=t,t.codec)){var r=this.codec=t.codec;r.bufferish&&(this.bufferish=r.bufferish)}}e.EncodeBuffer=n;var i=t(\"./write-core\").preset,o=t(\"./flex-buffer\").FlexEncoder;o.mixin(n.prototype),n.prototype.codec=i,n.prototype.write=function(t){this.codec.encode(this,t)}},{\"./flex-buffer\":21,\"./write-core\":25}],15:[function(t,r,e){function n(t,r){var e=new i(r);return e.write(t),e.read()}e.encode=n;var i=t(\"./encode-buffer\").EncodeBuffer},{\"./encode-buffer\":14}],16:[function(t,r,e){function n(t){return this instanceof n?void o.call(this,t):new n(t)}e.Encoder=n;var i=t(\"event-lite\"),o=t(\"./encode-buffer\").EncodeBuffer;n.prototype=new o,i.mixin(n.prototype),n.prototype.encode=function(t){this.write(t),this.emit(\"data\",this.read())},n.prototype.end=function(t){arguments.length&&this.encode(t),this.flush(),this.emit(\"end\")}},{\"./encode-buffer\":14,\"event-lite\":31}],17:[function(t,r,e){function n(t,r){return this instanceof n?(this.buffer=i.from(t),void(this.type=r)):new n(t,r)}e.ExtBuffer=n;var i=t(\"./bufferish\")},{\"./bufferish\":8}],18:[function(t,r,e){function n(t){t.addExtPacker(14,Error,[u,i]),t.addExtPacker(1,EvalError,[u,i]),t.addExtPacker(2,RangeError,[u,i]),t.addExtPacker(3,ReferenceError,[u,i]),t.addExtPacker(4,SyntaxError,[u,i]),t.addExtPacker(5,TypeError,[u,i]),t.addExtPacker(6,URIError,[u,i]),t.addExtPacker(10,RegExp,[f,i]),t.addExtPacker(11,Boolean,[o,i]),t.addExtPacker(12,String,[o,i]),t.addExtPacker(13,Date,[Number,i]),t.addExtPacker(15,Number,[o,i]),\"undefined\"!=typeof Uint8Array&&(t.addExtPacker(17,Int8Array,c),t.addExtPacker(18,Uint8Array,c),t.addExtPacker(19,Int16Array,c),t.addExtPacker(20,Uint16Array,c),t.addExtPacker(21,Int32Array,c),t.addExtPacker(22,Uint32Array,c),t.addExtPacker(23,Float32Array,c),\"undefined\"!=typeof Float64Array&&t.addExtPacker(24,Float64Array,c),\"undefined\"!=typeof Uint8ClampedArray&&t.addExtPacker(25,Uint8ClampedArray,c),t.addExtPacker(26,ArrayBuffer,c),t.addExtPacker(29,DataView,c)),s.hasBuffer&&t.addExtPacker(27,Buffer,s.from)}function i(r){return a||(a=t(\"./encode\").encode),a(r)}function o(t){return t.valueOf()}function f(t){t=RegExp.prototype.toString.call(t).split(\"/\"),t.shift();var r=[t.pop()];return r.unshift(t.join(\"/\")),r}function u(t){var r={};for(var e in h)r[e]=t[e];return r}e.setExtPackers=n;var a,s=t(\"./bufferish\"),Buffer=s.global,c=s.Uint8Array.from,h={name:1,message:1,stack:1,columnNumber:1,fileName:1,lineNumber:1}},{\"./bufferish\":8,\"./encode\":15}],19:[function(t,r,e){function n(t){t.addExtUnpacker(14,[i,f(Error)]),t.addExtUnpacker(1,[i,f(EvalError)]),t.addExtUnpacker(2,[i,f(RangeError)]),t.addExtUnpacker(3,[i,f(ReferenceError)]),t.addExtUnpacker(4,[i,f(SyntaxError)]),t.addExtUnpacker(5,[i,f(TypeError)]),t.addExtUnpacker(6,[i,f(URIError)]),t.addExtUnpacker(10,[i,o]),t.addExtUnpacker(11,[i,u(Boolean)]),t.addExtUnpacker(12,[i,u(String)]),t.addExtUnpacker(13,[i,u(Date)]),t.addExtUnpacker(15,[i,u(Number)]),\"undefined\"!=typeof Uint8Array&&(t.addExtUnpacker(17,u(Int8Array)),t.addExtUnpacker(18,u(Uint8Array)),t.addExtUnpacker(19,[a,u(Int16Array)]),t.addExtUnpacker(20,[a,u(Uint16Array)]),t.addExtUnpacker(21,[a,u(Int32Array)]),t.addExtUnpacker(22,[a,u(Uint32Array)]),t.addExtUnpacker(23,[a,u(Float32Array)]),\"undefined\"!=typeof Float64Array&&t.addExtUnpacker(24,[a,u(Float64Array)]),\"undefined\"!=typeof Uint8ClampedArray&&t.addExtUnpacker(25,u(Uint8ClampedArray)),t.addExtUnpacker(26,a),t.addExtUnpacker(29,[a,u(DataView)])),c.hasBuffer&&t.addExtUnpacker(27,u(Buffer))}function i(r){return s||(s=t(\"./decode\").decode),s(r)}function o(t){return RegExp.apply(null,t)}function f(t){return function(r){var e=new t;for(var n in h)e[n]=r[n];return e}}function u(t){return function(r){return new t(r)}}function a(t){return new Uint8Array(t).buffer}e.setExtUnpackers=n;var s,c=t(\"./bufferish\"),Buffer=c.global,h={name:1,message:1,stack:1,columnNumber:1,fileName:1,lineNumber:1}},{\"./bufferish\":8,\"./decode\":12}],20:[function(t,r,e){t(\"./read-core\"),t(\"./write-core\"),e.createCodec=t(\"./codec-base\").createCodec},{\"./codec-base\":9,\"./read-core\":22,\"./write-core\":25}],21:[function(t,r,e){function n(){if(!(this instanceof n))return new n}function i(){if(!(this instanceof i))return new i}function o(){function t(t){var r=this.offset?p.prototype.slice.call(this.buffer,this.offset):this.buffer;this.buffer=r?t?this.bufferish.concat([r,t]):r:t,this.offset=0}function r(){for(;this.offset<this.buffer.length;){var t,r=this.offset;try{t=this.fetch()}catch(t){if(t&&t.message!=v)throw t;this.offset=r;break}this.push(t)}}function e(t){var r=this.offset,e=r+t;if(e>this.buffer.length)throw new Error(v);return this.offset=e,r}return{bufferish:p,write:t,fetch:a,flush:r,push:c,pull:h,read:s,reserve:e,offset:0}}function f(){function t(){var t=this.start;if(t<this.offset){var r=this.start=this.offset;return p.prototype.slice.call(this.buffer,t,r)}}function r(){for(;this.start<this.offset;){var t=this.fetch();t&&this.push(t)}}function e(){var t=this.buffers||(this.buffers=[]),r=t.length>1?this.bufferish.concat(t):t[0];return t.length=0,r}function n(t){var r=0|t;if(this.buffer){var e=this.buffer.length,n=0|this.offset,i=n+r;if(i<e)return this.offset=i,n;this.flush(),t=Math.max(t,Math.min(2*e,this.maxBufferSize))}return t=Math.max(t,this.minBufferSize),this.buffer=this.bufferish.alloc(t),this.start=0,this.offset=r,0}function i(t){var r=t.length;if(r>this.minBufferSize)this.flush(),this.push(t);else{var e=this.reserve(r);p.prototype.copy.call(t,this.buffer,e)}}return{bufferish:p,write:u,fetch:t,flush:r,push:c,pull:e,read:s,reserve:n,send:i,maxBufferSize:y,minBufferSize:d,offset:0,start:0}}function u(){throw new Error(\"method not implemented: write()\")}function a(){throw new Error(\"method not implemented: fetch()\")}function s(){var t=this.buffers&&this.buffers.length;return t?(this.flush(),this.pull()):this.fetch()}function c(t){var r=this.buffers||(this.buffers=[]);r.push(t)}function h(){var t=this.buffers||(this.buffers=[]);return t.shift()}function l(t){function r(r){for(var e in t)r[e]=t[e];return r}return r}e.FlexDecoder=n,e.FlexEncoder=i;var p=t(\"./bufferish\"),d=2048,y=65536,v=\"BUFFER_SHORTAGE\";n.mixin=l(o()),n.mixin(n.prototype),i.mixin=l(f()),i.mixin(i.prototype)},{\"./bufferish\":8}],22:[function(t,r,e){function n(t){function r(t){var r=s(t),n=e[r];if(!n)throw new Error(\"Invalid type: \"+(r?\"0x\"+r.toString(16):r));return n(t)}var e=c.getReadToken(t);return r}function i(){var t=this.options;return this.decode=n(t),t&&t.preset&&a.setExtUnpackers(this),this}function o(t,r){var e=this.extUnpackers||(this.extUnpackers=[]);e[t]=h.filter(r)}function f(t){function r(r){return new u(r,t)}var e=this.extUnpackers||(this.extUnpackers=[]);return e[t]||r}var u=t(\"./ext-buffer\").ExtBuffer,a=t(\"./ext-unpacker\"),s=t(\"./read-format\").readUint8,c=t(\"./read-token\"),h=t(\"./codec-base\");h.install({addExtUnpacker:o,getExtUnpacker:f,init:i}),e.preset=i.call(h.preset)},{\"./codec-base\":9,\"./ext-buffer\":17,\"./ext-unpacker\":19,\"./read-format\":23,\"./read-token\":24}],23:[function(t,r,e){function n(t){var r=k.hasArrayBuffer&&t&&t.binarraybuffer,e=t&&t.int64,n=T&&t&&t.usemap,B={map:n?o:i,array:f,str:u,bin:r?s:a,ext:c,uint8:h,uint16:p,uint32:y,uint64:g(8,e?E:b),int8:l,int16:d,int32:v,int64:g(8,e?A:w),float32:g(4,m),float64:g(8,x)};return B}function i(t,r){var e,n={},i=new Array(r),o=new Array(r),f=t.codec.decode;for(e=0;e<r;e++)i[e]=f(t),o[e]=f(t);for(e=0;e<r;e++)n[i[e]]=o[e];return n}function o(t,r){var e,n=new Map,i=new Array(r),o=new Array(r),f=t.codec.decode;for(e=0;e<r;e++)i[e]=f(t),o[e]=f(t);for(e=0;e<r;e++)n.set(i[e],o[e]);return n}function f(t,r){for(var e=new Array(r),n=t.codec.decode,i=0;i<r;i++)e[i]=n(t);return e}function u(t,r){var e=t.reserve(r),n=e+r;return _.toString.call(t.buffer,\"utf-8\",e,n)}function a(t,r){var e=t.reserve(r),n=e+r,i=_.slice.call(t.buffer,e,n);return k.from(i)}function s(t,r){var e=t.reserve(r),n=e+r,i=_.slice.call(t.buffer,e,n);return k.Uint8Array.from(i).buffer}function c(t,r){var e=t.reserve(r+1),n=t.buffer[e++],i=e+r,o=t.codec.getExtUnpacker(n);if(!o)throw new Error(\"Invalid ext type: \"+(n?\"0x\"+n.toString(16):n));var f=_.slice.call(t.buffer,e,i);return o(f)}function h(t){var r=t.reserve(1);return t.buffer[r]}function l(t){var r=t.reserve(1),e=t.buffer[r];return 128&e?e-256:e}function p(t){var r=t.reserve(2),e=t.buffer;return e[r++]<<8|e[r]}function d(t){var r=t.reserve(2),e=t.buffer,n=e[r++]<<8|e[r];return 32768&n?n-65536:n}function y(t){var r=t.reserve(4),e=t.buffer;return 16777216*e[r++]+(e[r++]<<16)+(e[r++]<<8)+e[r]}function v(t){var r=t.reserve(4),e=t.buffer;return e[r++]<<24|e[r++]<<16|e[r++]<<8|e[r]}function g(t,r){return function(e){var n=e.reserve(t);return r.call(e.buffer,n,S)}}function b(t){return new P(this,t).toNumber()}function w(t){return new R(this,t).toNumber()}function E(t){return new P(this,t)}function A(t){return new R(this,t)}function m(t){return B.read(this,t,!1,23,4)}function x(t){return B.read(this,t,!1,52,8)}var B=t(\"ieee754\"),U=t(\"int64-buffer\"),P=U.Uint64BE,R=U.Int64BE;e.getReadFormat=n,e.readUint8=h;var k=t(\"./bufferish\"),_=t(\"./bufferish-proto\"),T=\"undefined\"!=typeof Map,S=!0},{\"./bufferish\":8,\"./bufferish-proto\":6,ieee754:32,\"int64-buffer\":33}],24:[function(t,r,e){function n(t){var r=s.getReadFormat(t);return t&&t.useraw?o(r):i(r)}function i(t){var r,e=new Array(256);for(r=0;r<=127;r++)e[r]=f(r);for(r=128;r<=143;r++)e[r]=a(r-128,t.map);for(r=144;r<=159;r++)e[r]=a(r-144,t.array);for(r=160;r<=191;r++)e[r]=a(r-160,t.str);for(e[192]=f(null),e[193]=null,e[194]=f(!1),e[195]=f(!0),e[196]=u(t.uint8,t.bin),e[197]=u(t.uint16,t.bin),e[198]=u(t.uint32,t.bin),e[199]=u(t.uint8,t.ext),e[200]=u(t.uint16,t.ext),e[201]=u(t.uint32,t.ext),e[202]=t.float32,e[203]=t.float64,e[204]=t.uint8,e[205]=t.uint16,e[206]=t.uint32,e[207]=t.uint64,e[208]=t.int8,e[209]=t.int16,e[210]=t.int32,e[211]=t.int64,e[212]=a(1,t.ext),e[213]=a(2,t.ext),e[214]=a(4,t.ext),e[215]=a(8,t.ext),e[216]=a(16,t.ext),e[217]=u(t.uint8,t.str),e[218]=u(t.uint16,t.str),e[219]=u(t.uint32,t.str),e[220]=u(t.uint16,t.array),e[221]=u(t.uint32,t.array),e[222]=u(t.uint16,t.map),e[223]=u(t.uint32,t.map),r=224;r<=255;r++)e[r]=f(r-256);return e}function o(t){var r,e=i(t).slice();for(e[217]=e[196],e[218]=e[197],e[219]=e[198],r=160;r<=191;r++)e[r]=a(r-160,t.bin);return e}function f(t){return function(){return t}}function u(t,r){return function(e){var n=t(e);return r(e,n)}}function a(t,r){return function(e){return r(e,t)}}var s=t(\"./read-format\");e.getReadToken=n},{\"./read-format\":23}],25:[function(t,r,e){function n(t){function r(t,r){var n=e[typeof r];if(!n)throw new Error('Unsupported type \"'+typeof r+'\": '+r);n(t,r)}var e=s.getWriteType(t);return r}function i(){var t=this.options;return this.encode=n(t),t&&t.preset&&a.setExtPackers(this),this}function o(t,r,e){function n(r){return e&&(r=e(r)),new u(r,t)}e=c.filter(e);var i=r.name;if(i&&\"Object\"!==i){var o=this.extPackers||(this.extPackers={});o[i]=n}else{var f=this.extEncoderList||(this.extEncoderList=[]);f.unshift([r,n])}}function f(t){var r=this.extPackers||(this.extPackers={}),e=t.constructor,n=e&&e.name&&r[e.name];if(n)return n;for(var i=this.extEncoderList||(this.extEncoderList=[]),o=i.length,f=0;f<o;f++){var u=i[f];if(e===u[0])return u[1]}}var u=t(\"./ext-buffer\").ExtBuffer,a=t(\"./ext-packer\"),s=t(\"./write-type\"),c=t(\"./codec-base\");c.install({addExtPacker:o,getExtPacker:f,init:i}),e.preset=i.call(c.preset)},{\"./codec-base\":9,\"./ext-buffer\":17,\"./ext-packer\":18,\"./write-type\":27}],26:[function(t,r,e){function n(t){return t&&t.uint8array?i():m||E.hasBuffer&&t&&t.safe?f():o()}function i(){var t=o();return t[202]=c(202,4,p),t[203]=c(203,8,d),t}function o(){var t=w.slice();return t[196]=u(196),t[197]=a(197),t[198]=s(198),t[199]=u(199),t[200]=a(200),t[201]=s(201),t[202]=c(202,4,x.writeFloatBE||p,!0),t[203]=c(203,8,x.writeDoubleBE||d,!0),t[204]=u(204),t[205]=a(205),t[206]=s(206),t[207]=c(207,8,h),t[208]=u(208),t[209]=a(209),t[210]=s(210),t[211]=c(211,8,l),t[217]=u(217),t[218]=a(218),t[219]=s(219),t[220]=a(220),t[221]=s(221),t[222]=a(222),t[223]=s(223),t}function f(){var t=w.slice();return t[196]=c(196,1,Buffer.prototype.writeUInt8),t[197]=c(197,2,Buffer.prototype.writeUInt16BE),t[198]=c(198,4,Buffer.prototype.writeUInt32BE),t[199]=c(199,1,Buffer.prototype.writeUInt8),t[200]=c(200,2,Buffer.prototype.writeUInt16BE),t[201]=c(201,4,Buffer.prototype.writeUInt32BE),t[202]=c(202,4,Buffer.prototype.writeFloatBE),t[203]=c(203,8,Buffer.prototype.writeDoubleBE),t[204]=c(204,1,Buffer.prototype.writeUInt8),t[205]=c(205,2,Buffer.prototype.writeUInt16BE),t[206]=c(206,4,Buffer.prototype.writeUInt32BE),t[207]=c(207,8,h),t[208]=c(208,1,Buffer.prototype.writeInt8),t[209]=c(209,2,Buffer.prototype.writeInt16BE),t[210]=c(210,4,Buffer.prototype.writeInt32BE),t[211]=c(211,8,l),t[217]=c(217,1,Buffer.prototype.writeUInt8),t[218]=c(218,2,Buffer.prototype.writeUInt16BE),t[219]=c(219,4,Buffer.prototype.writeUInt32BE),t[220]=c(220,2,Buffer.prototype.writeUInt16BE),t[221]=c(221,4,Buffer.prototype.writeUInt32BE),t[222]=c(222,2,Buffer.prototype.writeUInt16BE),t[223]=c(223,4,Buffer.prototype.writeUInt32BE),t}function u(t){return function(r,e){var n=r.reserve(2),i=r.buffer;i[n++]=t,i[n]=e}}function a(t){return function(r,e){var n=r.reserve(3),i=r.buffer;i[n++]=t,i[n++]=e>>>8,i[n]=e}}function s(t){return function(r,e){var n=r.reserve(5),i=r.buffer;i[n++]=t,i[n++]=e>>>24,i[n++]=e>>>16,i[n++]=e>>>8,i[n]=e}}function c(t,r,e,n){return function(i,o){var f=i.reserve(r+1);i.buffer[f++]=t,e.call(i.buffer,o,f,n)}}function h(t,r){new g(this,r,t)}function l(t,r){new b(this,r,t)}function p(t,r){y.write(this,t,r,!1,23,4)}function d(t,r){y.write(this,t,r,!1,52,8)}var y=t(\"ieee754\"),v=t(\"int64-buffer\"),g=v.Uint64BE,b=v.Int64BE,w=t(\"./write-uint8\").uint8,E=t(\"./bufferish\"),Buffer=E.global,A=E.hasBuffer&&\"TYPED_ARRAY_SUPPORT\"in Buffer,m=A&&!Buffer.TYPED_ARRAY_SUPPORT,x=E.hasBuffer&&Buffer.prototype||{};e.getWriteToken=n},{\"./bufferish\":8,\"./write-uint8\":28,ieee754:32,\"int64-buffer\":33}],27:[function(t,r,e){function n(t){function r(t,r){var e=r?195:194;_[e](t,r)}function e(t,r){var e,n=0|r;return r!==n?(e=203,void _[e](t,r)):(e=-32<=n&&n<=127?255&n:0<=n?n<=255?204:n<=65535?205:206:-128<=n?208:-32768<=n?209:210,void _[e](t,n))}function n(t,r){var e=207;_[e](t,r.toArray())}function o(t,r){var e=211;_[e](t,r.toArray())}function v(t){return t<32?1:t<=255?2:t<=65535?3:5}function g(t){return t<32?1:t<=65535?3:5}function b(t){function r(r,e){var n=e.length,i=5+3*n;r.offset=r.reserve(i);var o=r.buffer,f=t(n),u=r.offset+f;n=s.write.call(o,e,u);var a=t(n);if(f!==a){var c=u+a-f,h=u+n;s.copy.call(o,o,c,u,h)}var l=1===a?160+n:a<=3?215+a:219;_[l](r,n),r.offset+=n}return r}function w(t,r){if(null===r)return A(t,r);if(I(r))return Y(t,r);if(i(r))return m(t,r);if(f.isUint64BE(r))return n(t,r);if(u.isInt64BE(r))return o(t,r);var e=t.codec.getExtPacker(r);return e&&(r=e(r)),r instanceof l?U(t,r):void D(t,r)}function E(t,r){return I(r)?k(t,r):void w(t,r)}function A(t,r){var e=192;_[e](t,r)}function m(t,r){var e=r.length,n=e<16?144+e:e<=65535?220:221;_[n](t,e);for(var i=t.codec.encode,o=0;o<e;o++)i(t,r[o])}function x(t,r){var e=r.length,n=e<255?196:e<=65535?197:198;_[n](t,e),t.send(r)}function B(t,r){x(t,new Uint8Array(r))}function U(t,r){var e=r.buffer,n=e.length,i=y[n]||(n<255?199:n<=65535?200:201);_[i](t,n),h[r.type](t),t.send(e)}function P(t,r){var e=Object.keys(r),n=e.length,i=n<16?128+n:n<=65535?222:223;_[i](t,n);var o=t.codec.encode;e.forEach(function(e){o(t,e),o(t,r[e])})}function R(t,r){if(!(r instanceof Map))return P(t,r);var e=r.size,n=e<16?128+e:e<=65535?222:223;_[n](t,e);var i=t.codec.encode;r.forEach(function(r,e,n){i(t,e),i(t,r)})}function k(t,r){var e=r.length,n=e<32?160+e:e<=65535?218:219;_[n](t,e),t.send(r)}var _=c.getWriteToken(t),T=t&&t.useraw,S=p&&t&&t.binarraybuffer,I=S?a.isArrayBuffer:a.isBuffer,Y=S?B:x,C=d&&t&&t.usemap,D=C?R:P,O={boolean:r,function:A,number:e,object:T?E:w,string:b(T?g:v),symbol:A,undefined:A};return O}var i=t(\"isarray\"),o=t(\"int64-buffer\"),f=o.Uint64BE,u=o.Int64BE,a=t(\"./bufferish\"),s=t(\"./bufferish-proto\"),c=t(\"./write-token\"),h=t(\"./write-uint8\").uint8,l=t(\"./ext-buffer\").ExtBuffer,p=\"undefined\"!=typeof Uint8Array,d=\"undefined\"!=typeof Map,y=[];y[1]=212,y[2]=213,y[4]=214,y[8]=215,y[16]=216,e.getWriteType=n},{\"./bufferish\":8,\"./bufferish-proto\":6,\"./ext-buffer\":17,\"./write-token\":26,\"./write-uint8\":28,\"int64-buffer\":33,isarray:34}],28:[function(t,r,e){function n(t){return function(r){var e=r.reserve(1);r.buffer[e]=t}}for(var i=e.uint8=new Array(256),o=0;o<=255;o++)i[o]=n(o)},{}],29:[function(t,r,e){(function(r){\"use strict\";function n(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&\"function\"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}function i(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(t,r){if(i()<r)throw new RangeError(\"Invalid typed array length\");return Buffer.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(r),t.__proto__=Buffer.prototype):(null===t&&(t=new Buffer(r)),t.length=r),t}function Buffer(t,r,e){if(!(Buffer.TYPED_ARRAY_SUPPORT||this instanceof Buffer))return new Buffer(t,r,e);if(\"number\"==typeof t){if(\"string\"==typeof r)throw new Error(\"If encoding is specified then the first argument must be a string\");return s(this,t)}return f(this,t,r,e)}function f(t,r,e,n){if(\"number\"==typeof r)throw new TypeError('\"value\" argument must not be a number');return\"undefined\"!=typeof ArrayBuffer&&r instanceof ArrayBuffer?l(t,r,e,n):\"string\"==typeof r?c(t,r,e):p(t,r)}function u(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be a number');if(t<0)throw new RangeError('\"size\" argument must not be negative')}function a(t,r,e,n){return u(r),r<=0?o(t,r):void 0!==e?\"string\"==typeof n?o(t,r).fill(e,n):o(t,r).fill(e):o(t,r)}function s(t,r){if(u(r),t=o(t,r<0?0:0|d(r)),!Buffer.TYPED_ARRAY_SUPPORT)for(var e=0;e<r;++e)t[e]=0;return t}function c(t,r,e){if(\"string\"==typeof e&&\"\"!==e||(e=\"utf8\"),!Buffer.isEncoding(e))throw new TypeError('\"encoding\" must be a valid string encoding');var n=0|v(r,e);t=o(t,n);var i=t.write(r,e);return i!==n&&(t=t.slice(0,i)),t}function h(t,r){var e=r.length<0?0:0|d(r.length);t=o(t,e);for(var n=0;n<e;n+=1)t[n]=255&r[n];return t}function l(t,r,e,n){if(r.byteLength,e<0||r.byteLength<e)throw new RangeError(\"'offset' is out of bounds\");if(r.byteLength<e+(n||0))throw new RangeError(\"'length' is out of bounds\");return r=void 0===e&&void 0===n?new Uint8Array(r):void 0===n?new Uint8Array(r,e):new Uint8Array(r,e,n),Buffer.TYPED_ARRAY_SUPPORT?(t=r,t.__proto__=Buffer.prototype):t=h(t,r),t}function p(t,r){if(Buffer.isBuffer(r)){var e=0|d(r.length);return t=o(t,e),0===t.length?t:(r.copy(t,0,0,e),t)}if(r){if(\"undefined\"!=typeof ArrayBuffer&&r.buffer instanceof ArrayBuffer||\"length\"in r)return\"number\"!=typeof r.length||H(r.length)?o(t,0):h(t,r);if(\"Buffer\"===r.type&&Q(r.data))return h(t,r.data)}throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}function d(t){if(t>=i())throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+i().toString(16)+\" bytes\");return 0|t}function y(t){return+t!=t&&(t=0),Buffer.alloc(+t)}function v(t,r){if(Buffer.isBuffer(t))return t.length;if(\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;\"string\"!=typeof t&&(t=\"\"+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case\"ascii\":case\"latin1\":case\"binary\":return e;case\"utf8\":case\"utf-8\":case void 0:return q(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*e;case\"hex\":return e>>>1;case\"base64\":return X(t).length;default:if(n)return q(t).length;r=(\"\"+r).toLowerCase(),n=!0}}function g(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return\"\";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return\"\";if(e>>>=0,r>>>=0,e<=r)return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return I(this,r,e);case\"utf8\":case\"utf-8\":return k(this,r,e);case\"ascii\":return T(this,r,e);case\"latin1\":case\"binary\":return S(this,r,e);case\"base64\":return R(this,r,e);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Y(this,r,e);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),n=!0}}function b(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function w(t,r,e,n,i){if(0===t.length)return-1;if(\"string\"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=i?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(i)return-1;e=t.length-1}else if(e<0){if(!i)return-1;e=0}if(\"string\"==typeof r&&(r=Buffer.from(r,n)),Buffer.isBuffer(r))return 0===r.length?-1:E(t,r,e,n,i);if(\"number\"==typeof r)return r=255&r,Buffer.TYPED_ARRAY_SUPPORT&&\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):E(t,[r],e,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function E(t,r,e,n,i){function o(t,r){return 1===f?t[r]:t.readUInt16BE(r*f)}var f=1,u=t.length,a=r.length;if(void 0!==n&&(n=String(n).toLowerCase(),\"ucs2\"===n||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(t.length<2||r.length<2)return-1;f=2,u/=2,a/=2,e/=2}var s;if(i){var c=-1;for(s=e;s<u;s++)if(o(t,s)===o(r,c===-1?0:s-c)){if(c===-1&&(c=s),s-c+1===a)return c*f}else c!==-1&&(s-=s-c),c=-1}else for(e+a>u&&(e=u-a),s=e;s>=0;s--){for(var h=!0,l=0;l<a;l++)if(o(t,s+l)!==o(r,l)){h=!1;break}if(h)return s}return-1}function A(t,r,e,n){e=Number(e)||0;var i=t.length-e;n?(n=Number(n),n>i&&(n=i)):n=i;var o=r.length;if(o%2!==0)throw new TypeError(\"Invalid hex string\");n>o/2&&(n=o/2);for(var f=0;f<n;++f){var u=parseInt(r.substr(2*f,2),16);if(isNaN(u))return f;t[e+f]=u}return f}function m(t,r,e,n){return G(q(r,t.length-e),t,e,n)}function x(t,r,e,n){return G(W(r),t,e,n)}function B(t,r,e,n){return x(t,r,e,n)}function U(t,r,e,n){return G(X(r),t,e,n)}function P(t,r,e,n){return G(J(r,t.length-e),t,e,n)}function R(t,r,e){return 0===r&&e===t.length?Z.fromByteArray(t):Z.fromByteArray(t.slice(r,e))}function k(t,r,e){e=Math.min(t.length,e);for(var n=[],i=r;i<e;){var o=t[i],f=null,u=o>239?4:o>223?3:o>191?2:1;if(i+u<=e){var a,s,c,h;switch(u){case 1:o<128&&(f=o);break;case 2:a=t[i+1],128===(192&a)&&(h=(31&o)<<6|63&a,h>127&&(f=h));break;case 3:a=t[i+1],s=t[i+2],128===(192&a)&&128===(192&s)&&(h=(15&o)<<12|(63&a)<<6|63&s,h>2047&&(h<55296||h>57343)&&(f=h));break;case 4:a=t[i+1],s=t[i+2],c=t[i+3],128===(192&a)&&128===(192&s)&&128===(192&c)&&(h=(15&o)<<18|(63&a)<<12|(63&s)<<6|63&c,h>65535&&h<1114112&&(f=h))}}null===f?(f=65533,u=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=u}return _(n)}function _(t){var r=t.length;if(r<=$)return String.fromCharCode.apply(String,t);for(var e=\"\",n=0;n<r;)e+=String.fromCharCode.apply(String,t.slice(n,n+=$));return e}function T(t,r,e){var n=\"\";e=Math.min(t.length,e);for(var i=r;i<e;++i)n+=String.fromCharCode(127&t[i]);return n}function S(t,r,e){var n=\"\";e=Math.min(t.length,e);for(var i=r;i<e;++i)n+=String.fromCharCode(t[i]);return n}function I(t,r,e){var n=t.length;(!r||r<0)&&(r=0),(!e||e<0||e>n)&&(e=n);for(var i=\"\",o=r;o<e;++o)i+=V(t[o]);return i}function Y(t,r,e){for(var n=t.slice(r,e),i=\"\",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function C(t,r,e){if(t%1!==0||t<0)throw new RangeError(\"offset is not uint\");if(t+r>e)throw new RangeError(\"Trying to access beyond buffer length\")}function D(t,r,e,n,i,o){if(!Buffer.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>i||r<o)throw new RangeError('\"value\" argument is out of bounds');if(e+n>t.length)throw new RangeError(\"Index out of range\")}function O(t,r,e,n){r<0&&(r=65535+r+1);for(var i=0,o=Math.min(t.length-e,2);i<o;++i)t[e+i]=(r&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function L(t,r,e,n){r<0&&(r=4294967295+r+1);for(var i=0,o=Math.min(t.length-e,4);i<o;++i)t[e+i]=r>>>8*(n?i:3-i)&255}function M(t,r,e,n,i,o){if(e+n>t.length)throw new RangeError(\"Index out of range\");if(e<0)throw new RangeError(\"Index out of range\")}function N(t,r,e,n,i){return i||M(t,r,e,4,3.4028234663852886e38,-3.4028234663852886e38),K.write(t,r,e,n,23,4),e+4}function F(t,r,e,n,i){return i||M(t,r,e,8,1.7976931348623157e308,-1.7976931348623157e308),K.write(t,r,e,n,52,8),e+8}function j(t){\nif(t=z(t).replace(tt,\"\"),t.length<2)return\"\";for(;t.length%4!==0;)t+=\"=\";return t}function z(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")}function V(t){return t<16?\"0\"+t.toString(16):t.toString(16)}function q(t,r){r=r||1/0;for(var e,n=t.length,i=null,o=[],f=0;f<n;++f){if(e=t.charCodeAt(f),e>55295&&e<57344){if(!i){if(e>56319){(r-=3)>-1&&o.push(239,191,189);continue}if(f+1===n){(r-=3)>-1&&o.push(239,191,189);continue}i=e;continue}if(e<56320){(r-=3)>-1&&o.push(239,191,189),i=e;continue}e=(i-55296<<10|e-56320)+65536}else i&&(r-=3)>-1&&o.push(239,191,189);if(i=null,e<128){if((r-=1)<0)break;o.push(e)}else if(e<2048){if((r-=2)<0)break;o.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;o.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error(\"Invalid code point\");if((r-=4)<0)break;o.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return o}function W(t){for(var r=[],e=0;e<t.length;++e)r.push(255&t.charCodeAt(e));return r}function J(t,r){for(var e,n,i,o=[],f=0;f<t.length&&!((r-=2)<0);++f)e=t.charCodeAt(f),n=e>>8,i=e%256,o.push(i),o.push(n);return o}function X(t){return Z.toByteArray(j(t))}function G(t,r,e,n){for(var i=0;i<n&&!(i+e>=r.length||i>=t.length);++i)r[i+e]=t[i];return i}function H(t){return t!==t}var Z=t(\"base64-js\"),K=t(\"ieee754\"),Q=t(\"isarray\");e.Buffer=Buffer,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,Buffer.TYPED_ARRAY_SUPPORT=void 0!==r.TYPED_ARRAY_SUPPORT?r.TYPED_ARRAY_SUPPORT:n(),e.kMaxLength=i(),Buffer.poolSize=8192,Buffer._augment=function(t){return t.__proto__=Buffer.prototype,t},Buffer.from=function(t,r,e){return f(null,t,r,e)},Buffer.TYPED_ARRAY_SUPPORT&&(Buffer.prototype.__proto__=Uint8Array.prototype,Buffer.__proto__=Uint8Array,\"undefined\"!=typeof Symbol&&Symbol.species&&Buffer[Symbol.species]===Buffer&&Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:!0})),Buffer.alloc=function(t,r,e){return a(null,t,r,e)},Buffer.allocUnsafe=function(t){return s(null,t)},Buffer.allocUnsafeSlow=function(t){return s(null,t)},Buffer.isBuffer=function(t){return!(null==t||!t._isBuffer)},Buffer.compare=function(t,r){if(!Buffer.isBuffer(t)||!Buffer.isBuffer(r))throw new TypeError(\"Arguments must be Buffers\");if(t===r)return 0;for(var e=t.length,n=r.length,i=0,o=Math.min(e,n);i<o;++i)if(t[i]!==r[i]){e=t[i],n=r[i];break}return e<n?-1:n<e?1:0},Buffer.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},Buffer.concat=function(t,r){if(!Q(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return Buffer.alloc(0);var e;if(void 0===r)for(r=0,e=0;e<t.length;++e)r+=t[e].length;var n=Buffer.allocUnsafe(r),i=0;for(e=0;e<t.length;++e){var o=t[e];if(!Buffer.isBuffer(o))throw new TypeError('\"list\" argument must be an Array of Buffers');o.copy(n,i),i+=o.length}return n},Buffer.byteLength=v,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function(){var t=this.length;if(t%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var r=0;r<t;r+=2)b(this,r,r+1);return this},Buffer.prototype.swap32=function(){var t=this.length;if(t%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var r=0;r<t;r+=4)b(this,r,r+3),b(this,r+1,r+2);return this},Buffer.prototype.swap64=function(){var t=this.length;if(t%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var r=0;r<t;r+=8)b(this,r,r+7),b(this,r+1,r+6),b(this,r+2,r+5),b(this,r+3,r+4);return this},Buffer.prototype.toString=function(){var t=0|this.length;return 0===t?\"\":0===arguments.length?k(this,0,t):g.apply(this,arguments)},Buffer.prototype.equals=function(t){if(!Buffer.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t||0===Buffer.compare(this,t)},Buffer.prototype.inspect=function(){var t=\"\",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString(\"hex\",0,r).match(/.{2}/g).join(\" \"),this.length>r&&(t+=\" ... \")),\"<Buffer \"+t+\">\"},Buffer.prototype.compare=function(t,r,e,n,i){if(!Buffer.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),r<0||e>t.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&r>=e)return 0;if(n>=i)return-1;if(r>=e)return 1;if(r>>>=0,e>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var o=i-n,f=e-r,u=Math.min(o,f),a=this.slice(n,i),s=t.slice(r,e),c=0;c<u;++c)if(a[c]!==s[c]){o=a[c],f=s[c];break}return o<f?-1:f<o?1:0},Buffer.prototype.includes=function(t,r,e){return this.indexOf(t,r,e)!==-1},Buffer.prototype.indexOf=function(t,r,e){return w(this,t,r,e,!0)},Buffer.prototype.lastIndexOf=function(t,r,e){return w(this,t,r,e,!1)},Buffer.prototype.write=function(t,r,e,n){if(void 0===r)n=\"utf8\",e=this.length,r=0;else if(void 0===e&&\"string\"==typeof r)n=r,e=this.length,r=0;else{if(!isFinite(r))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");r=0|r,isFinite(e)?(e=0|e,void 0===n&&(n=\"utf8\")):(n=e,e=void 0)}var i=this.length-r;if((void 0===e||e>i)&&(e=i),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var o=!1;;)switch(n){case\"hex\":return A(this,t,r,e);case\"utf8\":case\"utf-8\":return m(this,t,r,e);case\"ascii\":return x(this,t,r,e);case\"latin1\":case\"binary\":return B(this,t,r,e);case\"base64\":return U(this,t,r,e);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return P(this,t,r,e);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var $=4096;Buffer.prototype.slice=function(t,r){var e=this.length;t=~~t,r=void 0===r?e:~~r,t<0?(t+=e,t<0&&(t=0)):t>e&&(t=e),r<0?(r+=e,r<0&&(r=0)):r>e&&(r=e),r<t&&(r=t);var n;if(Buffer.TYPED_ARRAY_SUPPORT)n=this.subarray(t,r),n.__proto__=Buffer.prototype;else{var i=r-t;n=new Buffer(i,void 0);for(var o=0;o<i;++o)n[o]=this[o+t]}return n},Buffer.prototype.readUIntLE=function(t,r,e){t=0|t,r=0|r,e||C(t,r,this.length);for(var n=this[t],i=1,o=0;++o<r&&(i*=256);)n+=this[t+o]*i;return n},Buffer.prototype.readUIntBE=function(t,r,e){t=0|t,r=0|r,e||C(t,r,this.length);for(var n=this[t+--r],i=1;r>0&&(i*=256);)n+=this[t+--r]*i;return n},Buffer.prototype.readUInt8=function(t,r){return r||C(t,1,this.length),this[t]},Buffer.prototype.readUInt16LE=function(t,r){return r||C(t,2,this.length),this[t]|this[t+1]<<8},Buffer.prototype.readUInt16BE=function(t,r){return r||C(t,2,this.length),this[t]<<8|this[t+1]},Buffer.prototype.readUInt32LE=function(t,r){return r||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},Buffer.prototype.readUInt32BE=function(t,r){return r||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},Buffer.prototype.readIntLE=function(t,r,e){t=0|t,r=0|r,e||C(t,r,this.length);for(var n=this[t],i=1,o=0;++o<r&&(i*=256);)n+=this[t+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*r)),n},Buffer.prototype.readIntBE=function(t,r,e){t=0|t,r=0|r,e||C(t,r,this.length);for(var n=r,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*r)),o},Buffer.prototype.readInt8=function(t,r){return r||C(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},Buffer.prototype.readInt16LE=function(t,r){r||C(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},Buffer.prototype.readInt16BE=function(t,r){r||C(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},Buffer.prototype.readInt32LE=function(t,r){return r||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},Buffer.prototype.readInt32BE=function(t,r){return r||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},Buffer.prototype.readFloatLE=function(t,r){return r||C(t,4,this.length),K.read(this,t,!0,23,4)},Buffer.prototype.readFloatBE=function(t,r){return r||C(t,4,this.length),K.read(this,t,!1,23,4)},Buffer.prototype.readDoubleLE=function(t,r){return r||C(t,8,this.length),K.read(this,t,!0,52,8)},Buffer.prototype.readDoubleBE=function(t,r){return r||C(t,8,this.length),K.read(this,t,!1,52,8)},Buffer.prototype.writeUIntLE=function(t,r,e,n){if(t=+t,r=0|r,e=0|e,!n){var i=Math.pow(2,8*e)-1;D(this,t,r,e,i,0)}var o=1,f=0;for(this[r]=255&t;++f<e&&(o*=256);)this[r+f]=t/o&255;return r+e},Buffer.prototype.writeUIntBE=function(t,r,e,n){if(t=+t,r=0|r,e=0|e,!n){var i=Math.pow(2,8*e)-1;D(this,t,r,e,i,0)}var o=e-1,f=1;for(this[r+o]=255&t;--o>=0&&(f*=256);)this[r+o]=t/f&255;return r+e},Buffer.prototype.writeUInt8=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},Buffer.prototype.writeUInt16LE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):O(this,t,r,!0),r+2},Buffer.prototype.writeUInt16BE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):O(this,t,r,!1),r+2},Buffer.prototype.writeUInt32LE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):L(this,t,r,!0),r+4},Buffer.prototype.writeUInt32BE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):L(this,t,r,!1),r+4},Buffer.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r=0|r,!n){var i=Math.pow(2,8*e-1);D(this,t,r,e,i-1,-i)}var o=0,f=1,u=0;for(this[r]=255&t;++o<e&&(f*=256);)t<0&&0===u&&0!==this[r+o-1]&&(u=1),this[r+o]=(t/f>>0)-u&255;return r+e},Buffer.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r=0|r,!n){var i=Math.pow(2,8*e-1);D(this,t,r,e,i-1,-i)}var o=e-1,f=1,u=0;for(this[r+o]=255&t;--o>=0&&(f*=256);)t<0&&0===u&&0!==this[r+o+1]&&(u=1),this[r+o]=(t/f>>0)-u&255;return r+e},Buffer.prototype.writeInt8=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},Buffer.prototype.writeInt16LE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):O(this,t,r,!0),r+2},Buffer.prototype.writeInt16BE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):O(this,t,r,!1),r+2},Buffer.prototype.writeInt32LE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):L(this,t,r,!0),r+4},Buffer.prototype.writeInt32BE=function(t,r,e){return t=+t,r=0|r,e||D(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),Buffer.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):L(this,t,r,!1),r+4},Buffer.prototype.writeFloatLE=function(t,r,e){return N(this,t,r,!0,e)},Buffer.prototype.writeFloatBE=function(t,r,e){return N(this,t,r,!1,e)},Buffer.prototype.writeDoubleLE=function(t,r,e){return F(this,t,r,!0,e)},Buffer.prototype.writeDoubleBE=function(t,r,e){return F(this,t,r,!1,e)},Buffer.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n<e&&(n=e),n===e)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError(\"targetStart out of bounds\");if(e<0||e>=this.length)throw new RangeError(\"sourceStart out of bounds\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),t.length-r<n-e&&(n=t.length-r+e);var i,o=n-e;if(this===t&&e<r&&r<n)for(i=o-1;i>=0;--i)t[i+r]=this[i+e];else if(o<1e3||!Buffer.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)t[i+r]=this[i+e];else Uint8Array.prototype.set.call(t,this.subarray(e,e+o),r);return o},Buffer.prototype.fill=function(t,r,e,n){if(\"string\"==typeof t){if(\"string\"==typeof r?(n=r,r=0,e=this.length):\"string\"==typeof e&&(n=e,e=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!Buffer.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n)}else\"number\"==typeof t&&(t=255&t);if(r<0||this.length<r||this.length<e)throw new RangeError(\"Out of range index\");if(e<=r)return this;r>>>=0,e=void 0===e?this.length:e>>>0,t||(t=0);var o;if(\"number\"==typeof t)for(o=r;o<e;++o)this[o]=t;else{var f=Buffer.isBuffer(t)?t:q(new Buffer(t,n).toString()),u=f.length;for(o=0;o<e-r;++o)this[o+r]=f[o%u]}return this};var tt=/[^+\\/0-9A-Za-z-_]/g}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"base64-js\":30,ieee754:32,isarray:34}],30:[function(t,r,e){\"use strict\";function n(t){var r=t.length;if(r%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");return\"=\"===t[r-2]?2:\"=\"===t[r-1]?1:0}function i(t){return 3*t.length/4-n(t)}function o(t){var r,e,i,o,f,u,a=t.length;f=n(t),u=new h(3*a/4-f),i=f>0?a-4:a;var s=0;for(r=0,e=0;r<i;r+=4,e+=3)o=c[t.charCodeAt(r)]<<18|c[t.charCodeAt(r+1)]<<12|c[t.charCodeAt(r+2)]<<6|c[t.charCodeAt(r+3)],u[s++]=o>>16&255,u[s++]=o>>8&255,u[s++]=255&o;return 2===f?(o=c[t.charCodeAt(r)]<<2|c[t.charCodeAt(r+1)]>>4,u[s++]=255&o):1===f&&(o=c[t.charCodeAt(r)]<<10|c[t.charCodeAt(r+1)]<<4|c[t.charCodeAt(r+2)]>>2,u[s++]=o>>8&255,u[s++]=255&o),u}function f(t){return s[t>>18&63]+s[t>>12&63]+s[t>>6&63]+s[63&t]}function u(t,r,e){for(var n,i=[],o=r;o<e;o+=3)n=(t[o]<<16)+(t[o+1]<<8)+t[o+2],i.push(f(n));return i.join(\"\")}function a(t){for(var r,e=t.length,n=e%3,i=\"\",o=[],f=16383,a=0,c=e-n;a<c;a+=f)o.push(u(t,a,a+f>c?c:a+f));return 1===n?(r=t[e-1],i+=s[r>>2],i+=s[r<<4&63],i+=\"==\"):2===n&&(r=(t[e-2]<<8)+t[e-1],i+=s[r>>10],i+=s[r>>4&63],i+=s[r<<2&63],i+=\"=\"),o.push(i),o.join(\"\")}e.byteLength=i,e.toByteArray=o,e.fromByteArray=a;for(var s=[],c=[],h=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,l=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",p=0,d=l.length;p<d;++p)s[p]=l[p],c[l.charCodeAt(p)]=p;c[\"-\".charCodeAt(0)]=62,c[\"_\".charCodeAt(0)]=63},{}],31:[function(t,r,e){function n(){if(!(this instanceof n))return new n}!function(t){function e(t){for(var r in s)t[r]=s[r];return t}function n(t,r){return u(this,t).push(r),this}function i(t,r){function e(){o.call(n,t,e),r.apply(this,arguments)}var n=this;return e.originalListener=r,u(n,t).push(e),n}function o(t,r){function e(t){return t!==r&&t.originalListener!==r}var n,i=this;if(arguments.length){if(r){if(n=u(i,t,!0)){if(n=n.filter(e),!n.length)return o.call(i,t);i[a][t]=n}}else if(n=i[a],n&&(delete n[t],!Object.keys(n).length))return o.call(i)}else delete i[a];return i}function f(t,r){function e(t){t.call(o)}function n(t){t.call(o,r)}function i(t){t.apply(o,s)}var o=this,f=u(o,t,!0);if(!f)return!1;var a=arguments.length;if(1===a)f.forEach(e);else if(2===a)f.forEach(n);else{var s=Array.prototype.slice.call(arguments,1);f.forEach(i)}return!!f.length}function u(t,r,e){if(!e||t[a]){var n=t[a]||(t[a]={});return n[r]||(n[r]=[])}}\"undefined\"!=typeof r&&(r.exports=t);var a=\"listeners\",s={on:n,once:i,off:o,emit:f};e(t.prototype),t.mixin=e}(n)},{}],32:[function(t,r,e){e.read=function(t,r,e,n,i){var o,f,u=8*i-n-1,a=(1<<u)-1,s=a>>1,c=-7,h=e?i-1:0,l=e?-1:1,p=t[r+h];for(h+=l,o=p&(1<<-c)-1,p>>=-c,c+=u;c>0;o=256*o+t[r+h],h+=l,c-=8);for(f=o&(1<<-c)-1,o>>=-c,c+=n;c>0;f=256*f+t[r+h],h+=l,c-=8);if(0===o)o=1-s;else{if(o===a)return f?NaN:(p?-1:1)*(1/0);f+=Math.pow(2,n),o-=s}return(p?-1:1)*f*Math.pow(2,o-n)},e.write=function(t,r,e,n,i,o){var f,u,a,s=8*o-i-1,c=(1<<s)-1,h=c>>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,y=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(u=isNaN(r)?1:0,f=c):(f=Math.floor(Math.log(r)/Math.LN2),r*(a=Math.pow(2,-f))<1&&(f--,a*=2),r+=f+h>=1?l/a:l*Math.pow(2,1-h),r*a>=2&&(f++,a/=2),f+h>=c?(u=0,f=c):f+h>=1?(u=(r*a-1)*Math.pow(2,i),f+=h):(u=r*Math.pow(2,h-1)*Math.pow(2,i),f=0));i>=8;t[e+p]=255&u,p+=d,u/=256,i-=8);for(f=f<<i|u,s+=i;s>0;t[e+p]=255&f,p+=d,f/=256,s-=8);t[e+p-d]|=128*y}},{}],33:[function(t,r,e){(function(Buffer){var t,r,n,i;!function(e){function o(t,r,n){function i(t,r,e,n){return this instanceof i?v(this,t,r,e,n):new i(t,r,e,n)}function o(t){return!(!t||!t[F])}function v(t,r,e,n,i){if(E&&A&&(r instanceof A&&(r=new E(r)),n instanceof A&&(n=new E(n))),!(r||e||n||g))return void(t.buffer=h(m,0));if(!s(r,e)){var o=g||Array;i=e,n=r,e=0,r=new o(8)}t.buffer=r,t.offset=e|=0,b!==typeof n&&(\"string\"==typeof n?x(r,e,n,i||10):s(n,i)?c(r,e,n,i):\"number\"==typeof i?(k(r,e+T,n),k(r,e+S,i)):n>0?O(r,e,n):n<0?L(r,e,n):c(r,e,m,0))}function x(t,r,e,n){var i=0,o=e.length,f=0,u=0;\"-\"===e[0]&&i++;for(var a=i;i<o;){var s=parseInt(e[i++],n);if(!(s>=0))break;u=u*n+s,f=f*n+Math.floor(u/B),u%=B}a&&(f=~f,u?u=B-u:f++),k(t,r+T,f),k(t,r+S,u)}function P(){var t=this.buffer,r=this.offset,e=_(t,r+T),i=_(t,r+S);return n||(e|=0),e?e*B+i:i}function R(t){var r=this.buffer,e=this.offset,i=_(r,e+T),o=_(r,e+S),f=\"\",u=!n&&2147483648&i;for(u&&(i=~i,o=B-o),t=t||10;;){var a=i%t*B+o;if(i=Math.floor(i/t),o=Math.floor(a/t),f=(a%t).toString(t)+f,!i&&!o)break}return u&&(f=\"-\"+f),f}function k(t,r,e){t[r+D]=255&e,e>>=8,t[r+C]=255&e,e>>=8,t[r+Y]=255&e,e>>=8,t[r+I]=255&e}function _(t,r){return t[r+I]*U+(t[r+Y]<<16)+(t[r+C]<<8)+t[r+D]}var T=r?0:4,S=r?4:0,I=r?0:3,Y=r?1:2,C=r?2:1,D=r?3:0,O=r?l:d,L=r?p:y,M=i.prototype,N=\"is\"+t,F=\"_\"+N;return M.buffer=void 0,M.offset=0,M[F]=!0,M.toNumber=P,M.toString=R,M.toJSON=P,M.toArray=f,w&&(M.toBuffer=u),E&&(M.toArrayBuffer=a),i[N]=o,e[t]=i,i}function f(t){var r=this.buffer,e=this.offset;return g=null,t!==!1&&0===e&&8===r.length&&x(r)?r:h(r,e)}function u(t){var r=this.buffer,e=this.offset;if(g=w,t!==!1&&0===e&&8===r.length&&Buffer.isBuffer(r))return r;var n=new w(8);return c(n,0,r,e),n}function a(t){var r=this.buffer,e=this.offset,n=r.buffer;if(g=E,t!==!1&&0===e&&n instanceof A&&8===n.byteLength)return n;var i=new E(8);return c(i,0,r,e),i.buffer}function s(t,r){var e=t&&t.length;return r|=0,e&&r+8<=e&&\"string\"!=typeof t[r]}function c(t,r,e,n){r|=0,n|=0;for(var i=0;i<8;i++)t[r++]=255&e[n++]}function h(t,r){return Array.prototype.slice.call(t,r,r+8)}function l(t,r,e){for(var n=r+8;n>r;)t[--n]=255&e,e/=256}function p(t,r,e){var n=r+8;for(e++;n>r;)t[--n]=255&-e^255,e/=256}function d(t,r,e){for(var n=r+8;r<n;)t[r++]=255&e,e/=256}function y(t,r,e){var n=r+8;for(e++;r<n;)t[r++]=255&-e^255,e/=256}function v(t){return!!t&&\"[object Array]\"==Object.prototype.toString.call(t)}var g,b=\"undefined\",w=b!==typeof Buffer&&Buffer,E=b!==typeof Uint8Array&&Uint8Array,A=b!==typeof ArrayBuffer&&ArrayBuffer,m=[0,0,0,0,0,0,0,0],x=Array.isArray||v,B=4294967296,U=16777216;t=o(\"Uint64BE\",!0,!0),r=o(\"Int64BE\",!0,!1),n=o(\"Uint64LE\",!1,!0),i=o(\"Int64LE\",!1,!1)}(\"object\"==typeof e&&\"string\"!=typeof e.nodeName?e:this||{})}).call(this,t(\"buffer\").Buffer)},{buffer:29}],34:[function(t,r,e){var n={}.toString;r.exports=Array.isArray||function(t){return\"[object Array]\"==n.call(t)}},{}]},{},[1])(1)});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5).Buffer, __webpack_require__(3)))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L21zZ3BhY2stbGl0ZS9kaXN0L21zZ3BhY2subWluLmpzPzM5Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXt2YXIgcjtyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxyLm1zZ3BhY2s9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChyLGUsbil7ZnVuY3Rpb24gaShmLHUpe2lmKCFlW2ZdKXtpZighcltmXSl7dmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShmLCEwKTtpZihvKXJldHVybiBvKGYsITApO3ZhciBzPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrZitcIidcIik7dGhyb3cgcy5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLHN9dmFyIGM9ZVtmXT17ZXhwb3J0czp7fX07cltmXVswXS5jYWxsKGMuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIgZT1yW2ZdWzFdW3RdO3JldHVybiBpKGU/ZTp0KX0sYyxjLmV4cG9ydHMsdCxyLGUsbil9cmV0dXJuIGVbZl0uZXhwb3J0c31mb3IodmFyIG89XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxmPTA7ZjxuLmxlbmd0aDtmKyspaShuW2ZdKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQscixlKXtlLmVuY29kZT10KFwiLi9lbmNvZGVcIikuZW5jb2RlLGUuZGVjb2RlPXQoXCIuL2RlY29kZVwiKS5kZWNvZGUsZS5FbmNvZGVyPXQoXCIuL2VuY29kZXJcIikuRW5jb2RlcixlLkRlY29kZXI9dChcIi4vZGVjb2RlclwiKS5EZWNvZGVyLGUuY3JlYXRlQ29kZWM9dChcIi4vZXh0XCIpLmNyZWF0ZUNvZGVjLGUuY29kZWM9dChcIi4vY29kZWNcIikuY29kZWN9LHtcIi4vY29kZWNcIjoxMCxcIi4vZGVjb2RlXCI6MTIsXCIuL2RlY29kZXJcIjoxMyxcIi4vZW5jb2RlXCI6MTUsXCIuL2VuY29kZXJcIjoxNixcIi4vZXh0XCI6MjB9XSwyOltmdW5jdGlvbih0LHIsZSl7KGZ1bmN0aW9uKEJ1ZmZlcil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gdCYmdC5pc0J1ZmZlciYmdH1yLmV4cG9ydHM9dChcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyJiZCdWZmZXIpfHx0KHRoaXMuQnVmZmVyKXx8dChcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuQnVmZmVyKXx8dGhpcy5CdWZmZXJ9KS5jYWxsKHRoaXMsdChcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjI5fV0sMzpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCxyKXtmb3IodmFyIGU9dGhpcyxuPXJ8fChyfD0wKSxpPXQubGVuZ3RoLG89MCxmPTA7ZjxpOylvPXQuY2hhckNvZGVBdChmKyspLG88MTI4P2VbbisrXT1vOm88MjA0OD8oZVtuKytdPTE5MnxvPj4+NixlW24rK109MTI4fDYzJm8pOm88NTUyOTZ8fG8+NTczNDM/KGVbbisrXT0yMjR8bz4+PjEyLGVbbisrXT0xMjh8bz4+PjYmNjMsZVtuKytdPTEyOHw2MyZvKToobz0oby01NTI5Njw8MTB8dC5jaGFyQ29kZUF0KGYrKyktNTYzMjApKzY1NTM2LGVbbisrXT0yNDB8bz4+PjE4LGVbbisrXT0xMjh8bz4+PjEyJjYzLGVbbisrXT0xMjh8bz4+PjYmNjMsZVtuKytdPTEyOHw2MyZvKTtyZXR1cm4gbi1yfWZ1bmN0aW9uIGkodCxyLGUpe3ZhciBuPXRoaXMsaT0wfHI7ZXx8KGU9bi5sZW5ndGgpO2Zvcih2YXIgbz1cIlwiLGY9MDtpPGU7KWY9bltpKytdLGY8MTI4P28rPVN0cmluZy5mcm9tQ2hhckNvZGUoZik6KDE5Mj09PSgyMjQmZik/Zj0oMzEmZik8PDZ8NjMmbltpKytdOjIyND09PSgyNDAmZik/Zj0oMTUmZik8PDEyfCg2MyZuW2krK10pPDw2fDYzJm5baSsrXToyNDA9PT0oMjQ4JmYpJiYoZj0oNyZmKTw8MTh8KDYzJm5baSsrXSk8PDEyfCg2MyZuW2krK10pPDw2fDYzJm5baSsrXSksZj49NjU1MzY/KGYtPTY1NTM2LG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKGY+Pj4xMCkrNTUyOTYsKDEwMjMmZikrNTYzMjApKTpvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGYpKTtyZXR1cm4gb31mdW5jdGlvbiBvKHQscixlLG4pe3ZhciBpO2V8fChlPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCkscnx8KHI9MCk7dmFyIG89bi1lO2lmKHQ9PT10aGlzJiZlPHImJnI8bilmb3IoaT1vLTE7aT49MDtpLS0pdFtpK3JdPXRoaXNbaStlXTtlbHNlIGZvcihpPTA7aTxvO2krKyl0W2krcl09dGhpc1tpK2VdO3JldHVybiBvfWUuY29weT1vLGUudG9TdHJpbmc9aSxlLndyaXRlPW59LHt9XSw0OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IEFycmF5KHQpfWZ1bmN0aW9uIGkodCl7aWYoIW8uaXNCdWZmZXIodCkmJm8uaXNWaWV3KHQpKXQ9by5VaW50OEFycmF5LmZyb20odCk7ZWxzZSBpZihvLmlzQXJyYXlCdWZmZXIodCkpdD1uZXcgVWludDhBcnJheSh0KTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiBvLmZyb20uY2FsbChlLHQpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpfXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KX12YXIgbz10KFwiLi9idWZmZXJpc2hcIiksZT1yLmV4cG9ydHM9bigwKTtlLmFsbG9jPW4sZS5jb25jYXQ9by5jb25jYXQsZS5mcm9tPWl9LHtcIi4vYnVmZmVyaXNoXCI6OH1dLDU6W2Z1bmN0aW9uKHQscixlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgQnVmZmVyKHQpfWZ1bmN0aW9uIGkodCl7aWYoIW8uaXNCdWZmZXIodCkmJm8uaXNWaWV3KHQpKXQ9by5VaW50OEFycmF5LmZyb20odCk7ZWxzZSBpZihvLmlzQXJyYXlCdWZmZXIodCkpdD1uZXcgVWludDhBcnJheSh0KTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiBvLmZyb20uY2FsbChlLHQpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpfXJldHVybiBCdWZmZXIuZnJvbSYmMSE9PUJ1ZmZlci5mcm9tLmxlbmd0aD9CdWZmZXIuZnJvbSh0KTpuZXcgQnVmZmVyKHQpfXZhciBvPXQoXCIuL2J1ZmZlcmlzaFwiKSxCdWZmZXI9by5nbG9iYWwsZT1yLmV4cG9ydHM9by5oYXNCdWZmZXI/bigwKTpbXTtlLmFsbG9jPW8uaGFzQnVmZmVyJiZCdWZmZXIuYWxsb2N8fG4sZS5jb25jYXQ9by5jb25jYXQsZS5mcm9tPWl9LHtcIi4vYnVmZmVyaXNoXCI6OH1dLDY6W2Z1bmN0aW9uKHQscixlKXtmdW5jdGlvbiBuKHQscixlLG4pe3ZhciBvPWEuaXNCdWZmZXIodGhpcyksZj1hLmlzQnVmZmVyKHQpO2lmKG8mJmYpcmV0dXJuIHRoaXMuY29weSh0LHIsZSxuKTtpZihjfHxvfHxmfHwhYS5pc1ZpZXcodGhpcyl8fCFhLmlzVmlldyh0KSlyZXR1cm4gdS5jb3B5LmNhbGwodGhpcyx0LHIsZSxuKTt2YXIgcz1lfHxudWxsIT1uP2kuY2FsbCh0aGlzLGUsbik6dGhpcztyZXR1cm4gdC5zZXQocyxyKSxzLmxlbmd0aH1mdW5jdGlvbiBpKHQscil7dmFyIGU9dGhpcy5zbGljZXx8IWMmJnRoaXMuc3ViYXJyYXk7aWYoZSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxyKTt2YXIgaT1hLmFsbG9jLmNhbGwodGhpcyxyLXQpO3JldHVybiBuLmNhbGwodGhpcyxpLDAsdCxyKSxpfWZ1bmN0aW9uIG8odCxyLGUpe3ZhciBuPSFzJiZhLmlzQnVmZmVyKHRoaXMpP3RoaXMudG9TdHJpbmc6dS50b1N0cmluZztyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZih0KXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpc1t0XXx8dVt0XTtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHJ9dmFyIHU9dChcIi4vYnVmZmVyLWxpdGVcIik7ZS5jb3B5PW4sZS5zbGljZT1pLGUudG9TdHJpbmc9byxlLndyaXRlPWYoXCJ3cml0ZVwiKTt2YXIgYT10KFwiLi9idWZmZXJpc2hcIiksQnVmZmVyPWEuZ2xvYmFsLHM9YS5oYXNCdWZmZXImJlwiVFlQRURfQVJSQVlfU1VQUE9SVFwiaW4gQnVmZmVyLGM9cyYmIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUfSx7XCIuL2J1ZmZlci1saXRlXCI6MyxcIi4vYnVmZmVyaXNoXCI6OH1dLDc6W2Z1bmN0aW9uKHQscixlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgVWludDhBcnJheSh0KX1mdW5jdGlvbiBpKHQpe2lmKG8uaXNWaWV3KHQpKXt2YXIgcj10LmJ5dGVPZmZzZXQsbj10LmJ5dGVMZW5ndGg7dD10LmJ1ZmZlcix0LmJ5dGVMZW5ndGghPT1uJiYodC5zbGljZT90PXQuc2xpY2UocixyK24pOih0PW5ldyBVaW50OEFycmF5KHQpLHQuYnl0ZUxlbmd0aCE9PW4mJih0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQscixyK24pKSkpfWVsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpcmV0dXJuIG8uZnJvbS5jYWxsKGUsdCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyl9cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpfXZhciBvPXQoXCIuL2J1ZmZlcmlzaFwiKSxlPXIuZXhwb3J0cz1vLmhhc0FycmF5QnVmZmVyP24oMCk6W107ZS5hbGxvYz1uLGUuY29uY2F0PW8uY29uY2F0LGUuZnJvbT1pfSx7XCIuL2J1ZmZlcmlzaFwiOjh9XSw4OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD91LmNhbGwodGhpcyx0KTphKHRoaXMpLmZyb20odCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gYSh0aGlzKS5hbGxvYyh0KX1mdW5jdGlvbiBvKHQscil7ZnVuY3Rpb24gbih0KXtyKz10Lmxlbmd0aH1mdW5jdGlvbiBvKHQpe2ErPXcuY29weS5jYWxsKHQsdSxhKX1yfHwocj0wLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodCxuKSk7dmFyIGY9dGhpcyE9PWUmJnRoaXN8fHRbMF0sdT1pLmNhbGwoZixyKSxhPTA7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodCxvKSx1fWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8RSh0KX1mdW5jdGlvbiB1KHQpe3ZhciByPTMqdC5sZW5ndGgsZT1pLmNhbGwodGhpcyxyKSxuPXcud3JpdGUuY2FsbChlLHQpO3JldHVybiByIT09biYmKGU9dy5zbGljZS5jYWxsKGUsMCxuKSksZX1mdW5jdGlvbiBhKHQpe3JldHVybiBkKHQpP2c6eSh0KT9iOnAodCk/djpoP2c6bD9iOnZ9ZnVuY3Rpb24gcygpe3JldHVybiExfWZ1bmN0aW9uIGModCxyKXtyZXR1cm4gdD1cIltvYmplY3QgXCIrdCtcIl1cIixmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYme30udG9TdHJpbmcuY2FsbChyP2Vbcl06ZSk9PT10fX12YXIgQnVmZmVyPWUuZ2xvYmFsPXQoXCIuL2J1ZmZlci1nbG9iYWxcIiksaD1lLmhhc0J1ZmZlcj1CdWZmZXImJiEhQnVmZmVyLmlzQnVmZmVyLGw9ZS5oYXNBcnJheUJ1ZmZlcj1cInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXIscD1lLmlzQXJyYXk9dChcImlzYXJyYXlcIik7ZS5pc0FycmF5QnVmZmVyPWw/ZjpzO3ZhciBkPWUuaXNCdWZmZXI9aD9CdWZmZXIuaXNCdWZmZXI6cyx5PWUuaXNWaWV3PWw/QXJyYXlCdWZmZXIuaXNWaWV3fHxjKFwiQXJyYXlCdWZmZXJcIixcImJ1ZmZlclwiKTpzO2UuYWxsb2M9aSxlLmNvbmNhdD1vLGUuZnJvbT1uO3ZhciB2PWUuQXJyYXk9dChcIi4vYnVmZmVyaXNoLWFycmF5XCIpLGc9ZS5CdWZmZXI9dChcIi4vYnVmZmVyaXNoLWJ1ZmZlclwiKSxiPWUuVWludDhBcnJheT10KFwiLi9idWZmZXJpc2gtdWludDhhcnJheVwiKSx3PWUucHJvdG90eXBlPXQoXCIuL2J1ZmZlcmlzaC1wcm90b1wiKSxFPWMoXCJBcnJheUJ1ZmZlclwiKX0se1wiLi9idWZmZXItZ2xvYmFsXCI6MixcIi4vYnVmZmVyaXNoLWFycmF5XCI6NCxcIi4vYnVmZmVyaXNoLWJ1ZmZlclwiOjUsXCIuL2J1ZmZlcmlzaC1wcm90b1wiOjYsXCIuL2J1ZmZlcmlzaC11aW50OGFycmF5XCI6Nyxpc2FycmF5OjM0fV0sOTpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh0aGlzLm9wdGlvbnM9dCx2b2lkIHRoaXMuaW5pdCgpKTpuZXcgbih0KX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgciBpbiB0KW4ucHJvdG90eXBlW3JdPW8obi5wcm90b3R5cGVbcl0sdFtyXSl9ZnVuY3Rpb24gbyh0LHIpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJnI/ZTp0fHxyfWZ1bmN0aW9uIGYodCl7ZnVuY3Rpb24gcih0LHIpe3JldHVybiByKHQpfXJldHVybiB0PXQuc2xpY2UoKSxmdW5jdGlvbihlKXtyZXR1cm4gdC5yZWR1Y2UocixlKX19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gcyh0KT9mKHQpOnR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIHM9dChcImlzYXJyYXlcIik7ZS5jcmVhdGVDb2RlYz1hLGUuaW5zdGFsbD1pLGUuZmlsdGVyPXU7dmFyIGM9dChcIi4vYnVmZmVyaXNoXCIpO24ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHQmJnQudWludDhhcnJheSYmKHRoaXMuYnVmZmVyaXNoPWMuVWludDhBcnJheSksdGhpc30sZS5wcmVzZXQ9YSh7cHJlc2V0OiEwfSl9LHtcIi4vYnVmZmVyaXNoXCI6OCxpc2FycmF5OjM0fV0sMTA6W2Z1bmN0aW9uKHQscixlKXt0KFwiLi9yZWFkLWNvcmVcIiksdChcIi4vd3JpdGUtY29yZVwiKSxlLmNvZGVjPXtwcmVzZXQ6dChcIi4vY29kZWMtYmFzZVwiKS5wcmVzZXR9fSx7XCIuL2NvZGVjLWJhc2VcIjo5LFwiLi9yZWFkLWNvcmVcIjoyMixcIi4vd3JpdGUtY29yZVwiOjI1fV0sMTE6W2Z1bmN0aW9uKHQscixlKXtmdW5jdGlvbiBuKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTtpZih0JiYodGhpcy5vcHRpb25zPXQsdC5jb2RlYykpe3ZhciByPXRoaXMuY29kZWM9dC5jb2RlYztyLmJ1ZmZlcmlzaCYmKHRoaXMuYnVmZmVyaXNoPXIuYnVmZmVyaXNoKX19ZS5EZWNvZGVCdWZmZXI9bjt2YXIgaT10KFwiLi9yZWFkLWNvcmVcIikucHJlc2V0LG89dChcIi4vZmxleC1idWZmZXJcIikuRmxleERlY29kZXI7by5taXhpbihuLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29kZWM9aSxuLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvZGVjLmRlY29kZSh0aGlzKX19LHtcIi4vZmxleC1idWZmZXJcIjoyMSxcIi4vcmVhZC1jb3JlXCI6MjJ9XSwxMjpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCxyKXt2YXIgZT1uZXcgaShyKTtyZXR1cm4gZS53cml0ZSh0KSxlLnJlYWQoKX1lLmRlY29kZT1uO3ZhciBpPXQoXCIuL2RlY29kZS1idWZmZXJcIikuRGVjb2RlQnVmZmVyfSx7XCIuL2RlY29kZS1idWZmZXJcIjoxMX1dLDEzOltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/dm9pZCBvLmNhbGwodGhpcyx0KTpuZXcgbih0KX1lLkRlY29kZXI9bjt2YXIgaT10KFwiZXZlbnQtbGl0ZVwiKSxvPXQoXCIuL2RlY29kZS1idWZmZXJcIikuRGVjb2RlQnVmZmVyO24ucHJvdG90eXBlPW5ldyBvLGkubWl4aW4obi5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0KXthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLndyaXRlKHQpLHRoaXMuZmx1c2goKX0sbi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt0aGlzLmVtaXQoXCJkYXRhXCIsdCl9LG4ucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0KXt0aGlzLmRlY29kZSh0KSx0aGlzLmVtaXQoXCJlbmRcIil9fSx7XCIuL2RlY29kZS1idWZmZXJcIjoxMSxcImV2ZW50LWxpdGVcIjozMX1dLDE0OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7aWYodCYmKHRoaXMub3B0aW9ucz10LHQuY29kZWMpKXt2YXIgcj10aGlzLmNvZGVjPXQuY29kZWM7ci5idWZmZXJpc2gmJih0aGlzLmJ1ZmZlcmlzaD1yLmJ1ZmZlcmlzaCl9fWUuRW5jb2RlQnVmZmVyPW47dmFyIGk9dChcIi4vd3JpdGUtY29yZVwiKS5wcmVzZXQsbz10KFwiLi9mbGV4LWJ1ZmZlclwiKS5GbGV4RW5jb2RlcjtvLm1peGluKG4ucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb2RlYz1pLG4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe3RoaXMuY29kZWMuZW5jb2RlKHRoaXMsdCl9fSx7XCIuL2ZsZXgtYnVmZmVyXCI6MjEsXCIuL3dyaXRlLWNvcmVcIjoyNX1dLDE1OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0LHIpe3ZhciBlPW5ldyBpKHIpO3JldHVybiBlLndyaXRlKHQpLGUucmVhZCgpfWUuZW5jb2RlPW47dmFyIGk9dChcIi4vZW5jb2RlLWJ1ZmZlclwiKS5FbmNvZGVCdWZmZXJ9LHtcIi4vZW5jb2RlLWJ1ZmZlclwiOjE0fV0sMTY6W2Z1bmN0aW9uKHQscixlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj92b2lkIG8uY2FsbCh0aGlzLHQpOm5ldyBuKHQpfWUuRW5jb2Rlcj1uO3ZhciBpPXQoXCJldmVudC1saXRlXCIpLG89dChcIi4vZW5jb2RlLWJ1ZmZlclwiKS5FbmNvZGVCdWZmZXI7bi5wcm90b3R5cGU9bmV3IG8saS5taXhpbihuLnByb3RvdHlwZSksbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQpe3RoaXMud3JpdGUodCksdGhpcy5lbWl0KFwiZGF0YVwiLHRoaXMucmVhZCgpKX0sbi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe2FyZ3VtZW50cy5sZW5ndGgmJnRoaXMuZW5jb2RlKHQpLHRoaXMuZmx1c2goKSx0aGlzLmVtaXQoXCJlbmRcIil9fSx7XCIuL2VuY29kZS1idWZmZXJcIjoxNCxcImV2ZW50LWxpdGVcIjozMX1dLDE3OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0LHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odGhpcy5idWZmZXI9aS5mcm9tKHQpLHZvaWQodGhpcy50eXBlPXIpKTpuZXcgbih0LHIpfWUuRXh0QnVmZmVyPW47dmFyIGk9dChcIi4vYnVmZmVyaXNoXCIpfSx7XCIuL2J1ZmZlcmlzaFwiOjh9XSwxODpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCl7dC5hZGRFeHRQYWNrZXIoMTQsRXJyb3IsW3UsaV0pLHQuYWRkRXh0UGFja2VyKDEsRXZhbEVycm9yLFt1LGldKSx0LmFkZEV4dFBhY2tlcigyLFJhbmdlRXJyb3IsW3UsaV0pLHQuYWRkRXh0UGFja2VyKDMsUmVmZXJlbmNlRXJyb3IsW3UsaV0pLHQuYWRkRXh0UGFja2VyKDQsU3ludGF4RXJyb3IsW3UsaV0pLHQuYWRkRXh0UGFja2VyKDUsVHlwZUVycm9yLFt1LGldKSx0LmFkZEV4dFBhY2tlcig2LFVSSUVycm9yLFt1LGldKSx0LmFkZEV4dFBhY2tlcigxMCxSZWdFeHAsW2YsaV0pLHQuYWRkRXh0UGFja2VyKDExLEJvb2xlYW4sW28saV0pLHQuYWRkRXh0UGFja2VyKDEyLFN0cmluZyxbbyxpXSksdC5hZGRFeHRQYWNrZXIoMTMsRGF0ZSxbTnVtYmVyLGldKSx0LmFkZEV4dFBhY2tlcigxNSxOdW1iZXIsW28saV0pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5JiYodC5hZGRFeHRQYWNrZXIoMTcsSW50OEFycmF5LGMpLHQuYWRkRXh0UGFja2VyKDE4LFVpbnQ4QXJyYXksYyksdC5hZGRFeHRQYWNrZXIoMTksSW50MTZBcnJheSxjKSx0LmFkZEV4dFBhY2tlcigyMCxVaW50MTZBcnJheSxjKSx0LmFkZEV4dFBhY2tlcigyMSxJbnQzMkFycmF5LGMpLHQuYWRkRXh0UGFja2VyKDIyLFVpbnQzMkFycmF5LGMpLHQuYWRkRXh0UGFja2VyKDIzLEZsb2F0MzJBcnJheSxjKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5JiZ0LmFkZEV4dFBhY2tlcigyNCxGbG9hdDY0QXJyYXksYyksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZ0LmFkZEV4dFBhY2tlcigyNSxVaW50OENsYW1wZWRBcnJheSxjKSx0LmFkZEV4dFBhY2tlcigyNixBcnJheUJ1ZmZlcixjKSx0LmFkZEV4dFBhY2tlcigyOSxEYXRhVmlldyxjKSkscy5oYXNCdWZmZXImJnQuYWRkRXh0UGFja2VyKDI3LEJ1ZmZlcixzLmZyb20pfWZ1bmN0aW9uIGkocil7cmV0dXJuIGF8fChhPXQoXCIuL2VuY29kZVwiKS5lbmNvZGUpLGEocil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC52YWx1ZU9mKCl9ZnVuY3Rpb24gZih0KXt0PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zcGxpdChcIi9cIiksdC5zaGlmdCgpO3ZhciByPVt0LnBvcCgpXTtyZXR1cm4gci51bnNoaWZ0KHQuam9pbihcIi9cIikpLHJ9ZnVuY3Rpb24gdSh0KXt2YXIgcj17fTtmb3IodmFyIGUgaW4gaClyW2VdPXRbZV07cmV0dXJuIHJ9ZS5zZXRFeHRQYWNrZXJzPW47dmFyIGEscz10KFwiLi9idWZmZXJpc2hcIiksQnVmZmVyPXMuZ2xvYmFsLGM9cy5VaW50OEFycmF5LmZyb20saD17bmFtZToxLG1lc3NhZ2U6MSxzdGFjazoxLGNvbHVtbk51bWJlcjoxLGZpbGVOYW1lOjEsbGluZU51bWJlcjoxfX0se1wiLi9idWZmZXJpc2hcIjo4LFwiLi9lbmNvZGVcIjoxNX1dLDE5OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXt0LmFkZEV4dFVucGFja2VyKDE0LFtpLGYoRXJyb3IpXSksdC5hZGRFeHRVbnBhY2tlcigxLFtpLGYoRXZhbEVycm9yKV0pLHQuYWRkRXh0VW5wYWNrZXIoMixbaSxmKFJhbmdlRXJyb3IpXSksdC5hZGRFeHRVbnBhY2tlcigzLFtpLGYoUmVmZXJlbmNlRXJyb3IpXSksdC5hZGRFeHRVbnBhY2tlcig0LFtpLGYoU3ludGF4RXJyb3IpXSksdC5hZGRFeHRVbnBhY2tlcig1LFtpLGYoVHlwZUVycm9yKV0pLHQuYWRkRXh0VW5wYWNrZXIoNixbaSxmKFVSSUVycm9yKV0pLHQuYWRkRXh0VW5wYWNrZXIoMTAsW2ksb10pLHQuYWRkRXh0VW5wYWNrZXIoMTEsW2ksdShCb29sZWFuKV0pLHQuYWRkRXh0VW5wYWNrZXIoMTIsW2ksdShTdHJpbmcpXSksdC5hZGRFeHRVbnBhY2tlcigxMyxbaSx1KERhdGUpXSksdC5hZGRFeHRVbnBhY2tlcigxNSxbaSx1KE51bWJlcildKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheSYmKHQuYWRkRXh0VW5wYWNrZXIoMTcsdShJbnQ4QXJyYXkpKSx0LmFkZEV4dFVucGFja2VyKDE4LHUoVWludDhBcnJheSkpLHQuYWRkRXh0VW5wYWNrZXIoMTksW2EsdShJbnQxNkFycmF5KV0pLHQuYWRkRXh0VW5wYWNrZXIoMjAsW2EsdShVaW50MTZBcnJheSldKSx0LmFkZEV4dFVucGFja2VyKDIxLFthLHUoSW50MzJBcnJheSldKSx0LmFkZEV4dFVucGFja2VyKDIyLFthLHUoVWludDMyQXJyYXkpXSksdC5hZGRFeHRVbnBhY2tlcigyMyxbYSx1KEZsb2F0MzJBcnJheSldKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQ2NEFycmF5JiZ0LmFkZEV4dFVucGFja2VyKDI0LFthLHUoRmxvYXQ2NEFycmF5KV0pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSYmdC5hZGRFeHRVbnBhY2tlcigyNSx1KFVpbnQ4Q2xhbXBlZEFycmF5KSksdC5hZGRFeHRVbnBhY2tlcigyNixhKSx0LmFkZEV4dFVucGFja2VyKDI5LFthLHUoRGF0YVZpZXcpXSkpLGMuaGFzQnVmZmVyJiZ0LmFkZEV4dFVucGFja2VyKDI3LHUoQnVmZmVyKSl9ZnVuY3Rpb24gaShyKXtyZXR1cm4gc3x8KHM9dChcIi4vZGVjb2RlXCIpLmRlY29kZSkscyhyKX1mdW5jdGlvbiBvKHQpe3JldHVybiBSZWdFeHAuYXBwbHkobnVsbCx0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgZT1uZXcgdDtmb3IodmFyIG4gaW4gaCllW25dPXJbbl07cmV0dXJuIGV9fWZ1bmN0aW9uIHUodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgdChyKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCkuYnVmZmVyfWUuc2V0RXh0VW5wYWNrZXJzPW47dmFyIHMsYz10KFwiLi9idWZmZXJpc2hcIiksQnVmZmVyPWMuZ2xvYmFsLGg9e25hbWU6MSxtZXNzYWdlOjEsc3RhY2s6MSxjb2x1bW5OdW1iZXI6MSxmaWxlTmFtZToxLGxpbmVOdW1iZXI6MX19LHtcIi4vYnVmZmVyaXNoXCI6OCxcIi4vZGVjb2RlXCI6MTJ9XSwyMDpbZnVuY3Rpb24odCxyLGUpe3QoXCIuL3JlYWQtY29yZVwiKSx0KFwiLi93cml0ZS1jb3JlXCIpLGUuY3JlYXRlQ29kZWM9dChcIi4vY29kZWMtYmFzZVwiKS5jcmVhdGVDb2RlY30se1wiLi9jb2RlYy1iYXNlXCI6OSxcIi4vcmVhZC1jb3JlXCI6MjIsXCIuL3dyaXRlLWNvcmVcIjoyNX1dLDIxOltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbn1mdW5jdGlvbiBpKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpcmV0dXJuIG5ldyBpfWZ1bmN0aW9uIG8oKXtmdW5jdGlvbiB0KHQpe3ZhciByPXRoaXMub2Zmc2V0P3AucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5idWZmZXIsdGhpcy5vZmZzZXQpOnRoaXMuYnVmZmVyO3RoaXMuYnVmZmVyPXI/dD90aGlzLmJ1ZmZlcmlzaC5jb25jYXQoW3IsdF0pOnI6dCx0aGlzLm9mZnNldD0wfWZ1bmN0aW9uIHIoKXtmb3IoO3RoaXMub2Zmc2V0PHRoaXMuYnVmZmVyLmxlbmd0aDspe3ZhciB0LHI9dGhpcy5vZmZzZXQ7dHJ5e3Q9dGhpcy5mZXRjaCgpfWNhdGNoKHQpe2lmKHQmJnQubWVzc2FnZSE9dil0aHJvdyB0O3RoaXMub2Zmc2V0PXI7YnJlYWt9dGhpcy5wdXNoKHQpfX1mdW5jdGlvbiBlKHQpe3ZhciByPXRoaXMub2Zmc2V0LGU9cit0O2lmKGU+dGhpcy5idWZmZXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcih2KTtyZXR1cm4gdGhpcy5vZmZzZXQ9ZSxyfXJldHVybntidWZmZXJpc2g6cCx3cml0ZTp0LGZldGNoOmEsZmx1c2g6cixwdXNoOmMscHVsbDpoLHJlYWQ6cyxyZXNlcnZlOmUsb2Zmc2V0OjB9fWZ1bmN0aW9uIGYoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dGhpcy5zdGFydDtpZih0PHRoaXMub2Zmc2V0KXt2YXIgcj10aGlzLnN0YXJ0PXRoaXMub2Zmc2V0O3JldHVybiBwLnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYnVmZmVyLHQscil9fWZ1bmN0aW9uIHIoKXtmb3IoO3RoaXMuc3RhcnQ8dGhpcy5vZmZzZXQ7KXt2YXIgdD10aGlzLmZldGNoKCk7dCYmdGhpcy5wdXNoKHQpfX1mdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcy5idWZmZXJzfHwodGhpcy5idWZmZXJzPVtdKSxyPXQubGVuZ3RoPjE/dGhpcy5idWZmZXJpc2guY29uY2F0KHQpOnRbMF07cmV0dXJuIHQubGVuZ3RoPTAscn1mdW5jdGlvbiBuKHQpe3ZhciByPTB8dDtpZih0aGlzLmJ1ZmZlcil7dmFyIGU9dGhpcy5idWZmZXIubGVuZ3RoLG49MHx0aGlzLm9mZnNldCxpPW4rcjtpZihpPGUpcmV0dXJuIHRoaXMub2Zmc2V0PWksbjt0aGlzLmZsdXNoKCksdD1NYXRoLm1heCh0LE1hdGgubWluKDIqZSx0aGlzLm1heEJ1ZmZlclNpemUpKX1yZXR1cm4gdD1NYXRoLm1heCh0LHRoaXMubWluQnVmZmVyU2l6ZSksdGhpcy5idWZmZXI9dGhpcy5idWZmZXJpc2guYWxsb2ModCksdGhpcy5zdGFydD0wLHRoaXMub2Zmc2V0PXIsMH1mdW5jdGlvbiBpKHQpe3ZhciByPXQubGVuZ3RoO2lmKHI+dGhpcy5taW5CdWZmZXJTaXplKXRoaXMuZmx1c2goKSx0aGlzLnB1c2godCk7ZWxzZXt2YXIgZT10aGlzLnJlc2VydmUocik7cC5wcm90b3R5cGUuY29weS5jYWxsKHQsdGhpcy5idWZmZXIsZSl9fXJldHVybntidWZmZXJpc2g6cCx3cml0ZTp1LGZldGNoOnQsZmx1c2g6cixwdXNoOmMscHVsbDplLHJlYWQ6cyxyZXNlcnZlOm4sc2VuZDppLG1heEJ1ZmZlclNpemU6eSxtaW5CdWZmZXJTaXplOmQsb2Zmc2V0OjAsc3RhcnQ6MH19ZnVuY3Rpb24gdSgpe3Rocm93IG5ldyBFcnJvcihcIm1ldGhvZCBub3QgaW1wbGVtZW50ZWQ6IHdyaXRlKClcIil9ZnVuY3Rpb24gYSgpe3Rocm93IG5ldyBFcnJvcihcIm1ldGhvZCBub3QgaW1wbGVtZW50ZWQ6IGZldGNoKClcIil9ZnVuY3Rpb24gcygpe3ZhciB0PXRoaXMuYnVmZmVycyYmdGhpcy5idWZmZXJzLmxlbmd0aDtyZXR1cm4gdD8odGhpcy5mbHVzaCgpLHRoaXMucHVsbCgpKTp0aGlzLmZldGNoKCl9ZnVuY3Rpb24gYyh0KXt2YXIgcj10aGlzLmJ1ZmZlcnN8fCh0aGlzLmJ1ZmZlcnM9W10pO3IucHVzaCh0KX1mdW5jdGlvbiBoKCl7dmFyIHQ9dGhpcy5idWZmZXJzfHwodGhpcy5idWZmZXJzPVtdKTtyZXR1cm4gdC5zaGlmdCgpfWZ1bmN0aW9uIGwodCl7ZnVuY3Rpb24gcihyKXtmb3IodmFyIGUgaW4gdClyW2VdPXRbZV07cmV0dXJuIHJ9cmV0dXJuIHJ9ZS5GbGV4RGVjb2Rlcj1uLGUuRmxleEVuY29kZXI9aTt2YXIgcD10KFwiLi9idWZmZXJpc2hcIiksZD0yMDQ4LHk9NjU1MzYsdj1cIkJVRkZFUl9TSE9SVEFHRVwiO24ubWl4aW49bChvKCkpLG4ubWl4aW4obi5wcm90b3R5cGUpLGkubWl4aW49bChmKCkpLGkubWl4aW4oaS5wcm90b3R5cGUpfSx7XCIuL2J1ZmZlcmlzaFwiOjh9XSwyMjpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gcih0KXt2YXIgcj1zKHQpLG49ZVtyXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHR5cGU6IFwiKyhyP1wiMHhcIityLnRvU3RyaW5nKDE2KTpyKSk7cmV0dXJuIG4odCl9dmFyIGU9Yy5nZXRSZWFkVG9rZW4odCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaSgpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5kZWNvZGU9bih0KSx0JiZ0LnByZXNldCYmYS5zZXRFeHRVbnBhY2tlcnModGhpcyksdGhpc31mdW5jdGlvbiBvKHQscil7dmFyIGU9dGhpcy5leHRVbnBhY2tlcnN8fCh0aGlzLmV4dFVucGFja2Vycz1bXSk7ZVt0XT1oLmZpbHRlcihyKX1mdW5jdGlvbiBmKHQpe2Z1bmN0aW9uIHIocil7cmV0dXJuIG5ldyB1KHIsdCl9dmFyIGU9dGhpcy5leHRVbnBhY2tlcnN8fCh0aGlzLmV4dFVucGFja2Vycz1bXSk7cmV0dXJuIGVbdF18fHJ9dmFyIHU9dChcIi4vZXh0LWJ1ZmZlclwiKS5FeHRCdWZmZXIsYT10KFwiLi9leHQtdW5wYWNrZXJcIikscz10KFwiLi9yZWFkLWZvcm1hdFwiKS5yZWFkVWludDgsYz10KFwiLi9yZWFkLXRva2VuXCIpLGg9dChcIi4vY29kZWMtYmFzZVwiKTtoLmluc3RhbGwoe2FkZEV4dFVucGFja2VyOm8sZ2V0RXh0VW5wYWNrZXI6Zixpbml0Oml9KSxlLnByZXNldD1pLmNhbGwoaC5wcmVzZXQpfSx7XCIuL2NvZGVjLWJhc2VcIjo5LFwiLi9leHQtYnVmZmVyXCI6MTcsXCIuL2V4dC11bnBhY2tlclwiOjE5LFwiLi9yZWFkLWZvcm1hdFwiOjIzLFwiLi9yZWFkLXRva2VuXCI6MjR9XSwyMzpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI9ay5oYXNBcnJheUJ1ZmZlciYmdCYmdC5iaW5hcnJheWJ1ZmZlcixlPXQmJnQuaW50NjQsbj1UJiZ0JiZ0LnVzZW1hcCxCPXttYXA6bj9vOmksYXJyYXk6ZixzdHI6dSxiaW46cj9zOmEsZXh0OmMsdWludDg6aCx1aW50MTY6cCx1aW50MzI6eSx1aW50NjQ6Zyg4LGU/RTpiKSxpbnQ4OmwsaW50MTY6ZCxpbnQzMjp2LGludDY0OmcoOCxlP0E6dyksZmxvYXQzMjpnKDQsbSksZmxvYXQ2NDpnKDgseCl9O3JldHVybiBCfWZ1bmN0aW9uIGkodCxyKXt2YXIgZSxuPXt9LGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGY9dC5jb2RlYy5kZWNvZGU7Zm9yKGU9MDtlPHI7ZSsrKWlbZV09Zih0KSxvW2VdPWYodCk7Zm9yKGU9MDtlPHI7ZSsrKW5baVtlXV09b1tlXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQscil7dmFyIGUsbj1uZXcgTWFwLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGY9dC5jb2RlYy5kZWNvZGU7Zm9yKGU9MDtlPHI7ZSsrKWlbZV09Zih0KSxvW2VdPWYodCk7Zm9yKGU9MDtlPHI7ZSsrKW4uc2V0KGlbZV0sb1tlXSk7cmV0dXJuIG59ZnVuY3Rpb24gZih0LHIpe2Zvcih2YXIgZT1uZXcgQXJyYXkociksbj10LmNvZGVjLmRlY29kZSxpPTA7aTxyO2krKyllW2ldPW4odCk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LHIpe3ZhciBlPXQucmVzZXJ2ZShyKSxuPWUrcjtyZXR1cm4gXy50b1N0cmluZy5jYWxsKHQuYnVmZmVyLFwidXRmLThcIixlLG4pfWZ1bmN0aW9uIGEodCxyKXt2YXIgZT10LnJlc2VydmUociksbj1lK3IsaT1fLnNsaWNlLmNhbGwodC5idWZmZXIsZSxuKTtyZXR1cm4gay5mcm9tKGkpfWZ1bmN0aW9uIHModCxyKXt2YXIgZT10LnJlc2VydmUociksbj1lK3IsaT1fLnNsaWNlLmNhbGwodC5idWZmZXIsZSxuKTtyZXR1cm4gay5VaW50OEFycmF5LmZyb20oaSkuYnVmZmVyfWZ1bmN0aW9uIGModCxyKXt2YXIgZT10LnJlc2VydmUocisxKSxuPXQuYnVmZmVyW2UrK10saT1lK3Isbz10LmNvZGVjLmdldEV4dFVucGFja2VyKG4pO2lmKCFvKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZXh0IHR5cGU6IFwiKyhuP1wiMHhcIituLnRvU3RyaW5nKDE2KTpuKSk7dmFyIGY9Xy5zbGljZS5jYWxsKHQuYnVmZmVyLGUsaSk7cmV0dXJuIG8oZil9ZnVuY3Rpb24gaCh0KXt2YXIgcj10LnJlc2VydmUoMSk7cmV0dXJuIHQuYnVmZmVyW3JdfWZ1bmN0aW9uIGwodCl7dmFyIHI9dC5yZXNlcnZlKDEpLGU9dC5idWZmZXJbcl07cmV0dXJuIDEyOCZlP2UtMjU2OmV9ZnVuY3Rpb24gcCh0KXt2YXIgcj10LnJlc2VydmUoMiksZT10LmJ1ZmZlcjtyZXR1cm4gZVtyKytdPDw4fGVbcl19ZnVuY3Rpb24gZCh0KXt2YXIgcj10LnJlc2VydmUoMiksZT10LmJ1ZmZlcixuPWVbcisrXTw8OHxlW3JdO3JldHVybiAzMjc2OCZuP24tNjU1MzY6bn1mdW5jdGlvbiB5KHQpe3ZhciByPXQucmVzZXJ2ZSg0KSxlPXQuYnVmZmVyO3JldHVybiAxNjc3NzIxNiplW3IrK10rKGVbcisrXTw8MTYpKyhlW3IrK108PDgpK2Vbcl19ZnVuY3Rpb24gdih0KXt2YXIgcj10LnJlc2VydmUoNCksZT10LmJ1ZmZlcjtyZXR1cm4gZVtyKytdPDwyNHxlW3IrK108PDE2fGVbcisrXTw8OHxlW3JdfWZ1bmN0aW9uIGcodCxyKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXNlcnZlKHQpO3JldHVybiByLmNhbGwoZS5idWZmZXIsbixTKX19ZnVuY3Rpb24gYih0KXtyZXR1cm4gbmV3IFAodGhpcyx0KS50b051bWJlcigpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIG5ldyBSKHRoaXMsdCkudG9OdW1iZXIoKX1mdW5jdGlvbiBFKHQpe3JldHVybiBuZXcgUCh0aGlzLHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIG5ldyBSKHRoaXMsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gQi5yZWFkKHRoaXMsdCwhMSwyMyw0KX1mdW5jdGlvbiB4KHQpe3JldHVybiBCLnJlYWQodGhpcyx0LCExLDUyLDgpfXZhciBCPXQoXCJpZWVlNzU0XCIpLFU9dChcImludDY0LWJ1ZmZlclwiKSxQPVUuVWludDY0QkUsUj1VLkludDY0QkU7ZS5nZXRSZWFkRm9ybWF0PW4sZS5yZWFkVWludDg9aDt2YXIgaz10KFwiLi9idWZmZXJpc2hcIiksXz10KFwiLi9idWZmZXJpc2gtcHJvdG9cIiksVD1cInVuZGVmaW5lZFwiIT10eXBlb2YgTWFwLFM9ITB9LHtcIi4vYnVmZmVyaXNoXCI6OCxcIi4vYnVmZmVyaXNoLXByb3RvXCI6NixpZWVlNzU0OjMyLFwiaW50NjQtYnVmZmVyXCI6MzN9XSwyNDpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI9cy5nZXRSZWFkRm9ybWF0KHQpO3JldHVybiB0JiZ0LnVzZXJhdz9vKHIpOmkocil9ZnVuY3Rpb24gaSh0KXt2YXIgcixlPW5ldyBBcnJheSgyNTYpO2ZvcihyPTA7cjw9MTI3O3IrKyllW3JdPWYocik7Zm9yKHI9MTI4O3I8PTE0MztyKyspZVtyXT1hKHItMTI4LHQubWFwKTtmb3Iocj0xNDQ7cjw9MTU5O3IrKyllW3JdPWEoci0xNDQsdC5hcnJheSk7Zm9yKHI9MTYwO3I8PTE5MTtyKyspZVtyXT1hKHItMTYwLHQuc3RyKTtmb3IoZVsxOTJdPWYobnVsbCksZVsxOTNdPW51bGwsZVsxOTRdPWYoITEpLGVbMTk1XT1mKCEwKSxlWzE5Nl09dSh0LnVpbnQ4LHQuYmluKSxlWzE5N109dSh0LnVpbnQxNix0LmJpbiksZVsxOThdPXUodC51aW50MzIsdC5iaW4pLGVbMTk5XT11KHQudWludDgsdC5leHQpLGVbMjAwXT11KHQudWludDE2LHQuZXh0KSxlWzIwMV09dSh0LnVpbnQzMix0LmV4dCksZVsyMDJdPXQuZmxvYXQzMixlWzIwM109dC5mbG9hdDY0LGVbMjA0XT10LnVpbnQ4LGVbMjA1XT10LnVpbnQxNixlWzIwNl09dC51aW50MzIsZVsyMDddPXQudWludDY0LGVbMjA4XT10LmludDgsZVsyMDldPXQuaW50MTYsZVsyMTBdPXQuaW50MzIsZVsyMTFdPXQuaW50NjQsZVsyMTJdPWEoMSx0LmV4dCksZVsyMTNdPWEoMix0LmV4dCksZVsyMTRdPWEoNCx0LmV4dCksZVsyMTVdPWEoOCx0LmV4dCksZVsyMTZdPWEoMTYsdC5leHQpLGVbMjE3XT11KHQudWludDgsdC5zdHIpLGVbMjE4XT11KHQudWludDE2LHQuc3RyKSxlWzIxOV09dSh0LnVpbnQzMix0LnN0ciksZVsyMjBdPXUodC51aW50MTYsdC5hcnJheSksZVsyMjFdPXUodC51aW50MzIsdC5hcnJheSksZVsyMjJdPXUodC51aW50MTYsdC5tYXApLGVbMjIzXT11KHQudWludDMyLHQubWFwKSxyPTIyNDtyPD0yNTU7cisrKWVbcl09ZihyLTI1Nik7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXt2YXIgcixlPWkodCkuc2xpY2UoKTtmb3IoZVsyMTddPWVbMTk2XSxlWzIxOF09ZVsxOTddLGVbMjE5XT1lWzE5OF0scj0xNjA7cjw9MTkxO3IrKyllW3JdPWEoci0xNjAsdC5iaW4pO3JldHVybiBlfWZ1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHUodCxyKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dChlKTtyZXR1cm4gcihlLG4pfX1mdW5jdGlvbiBhKHQscil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiByKGUsdCl9fXZhciBzPXQoXCIuL3JlYWQtZm9ybWF0XCIpO2UuZ2V0UmVhZFRva2VuPW59LHtcIi4vcmVhZC1mb3JtYXRcIjoyM31dLDI1OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiByKHQscil7dmFyIG49ZVt0eXBlb2Ygcl07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIFwiJyt0eXBlb2YgcisnXCI6ICcrcik7bih0LHIpfXZhciBlPXMuZ2V0V3JpdGVUeXBlKHQpO3JldHVybiByfWZ1bmN0aW9uIGkoKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuZW5jb2RlPW4odCksdCYmdC5wcmVzZXQmJmEuc2V0RXh0UGFja2Vycyh0aGlzKSx0aGlzfWZ1bmN0aW9uIG8odCxyLGUpe2Z1bmN0aW9uIG4ocil7cmV0dXJuIGUmJihyPWUocikpLG5ldyB1KHIsdCl9ZT1jLmZpbHRlcihlKTt2YXIgaT1yLm5hbWU7aWYoaSYmXCJPYmplY3RcIiE9PWkpe3ZhciBvPXRoaXMuZXh0UGFja2Vyc3x8KHRoaXMuZXh0UGFja2Vycz17fSk7b1tpXT1ufWVsc2V7dmFyIGY9dGhpcy5leHRFbmNvZGVyTGlzdHx8KHRoaXMuZXh0RW5jb2Rlckxpc3Q9W10pO2YudW5zaGlmdChbcixuXSl9fWZ1bmN0aW9uIGYodCl7dmFyIHI9dGhpcy5leHRQYWNrZXJzfHwodGhpcy5leHRQYWNrZXJzPXt9KSxlPXQuY29uc3RydWN0b3Isbj1lJiZlLm5hbWUmJnJbZS5uYW1lXTtpZihuKXJldHVybiBuO2Zvcih2YXIgaT10aGlzLmV4dEVuY29kZXJMaXN0fHwodGhpcy5leHRFbmNvZGVyTGlzdD1bXSksbz1pLmxlbmd0aCxmPTA7ZjxvO2YrKyl7dmFyIHU9aVtmXTtpZihlPT09dVswXSlyZXR1cm4gdVsxXX19dmFyIHU9dChcIi4vZXh0LWJ1ZmZlclwiKS5FeHRCdWZmZXIsYT10KFwiLi9leHQtcGFja2VyXCIpLHM9dChcIi4vd3JpdGUtdHlwZVwiKSxjPXQoXCIuL2NvZGVjLWJhc2VcIik7Yy5pbnN0YWxsKHthZGRFeHRQYWNrZXI6byxnZXRFeHRQYWNrZXI6Zixpbml0Oml9KSxlLnByZXNldD1pLmNhbGwoYy5wcmVzZXQpfSx7XCIuL2NvZGVjLWJhc2VcIjo5LFwiLi9leHQtYnVmZmVyXCI6MTcsXCIuL2V4dC1wYWNrZXJcIjoxOCxcIi4vd3JpdGUtdHlwZVwiOjI3fV0sMjY6W2Z1bmN0aW9uKHQscixlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0LnVpbnQ4YXJyYXk/aSgpOm18fEUuaGFzQnVmZmVyJiZ0JiZ0LnNhZmU/ZigpOm8oKX1mdW5jdGlvbiBpKCl7dmFyIHQ9bygpO3JldHVybiB0WzIwMl09YygyMDIsNCxwKSx0WzIwM109YygyMDMsOCxkKSx0fWZ1bmN0aW9uIG8oKXt2YXIgdD13LnNsaWNlKCk7cmV0dXJuIHRbMTk2XT11KDE5NiksdFsxOTddPWEoMTk3KSx0WzE5OF09cygxOTgpLHRbMTk5XT11KDE5OSksdFsyMDBdPWEoMjAwKSx0WzIwMV09cygyMDEpLHRbMjAyXT1jKDIwMiw0LHgud3JpdGVGbG9hdEJFfHxwLCEwKSx0WzIwM109YygyMDMsOCx4LndyaXRlRG91YmxlQkV8fGQsITApLHRbMjA0XT11KDIwNCksdFsyMDVdPWEoMjA1KSx0WzIwNl09cygyMDYpLHRbMjA3XT1jKDIwNyw4LGgpLHRbMjA4XT11KDIwOCksdFsyMDldPWEoMjA5KSx0WzIxMF09cygyMTApLHRbMjExXT1jKDIxMSw4LGwpLHRbMjE3XT11KDIxNyksdFsyMThdPWEoMjE4KSx0WzIxOV09cygyMTkpLHRbMjIwXT1hKDIyMCksdFsyMjFdPXMoMjIxKSx0WzIyMl09YSgyMjIpLHRbMjIzXT1zKDIyMyksdH1mdW5jdGlvbiBmKCl7dmFyIHQ9dy5zbGljZSgpO3JldHVybiB0WzE5Nl09YygxOTYsMSxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDgpLHRbMTk3XT1jKDE5NywyLEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSksdFsxOThdPWMoMTk4LDQsQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFKSx0WzE5OV09YygxOTksMSxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDgpLHRbMjAwXT1jKDIwMCwyLEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSksdFsyMDFdPWMoMjAxLDQsQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFKSx0WzIwMl09YygyMDIsNCxCdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSksdFsyMDNdPWMoMjAzLDgsQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFKSx0WzIwNF09YygyMDQsMSxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDgpLHRbMjA1XT1jKDIwNSwyLEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSksdFsyMDZdPWMoMjA2LDQsQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFKSx0WzIwN109YygyMDcsOCxoKSx0WzIwOF09YygyMDgsMSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCksdFsyMDldPWMoMjA5LDIsQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUpLHRbMjEwXT1jKDIxMCw0LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFKSx0WzIxMV09YygyMTEsOCxsKSx0WzIxN109YygyMTcsMSxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDgpLHRbMjE4XT1jKDIxOCwyLEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSksdFsyMTldPWMoMjE5LDQsQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFKSx0WzIyMF09YygyMjAsMixCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUpLHRbMjIxXT1jKDIyMSw0LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSksdFsyMjJdPWMoMjIyLDIsQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFKSx0WzIyM109YygyMjMsNCxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUpLHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXt2YXIgbj1yLnJlc2VydmUoMiksaT1yLmJ1ZmZlcjtpW24rK109dCxpW25dPWV9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKHIsZSl7dmFyIG49ci5yZXNlcnZlKDMpLGk9ci5idWZmZXI7aVtuKytdPXQsaVtuKytdPWU+Pj44LGlbbl09ZX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXt2YXIgbj1yLnJlc2VydmUoNSksaT1yLmJ1ZmZlcjtpW24rK109dCxpW24rK109ZT4+PjI0LGlbbisrXT1lPj4+MTYsaVtuKytdPWU+Pj44LGlbbl09ZX19ZnVuY3Rpb24gYyh0LHIsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSxvKXt2YXIgZj1pLnJlc2VydmUocisxKTtpLmJ1ZmZlcltmKytdPXQsZS5jYWxsKGkuYnVmZmVyLG8sZixuKX19ZnVuY3Rpb24gaCh0LHIpe25ldyBnKHRoaXMscix0KX1mdW5jdGlvbiBsKHQscil7bmV3IGIodGhpcyxyLHQpfWZ1bmN0aW9uIHAodCxyKXt5LndyaXRlKHRoaXMsdCxyLCExLDIzLDQpfWZ1bmN0aW9uIGQodCxyKXt5LndyaXRlKHRoaXMsdCxyLCExLDUyLDgpfXZhciB5PXQoXCJpZWVlNzU0XCIpLHY9dChcImludDY0LWJ1ZmZlclwiKSxnPXYuVWludDY0QkUsYj12LkludDY0QkUsdz10KFwiLi93cml0ZS11aW50OFwiKS51aW50OCxFPXQoXCIuL2J1ZmZlcmlzaFwiKSxCdWZmZXI9RS5nbG9iYWwsQT1FLmhhc0J1ZmZlciYmXCJUWVBFRF9BUlJBWV9TVVBQT1JUXCJpbiBCdWZmZXIsbT1BJiYhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQseD1FLmhhc0J1ZmZlciYmQnVmZmVyLnByb3RvdHlwZXx8e307ZS5nZXRXcml0ZVRva2VuPW59LHtcIi4vYnVmZmVyaXNoXCI6OCxcIi4vd3JpdGUtdWludDhcIjoyOCxpZWVlNzU0OjMyLFwiaW50NjQtYnVmZmVyXCI6MzN9XSwyNzpbZnVuY3Rpb24odCxyLGUpe2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gcih0LHIpe3ZhciBlPXI/MTk1OjE5NDtfW2VdKHQscil9ZnVuY3Rpb24gZSh0LHIpe3ZhciBlLG49MHxyO3JldHVybiByIT09bj8oZT0yMDMsdm9pZCBfW2VdKHQscikpOihlPS0zMjw9biYmbjw9MTI3PzI1NSZuOjA8PW4/bjw9MjU1PzIwNDpuPD02NTUzNT8yMDU6MjA2Oi0xMjg8PW4/MjA4Oi0zMjc2ODw9bj8yMDk6MjEwLHZvaWQgX1tlXSh0LG4pKX1mdW5jdGlvbiBuKHQscil7dmFyIGU9MjA3O19bZV0odCxyLnRvQXJyYXkoKSl9ZnVuY3Rpb24gbyh0LHIpe3ZhciBlPTIxMTtfW2VdKHQsci50b0FycmF5KCkpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQ8MzI/MTp0PD0yNTU/Mjp0PD02NTUzNT8zOjV9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdDwzMj8xOnQ8PTY1NTM1PzM6NX1mdW5jdGlvbiBiKHQpe2Z1bmN0aW9uIHIocixlKXt2YXIgbj1lLmxlbmd0aCxpPTUrMypuO3Iub2Zmc2V0PXIucmVzZXJ2ZShpKTt2YXIgbz1yLmJ1ZmZlcixmPXQobiksdT1yLm9mZnNldCtmO249cy53cml0ZS5jYWxsKG8sZSx1KTt2YXIgYT10KG4pO2lmKGYhPT1hKXt2YXIgYz11K2EtZixoPXUrbjtzLmNvcHkuY2FsbChvLG8sYyx1LGgpfXZhciBsPTE9PT1hPzE2MCtuOmE8PTM/MjE1K2E6MjE5O19bbF0ocixuKSxyLm9mZnNldCs9bn1yZXR1cm4gcn1mdW5jdGlvbiB3KHQscil7aWYobnVsbD09PXIpcmV0dXJuIEEodCxyKTtpZihJKHIpKXJldHVybiBZKHQscik7aWYoaShyKSlyZXR1cm4gbSh0LHIpO2lmKGYuaXNVaW50NjRCRShyKSlyZXR1cm4gbih0LHIpO2lmKHUuaXNJbnQ2NEJFKHIpKXJldHVybiBvKHQscik7dmFyIGU9dC5jb2RlYy5nZXRFeHRQYWNrZXIocik7cmV0dXJuIGUmJihyPWUocikpLHIgaW5zdGFuY2VvZiBsP1UodCxyKTp2b2lkIEQodCxyKX1mdW5jdGlvbiBFKHQscil7cmV0dXJuIEkocik/ayh0LHIpOnZvaWQgdyh0LHIpfWZ1bmN0aW9uIEEodCxyKXt2YXIgZT0xOTI7X1tlXSh0LHIpfWZ1bmN0aW9uIG0odCxyKXt2YXIgZT1yLmxlbmd0aCxuPWU8MTY/MTQ0K2U6ZTw9NjU1MzU/MjIwOjIyMTtfW25dKHQsZSk7Zm9yKHZhciBpPXQuY29kZWMuZW5jb2RlLG89MDtvPGU7bysrKWkodCxyW29dKX1mdW5jdGlvbiB4KHQscil7dmFyIGU9ci5sZW5ndGgsbj1lPDI1NT8xOTY6ZTw9NjU1MzU/MTk3OjE5ODtfW25dKHQsZSksdC5zZW5kKHIpfWZ1bmN0aW9uIEIodCxyKXt4KHQsbmV3IFVpbnQ4QXJyYXkocikpfWZ1bmN0aW9uIFUodCxyKXt2YXIgZT1yLmJ1ZmZlcixuPWUubGVuZ3RoLGk9eVtuXXx8KG48MjU1PzE5OTpuPD02NTUzNT8yMDA6MjAxKTtfW2ldKHQsbiksaFtyLnR5cGVdKHQpLHQuc2VuZChlKX1mdW5jdGlvbiBQKHQscil7dmFyIGU9T2JqZWN0LmtleXMociksbj1lLmxlbmd0aCxpPW48MTY/MTI4K246bjw9NjU1MzU/MjIyOjIyMztfW2ldKHQsbik7dmFyIG89dC5jb2RlYy5lbmNvZGU7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe28odCxlKSxvKHQscltlXSl9KX1mdW5jdGlvbiBSKHQscil7aWYoIShyIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gUCh0LHIpO3ZhciBlPXIuc2l6ZSxuPWU8MTY/MTI4K2U6ZTw9NjU1MzU/MjIyOjIyMztfW25dKHQsZSk7dmFyIGk9dC5jb2RlYy5lbmNvZGU7ci5mb3JFYWNoKGZ1bmN0aW9uKHIsZSxuKXtpKHQsZSksaSh0LHIpfSl9ZnVuY3Rpb24gayh0LHIpe3ZhciBlPXIubGVuZ3RoLG49ZTwzMj8xNjArZTplPD02NTUzNT8yMTg6MjE5O19bbl0odCxlKSx0LnNlbmQocil9dmFyIF89Yy5nZXRXcml0ZVRva2VuKHQpLFQ9dCYmdC51c2VyYXcsUz1wJiZ0JiZ0LmJpbmFycmF5YnVmZmVyLEk9Uz9hLmlzQXJyYXlCdWZmZXI6YS5pc0J1ZmZlcixZPVM/Qjp4LEM9ZCYmdCYmdC51c2VtYXAsRD1DP1I6UCxPPXtib29sZWFuOnIsZnVuY3Rpb246QSxudW1iZXI6ZSxvYmplY3Q6VD9FOncsc3RyaW5nOmIoVD9nOnYpLHN5bWJvbDpBLHVuZGVmaW5lZDpBfTtyZXR1cm4gT312YXIgaT10KFwiaXNhcnJheVwiKSxvPXQoXCJpbnQ2NC1idWZmZXJcIiksZj1vLlVpbnQ2NEJFLHU9by5JbnQ2NEJFLGE9dChcIi4vYnVmZmVyaXNoXCIpLHM9dChcIi4vYnVmZmVyaXNoLXByb3RvXCIpLGM9dChcIi4vd3JpdGUtdG9rZW5cIiksaD10KFwiLi93cml0ZS11aW50OFwiKS51aW50OCxsPXQoXCIuL2V4dC1idWZmZXJcIikuRXh0QnVmZmVyLHA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksZD1cInVuZGVmaW5lZFwiIT10eXBlb2YgTWFwLHk9W107eVsxXT0yMTIseVsyXT0yMTMseVs0XT0yMTQseVs4XT0yMTUseVsxNl09MjE2LGUuZ2V0V3JpdGVUeXBlPW59LHtcIi4vYnVmZmVyaXNoXCI6OCxcIi4vYnVmZmVyaXNoLXByb3RvXCI6NixcIi4vZXh0LWJ1ZmZlclwiOjE3LFwiLi93cml0ZS10b2tlblwiOjI2LFwiLi93cml0ZS11aW50OFwiOjI4LFwiaW50NjQtYnVmZmVyXCI6MzMsaXNhcnJheTozNH1dLDI4OltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGU9ci5yZXNlcnZlKDEpO3IuYnVmZmVyW2VdPXR9fWZvcih2YXIgaT1lLnVpbnQ4PW5ldyBBcnJheSgyNTYpLG89MDtvPD0yNTU7bysrKWlbb109bihvKX0se31dLDI5OltmdW5jdGlvbih0LHIsZSl7KGZ1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnN1YmFycmF5JiYwPT09dC5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fWZ1bmN0aW9uIGkoKXtyZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIG8odCxyKXtpZihpKCk8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoXCIpO3JldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVD8odD1uZXcgVWludDhBcnJheShyKSx0Ll9fcHJvdG9fXz1CdWZmZXIucHJvdG90eXBlKToobnVsbD09PXQmJih0PW5ldyBCdWZmZXIocikpLHQubGVuZ3RoPXIpLHR9ZnVuY3Rpb24gQnVmZmVyKHQscixlKXtpZighKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSlyZXR1cm4gbmV3IEJ1ZmZlcih0LHIsZSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKXRocm93IG5ldyBFcnJvcihcIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nXCIpO3JldHVybiBzKHRoaXMsdCl9cmV0dXJuIGYodGhpcyx0LHIsZSl9ZnVuY3Rpb24gZih0LHIsZSxuKXtpZihcIm51bWJlclwiPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJnIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9sKHQscixlLG4pOlwic3RyaW5nXCI9PXR5cGVvZiByP2ModCxyLGUpOnAodCxyKX1mdW5jdGlvbiB1KHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gYSh0LHIsZSxuKXtyZXR1cm4gdShyKSxyPD0wP28odCxyKTp2b2lkIDAhPT1lP1wic3RyaW5nXCI9PXR5cGVvZiBuP28odCxyKS5maWxsKGUsbik6byh0LHIpLmZpbGwoZSk6byh0LHIpfWZ1bmN0aW9uIHModCxyKXtpZih1KHIpLHQ9byh0LHI8MD8wOjB8ZChyKSksIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgZT0wO2U8cjsrK2UpdFtlXT0wO3JldHVybiB0fWZ1bmN0aW9uIGModCxyLGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIlwiIT09ZXx8KGU9XCJ1dGY4XCIpLCFCdWZmZXIuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBuPTB8dihyLGUpO3Q9byh0LG4pO3ZhciBpPXQud3JpdGUocixlKTtyZXR1cm4gaSE9PW4mJih0PXQuc2xpY2UoMCxpKSksdH1mdW5jdGlvbiBoKHQscil7dmFyIGU9ci5sZW5ndGg8MD8wOjB8ZChyLmxlbmd0aCk7dD1vKHQsZSk7Zm9yKHZhciBuPTA7bjxlO24rPTEpdFtuXT0yNTUmcltuXTtyZXR1cm4gdH1mdW5jdGlvbiBsKHQscixlLG4pe2lmKHIuYnl0ZUxlbmd0aCxlPDB8fHIuYnl0ZUxlbmd0aDxlKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihyLmJ5dGVMZW5ndGg8ZSsobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzXCIpO3JldHVybiByPXZvaWQgMD09PWUmJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkocik6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheShyLGUpOm5ldyBVaW50OEFycmF5KHIsZSxuKSxCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVD8odD1yLHQuX19wcm90b19fPUJ1ZmZlci5wcm90b3R5cGUpOnQ9aCh0LHIpLHR9ZnVuY3Rpb24gcCh0LHIpe2lmKEJ1ZmZlci5pc0J1ZmZlcihyKSl7dmFyIGU9MHxkKHIubGVuZ3RoKTtyZXR1cm4gdD1vKHQsZSksMD09PXQubGVuZ3RoP3Q6KHIuY29weSh0LDAsMCxlKSx0KX1pZihyKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJnIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fFwibGVuZ3RoXCJpbiByKXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiByLmxlbmd0aHx8SChyLmxlbmd0aCk/byh0LDApOmgodCxyKTtpZihcIkJ1ZmZlclwiPT09ci50eXBlJiZRKHIuZGF0YSkpcmV0dXJuIGgodCxyLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuXCIpfWZ1bmN0aW9uIGQodCl7aWYodD49aSgpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2koKS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8dH1mdW5jdGlvbiB5KHQpe3JldHVybit0IT10JiYodD0wKSxCdWZmZXIuYWxsb2MoK3QpfWZ1bmN0aW9uIHYodCxyKXtpZihCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpfHx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiB0LmJ5dGVMZW5ndGg7XCJzdHJpbmdcIiE9dHlwZW9mIHQmJih0PVwiXCIrdCk7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuIDA7Zm9yKHZhciBuPSExOzspc3dpdGNoKHIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIGU7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZSB2b2lkIDA6cmV0dXJuIHEodCkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKmU7Y2FzZVwiaGV4XCI6cmV0dXJuIGU+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBYKHQpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIHEodCkubGVuZ3RoO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBnKHQscixlKXt2YXIgbj0hMTtpZigodm9pZCAwPT09cnx8cjwwKSYmKHI9MCkscj50aGlzLmxlbmd0aClyZXR1cm5cIlwiO2lmKCh2b2lkIDA9PT1lfHxlPnRoaXMubGVuZ3RoKSYmKGU9dGhpcy5sZW5ndGgpLGU8PTApcmV0dXJuXCJcIjtpZihlPj4+PTAscj4+Pj0wLGU8PXIpcmV0dXJuXCJcIjtmb3IodHx8KHQ9XCJ1dGY4XCIpOzspc3dpdGNoKHQpe2Nhc2VcImhleFwiOnJldHVybiBJKHRoaXMscixlKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gayh0aGlzLHIsZSk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gVCh0aGlzLHIsZSk7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIFModGhpcyxyLGUpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBSKHRoaXMscixlKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gWSh0aGlzLHIsZSk7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KTt0PSh0K1wiXCIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gYih0LHIsZSl7dmFyIG49dFtyXTt0W3JdPXRbZV0sdFtlXT1ufWZ1bmN0aW9uIHcodCxyLGUsbixpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGU/KG49ZSxlPTApOmU+MjE0NzQ4MzY0Nz9lPTIxNDc0ODM2NDc6ZTwtMjE0NzQ4MzY0OCYmKGU9LTIxNDc0ODM2NDgpLGU9K2UsaXNOYU4oZSkmJihlPWk/MDp0Lmxlbmd0aC0xKSxlPDAmJihlPXQubGVuZ3RoK2UpLGU+PXQubGVuZ3RoKXtpZihpKXJldHVybi0xO2U9dC5sZW5ndGgtMX1lbHNlIGlmKGU8MCl7aWYoIWkpcmV0dXJuLTE7ZT0wfWlmKFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1CdWZmZXIuZnJvbShyLG4pKSxCdWZmZXIuaXNCdWZmZXIocikpcmV0dXJuIDA9PT1yLmxlbmd0aD8tMTpFKHQscixlLG4saSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHIpcmV0dXJuIHI9MjU1JnIsQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxyLGUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxyLGUpOkUodCxbcl0sZSxuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXJcIil9ZnVuY3Rpb24gRSh0LHIsZSxuLGkpe2Z1bmN0aW9uIG8odCxyKXtyZXR1cm4gMT09PWY/dFtyXTp0LnJlYWRVSW50MTZCRShyKmYpfXZhciBmPTEsdT10Lmxlbmd0aCxhPXIubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJihuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpLFwidWNzMlwiPT09bnx8XCJ1Y3MtMlwiPT09bnx8XCJ1dGYxNmxlXCI9PT1ufHxcInV0Zi0xNmxlXCI9PT1uKSl7aWYodC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtmPTIsdS89MixhLz0yLGUvPTJ9dmFyIHM7aWYoaSl7dmFyIGM9LTE7Zm9yKHM9ZTtzPHU7cysrKWlmKG8odCxzKT09PW8ocixjPT09LTE/MDpzLWMpKXtpZihjPT09LTEmJihjPXMpLHMtYysxPT09YSlyZXR1cm4gYypmfWVsc2UgYyE9PS0xJiYocy09cy1jKSxjPS0xfWVsc2UgZm9yKGUrYT51JiYoZT11LWEpLHM9ZTtzPj0wO3MtLSl7Zm9yKHZhciBoPSEwLGw9MDtsPGE7bCsrKWlmKG8odCxzK2wpIT09byhyLGwpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIHN9cmV0dXJuLTF9ZnVuY3Rpb24gQSh0LHIsZSxuKXtlPU51bWJlcihlKXx8MDt2YXIgaT10Lmxlbmd0aC1lO24/KG49TnVtYmVyKG4pLG4+aSYmKG49aSkpOm49aTt2YXIgbz1yLmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7bj5vLzImJihuPW8vMik7Zm9yKHZhciBmPTA7ZjxuOysrZil7dmFyIHU9cGFyc2VJbnQoci5zdWJzdHIoMipmLDIpLDE2KTtpZihpc05hTih1KSlyZXR1cm4gZjt0W2UrZl09dX1yZXR1cm4gZn1mdW5jdGlvbiBtKHQscixlLG4pe3JldHVybiBHKHEocix0Lmxlbmd0aC1lKSx0LGUsbil9ZnVuY3Rpb24geCh0LHIsZSxuKXtyZXR1cm4gRyhXKHIpLHQsZSxuKX1mdW5jdGlvbiBCKHQscixlLG4pe3JldHVybiB4KHQscixlLG4pfWZ1bmN0aW9uIFUodCxyLGUsbil7cmV0dXJuIEcoWChyKSx0LGUsbil9ZnVuY3Rpb24gUCh0LHIsZSxuKXtyZXR1cm4gRyhKKHIsdC5sZW5ndGgtZSksdCxlLG4pfWZ1bmN0aW9uIFIodCxyLGUpe3JldHVybiAwPT09ciYmZT09PXQubGVuZ3RoP1ouZnJvbUJ5dGVBcnJheSh0KTpaLmZyb21CeXRlQXJyYXkodC5zbGljZShyLGUpKX1mdW5jdGlvbiBrKHQscixlKXtlPU1hdGgubWluKHQubGVuZ3RoLGUpO2Zvcih2YXIgbj1bXSxpPXI7aTxlOyl7dmFyIG89dFtpXSxmPW51bGwsdT1vPjIzOT80Om8+MjIzPzM6bz4xOTE/MjoxO2lmKGkrdTw9ZSl7dmFyIGEscyxjLGg7c3dpdGNoKHUpe2Nhc2UgMTpvPDEyOCYmKGY9byk7YnJlYWs7Y2FzZSAyOmE9dFtpKzFdLDEyOD09PSgxOTImYSkmJihoPSgzMSZvKTw8Nnw2MyZhLGg+MTI3JiYoZj1oKSk7YnJlYWs7Y2FzZSAzOmE9dFtpKzFdLHM9dFtpKzJdLDEyOD09PSgxOTImYSkmJjEyOD09PSgxOTImcykmJihoPSgxNSZvKTw8MTJ8KDYzJmEpPDw2fDYzJnMsaD4yMDQ3JiYoaDw1NTI5Nnx8aD41NzM0MykmJihmPWgpKTticmVhaztjYXNlIDQ6YT10W2krMV0scz10W2krMl0sYz10W2krM10sMTI4PT09KDE5MiZhKSYmMTI4PT09KDE5MiZzKSYmMTI4PT09KDE5MiZjKSYmKGg9KDE1Jm8pPDwxOHwoNjMmYSk8PDEyfCg2MyZzKTw8Nnw2MyZjLGg+NjU1MzUmJmg8MTExNDExMiYmKGY9aCkpfX1udWxsPT09Zj8oZj02NTUzMyx1PTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksaSs9dX1yZXR1cm4gXyhuKX1mdW5jdGlvbiBfKHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8PSQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO2Zvcih2YXIgZT1cIlwiLG49MDtuPHI7KWUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz0kKSk7cmV0dXJuIGV9ZnVuY3Rpb24gVCh0LHIsZSl7dmFyIG49XCJcIjtlPU1hdGgubWluKHQubGVuZ3RoLGUpO2Zvcih2YXIgaT1yO2k8ZTsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gUyh0LHIsZSl7dmFyIG49XCJcIjtlPU1hdGgubWluKHQubGVuZ3RoLGUpO2Zvcih2YXIgaT1yO2k8ZTsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBJKHQscixlKXt2YXIgbj10Lmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghZXx8ZTwwfHxlPm4pJiYoZT1uKTtmb3IodmFyIGk9XCJcIixvPXI7bzxlOysrbylpKz1WKHRbb10pO3JldHVybiBpfWZ1bmN0aW9uIFkodCxyLGUpe2Zvcih2YXIgbj10LnNsaWNlKHIsZSksaT1cIlwiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEModCxyLGUpe2lmKHQlMSE9PTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZih0K3I+ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gRCh0LHIsZSxuLGksbyl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihyPml8fHI8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihlK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gTyh0LHIsZSxuKXtyPDAmJihyPTY1NTM1K3IrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aC1lLDIpO2k8bzsrK2kpdFtlK2ldPShyJjI1NTw8OCoobj9pOjEtaSkpPj4+OCoobj9pOjEtaSl9ZnVuY3Rpb24gTCh0LHIsZSxuKXtyPDAmJihyPTQyOTQ5NjcyOTUrcisxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLWUsNCk7aTxvOysraSl0W2UraV09cj4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiBNKHQscixlLG4saSxvKXtpZihlK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE4odCxyLGUsbixpKXtyZXR1cm4gaXx8TSh0LHIsZSw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxLLndyaXRlKHQscixlLG4sMjMsNCksZSs0fWZ1bmN0aW9uIEYodCxyLGUsbixpKXtyZXR1cm4gaXx8TSh0LHIsZSw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLEsud3JpdGUodCxyLGUsbiw1Miw4KSxlKzh9ZnVuY3Rpb24gaih0KXtcbmlmKHQ9eih0KS5yZXBsYWNlKHR0LFwiXCIpLHQubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO3QubGVuZ3RoJTQhPT0wOyl0Kz1cIj1cIjtyZXR1cm4gdH1mdW5jdGlvbiB6KHQpe3JldHVybiB0LnRyaW0/dC50cmltKCk6dC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIFYodCl7cmV0dXJuIHQ8MTY/XCIwXCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gcSh0LHIpe3I9cnx8MS8wO2Zvcih2YXIgZSxuPXQubGVuZ3RoLGk9bnVsbCxvPVtdLGY9MDtmPG47KytmKXtpZihlPXQuY2hhckNvZGVBdChmKSxlPjU1Mjk1JiZlPDU3MzQ0KXtpZighaSl7aWYoZT41NjMxOSl7KHItPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGYrMT09PW4peyhyLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPWU7Y29udGludWV9aWYoZTw1NjMyMCl7KHItPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9ZTtjb250aW51ZX1lPShpLTU1Mjk2PDwxMHxlLTU2MzIwKSs2NTUzNn1lbHNlIGkmJihyLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwsZTwxMjgpe2lmKChyLT0xKTwwKWJyZWFrO28ucHVzaChlKX1lbHNlIGlmKGU8MjA0OCl7aWYoKHItPTIpPDApYnJlYWs7by5wdXNoKGU+PjZ8MTkyLDYzJmV8MTI4KX1lbHNlIGlmKGU8NjU1MzYpe2lmKChyLT0zKTwwKWJyZWFrO28ucHVzaChlPj4xMnwyMjQsZT4+NiY2M3wxMjgsNjMmZXwxMjgpfWVsc2V7aWYoIShlPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoci09NCk8MClicmVhaztvLnB1c2goZT4+MTh8MjQwLGU+PjEyJjYzfDEyOCxlPj42JjYzfDEyOCw2MyZlfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIFcodCl7Zm9yKHZhciByPVtdLGU9MDtlPHQubGVuZ3RoOysrZSlyLnB1c2goMjU1JnQuY2hhckNvZGVBdChlKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSih0LHIpe2Zvcih2YXIgZSxuLGksbz1bXSxmPTA7Zjx0Lmxlbmd0aCYmISgoci09Mik8MCk7KytmKWU9dC5jaGFyQ29kZUF0KGYpLG49ZT4+OCxpPWUlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gWCh0KXtyZXR1cm4gWi50b0J5dGVBcnJheShqKHQpKX1mdW5jdGlvbiBHKHQscixlLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK2U+PXIubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKXJbaStlXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIEgodCl7cmV0dXJuIHQhPT10fXZhciBaPXQoXCJiYXNlNjQtanNcIiksSz10KFwiaWVlZTc1NFwiKSxRPXQoXCJpc2FycmF5XCIpO2UuQnVmZmVyPUJ1ZmZlcixlLlNsb3dCdWZmZXI9eSxlLklOU1BFQ1RfTUFYX0JZVEVTPTUwLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PXIuVFlQRURfQVJSQVlfU1VQUE9SVD9yLlRZUEVEX0FSUkFZX1NVUFBPUlQ6bigpLGUua01heExlbmd0aD1pKCksQnVmZmVyLnBvb2xTaXplPTgxOTIsQnVmZmVyLl9hdWdtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fXz1CdWZmZXIucHJvdG90eXBlLHR9LEJ1ZmZlci5mcm9tPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gZihudWxsLHQscixlKX0sQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJihCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxCdWZmZXIuX19wcm90b19fPVVpbnQ4QXJyYXksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJkJ1ZmZlcltTeW1ib2wuc3BlY2llc109PT1CdWZmZXImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLEJ1ZmZlci5hbGxvYz1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIGEobnVsbCx0LHIsZSl9LEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gcyhudWxsLHQpfSxCdWZmZXIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiBzKG51bGwsdCl9LEJ1ZmZlci5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4hKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9LEJ1ZmZlci5jb21wYXJlPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KXx8IUJ1ZmZlci5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVyc1wiKTtpZih0PT09cilyZXR1cm4gMDtmb3IodmFyIGU9dC5sZW5ndGgsbj1yLmxlbmd0aCxpPTAsbz1NYXRoLm1pbihlLG4pO2k8bzsrK2kpaWYodFtpXSE9PXJbaV0pe2U9dFtpXSxuPXJbaV07YnJlYWt9cmV0dXJuIGU8bj8tMTpuPGU/MTowfSxCdWZmZXIuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEJ1ZmZlci5jb25jYXQ9ZnVuY3Rpb24odCxyKXtpZighUSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTt2YXIgZTtpZih2b2lkIDA9PT1yKWZvcihyPTAsZT0wO2U8dC5sZW5ndGg7KytlKXIrPXRbZV0ubGVuZ3RoO3ZhciBuPUJ1ZmZlci5hbGxvY1Vuc2FmZShyKSxpPTA7Zm9yKGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIG89dFtlXTtpZighQnVmZmVyLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSxCdWZmZXIuYnl0ZUxlbmd0aD12LEJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpO2Zvcih2YXIgcj0wO3I8dDtyKz0yKWIodGhpcyxyLHIrMSk7cmV0dXJuIHRoaXN9LEJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU0IT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpO2Zvcih2YXIgcj0wO3I8dDtyKz00KWIodGhpcyxyLHIrMyksYih0aGlzLHIrMSxyKzIpO3JldHVybiB0aGlzfSxCdWZmZXIucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IodmFyIHI9MDtyPHQ7cis9OCliKHRoaXMscixyKzcpLGIodGhpcyxyKzEscis2KSxiKHRoaXMscisyLHIrNSksYih0aGlzLHIrMyxyKzQpO3JldHVybiB0aGlzfSxCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9rKHRoaXMsMCx0KTpnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sQnVmZmVyLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1CdWZmZXIuY29tcGFyZSh0aGlzLHQpfSxCdWZmZXIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgdD1cIlwiLHI9ZS5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZyhcImhleFwiLDAscikubWF0Y2goLy57Mn0vZykuam9pbihcIiBcIiksdGhpcy5sZW5ndGg+ciYmKHQrPVwiIC4uLiBcIikpLFwiPEJ1ZmZlciBcIit0K1wiPlwifSxCdWZmZXIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxyLGUsbixpKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO2lmKHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWUmJihlPXQ/dC5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHI8MHx8ZT50Lmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKG4+PWkmJnI+PWUpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihyPj1lKXJldHVybiAxO2lmKHI+Pj49MCxlPj4+PTAsbj4+Pj0wLGk+Pj49MCx0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIG89aS1uLGY9ZS1yLHU9TWF0aC5taW4obyxmKSxhPXRoaXMuc2xpY2UobixpKSxzPXQuc2xpY2UocixlKSxjPTA7Yzx1OysrYylpZihhW2NdIT09c1tjXSl7bz1hW2NdLGY9c1tjXTticmVha31yZXR1cm4gbzxmPy0xOmY8bz8xOjB9LEJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxyLGUpe3JldHVybiB0aGlzLmluZGV4T2YodCxyLGUpIT09LTF9LEJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHcodGhpcyx0LHIsZSwhMCl9LEJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxyLGUpe3JldHVybiB3KHRoaXMsdCxyLGUsITEpfSxCdWZmZXIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQscixlLG4pe2lmKHZvaWQgMD09PXIpbj1cInV0ZjhcIixlPXRoaXMubGVuZ3RoLHI9MDtlbHNlIGlmKHZvaWQgMD09PWUmJlwic3RyaW5nXCI9PXR5cGVvZiByKW49cixlPXRoaXMubGVuZ3RoLHI9MDtlbHNle2lmKCFpc0Zpbml0ZShyKSl0aHJvdyBuZXcgRXJyb3IoXCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFwiKTtyPTB8cixpc0Zpbml0ZShlKT8oZT0wfGUsdm9pZCAwPT09biYmKG49XCJ1dGY4XCIpKToobj1lLGU9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1yO2lmKCh2b2lkIDA9PT1lfHxlPmkpJiYoZT1pKSx0Lmxlbmd0aD4wJiYoZTwwfHxyPDApfHxyPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7bnx8KG49XCJ1dGY4XCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlXCJoZXhcIjpyZXR1cm4gQSh0aGlzLHQscixlKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gbSh0aGlzLHQscixlKTtjYXNlXCJhc2NpaVwiOnJldHVybiB4KHRoaXMsdCxyLGUpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBCKHRoaXMsdCxyLGUpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBVKHRoaXMsdCxyLGUpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBQKHRoaXMsdCxyLGUpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7bj0oXCJcIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxCdWZmZXIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgJD00MDk2O0J1ZmZlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxyKXt2YXIgZT10aGlzLmxlbmd0aDt0PX5+dCxyPXZvaWQgMD09PXI/ZTp+fnIsdDwwPyh0Kz1lLHQ8MCYmKHQ9MCkpOnQ+ZSYmKHQ9ZSkscjwwPyhyKz1lLHI8MCYmKHI9MCkpOnI+ZSYmKHI9ZSkscjx0JiYocj10KTt2YXIgbjtpZihCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCluPXRoaXMuc3ViYXJyYXkodCxyKSxuLl9fcHJvdG9fXz1CdWZmZXIucHJvdG90eXBlO2Vsc2V7dmFyIGk9ci10O249bmV3IEJ1ZmZlcihpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbyluW29dPXRoaXNbbyt0XX1yZXR1cm4gbn0sQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQscixlKXt0PTB8dCxyPTB8cixlfHxDKHQscix0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLG89MDsrK288ciYmKGkqPTI1Nik7KW4rPXRoaXNbdCtvXSppO3JldHVybiBufSxCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxyLGUpe3Q9MHx0LHI9MHxyLGV8fEModCxyLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0Ky0tcl0saT0xO3I+MCYmKGkqPTI1Nik7KW4rPXRoaXNbdCstLXJdKmk7cmV0dXJuIG59LEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fEModCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LHIpe3JldHVybiByfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fEModCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gcnx8Qyh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fEModCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSxCdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LHIsZSl7dD0wfHQscj0wfHIsZXx8Qyh0LHIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxvPTA7KytvPHImJihpKj0yNTYpOyluKz10aGlzW3Qrb10qaTtyZXR1cm4gaSo9MTI4LG4+PWkmJihuLT1NYXRoLnBvdygyLDgqcikpLG59LEJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQscixlKXt0PTB8dCxyPTB8cixlfHxDKHQscix0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXIsaT0xLG89dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gaSo9MTI4LG8+PWkmJihvLT1NYXRoLnBvdygyLDgqcikpLG99LEJ1ZmZlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxyKXtyZXR1cm4gcnx8Qyh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPygyNTUtdGhpc1t0XSsxKSotMTp0aGlzW3RdfSxCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQscil7cnx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciBlPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZlPzQyOTQ5MDE3NjB8ZTplfSxCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQscil7cnx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciBlPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZlPzQyOTQ5MDE3NjB8ZTplfSxCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fEModCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LEJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gcnx8Qyh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LHIpe3JldHVybiByfHxDKHQsNCx0aGlzLmxlbmd0aCksSy5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LHIpe3JldHVybiByfHxDKHQsNCx0aGlzLmxlbmd0aCksSy5yZWFkKHRoaXMsdCwhMSwyMyw0KX0sQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gcnx8Qyh0LDgsdGhpcy5sZW5ndGgpLEsucmVhZCh0aGlzLHQsITAsNTIsOCl9LEJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fEModCw4LHRoaXMubGVuZ3RoKSxLLnJlYWQodGhpcyx0LCExLDUyLDgpfSxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQscixlLG4pe2lmKHQ9K3Qscj0wfHIsZT0wfGUsIW4pe3ZhciBpPU1hdGgucG93KDIsOCplKS0xO0QodGhpcyx0LHIsZSxpLDApfXZhciBvPTEsZj0wO2Zvcih0aGlzW3JdPTI1NSZ0OysrZjxlJiYobyo9MjU2KTspdGhpc1tyK2ZdPXQvbyYyNTU7cmV0dXJuIHIrZX0sQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LHIsZSxuKXtpZih0PSt0LHI9MHxyLGU9MHxlLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqZSktMTtEKHRoaXMsdCxyLGUsaSwwKX12YXIgbz1lLTEsZj0xO2Zvcih0aGlzW3Irb109MjU1JnQ7LS1vPj0wJiYoZio9MjU2KTspdGhpc1tyK29dPXQvZiYyNTU7cmV0dXJuIHIrZX0sQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdD0rdCxyPTB8cixlfHxEKHRoaXMsdCxyLDEsMjU1LDApLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUfHwodD1NYXRoLmZsb29yKHQpKSx0aGlzW3JdPTI1NSZ0LHIrMX0sQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdD0rdCxyPTB8cixlfHxEKHRoaXMsdCxyLDIsNjU1MzUsMCksQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JnQsdGhpc1tyKzFdPXQ+Pj44KTpPKHRoaXMsdCxyLCEwKSxyKzJ9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHQ9K3Qscj0wfHIsZXx8RCh0aGlzLHQsciwyLDY1NTM1LDApLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPXQ+Pj44LHRoaXNbcisxXT0yNTUmdCk6Tyh0aGlzLHQsciwhMSkscisyfSxCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxyLGUpe3JldHVybiB0PSt0LHI9MHxyLGV8fEQodGhpcyx0LHIsNCw0Mjk0OTY3Mjk1LDApLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3IrM109dD4+PjI0LHRoaXNbcisyXT10Pj4+MTYsdGhpc1tyKzFdPXQ+Pj44LHRoaXNbcl09MjU1JnQpOkwodGhpcyx0LHIsITApLHIrNH0sQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdD0rdCxyPTB8cixlfHxEKHRoaXMsdCxyLDQsNDI5NDk2NzI5NSwwKSxCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT10Pj4+MjQsdGhpc1tyKzFdPXQ+Pj4xNix0aGlzW3IrMl09dD4+PjgsdGhpc1tyKzNdPTI1NSZ0KTpMKHRoaXMsdCxyLCExKSxyKzR9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LHIsZSxuKXtpZih0PSt0LHI9MHxyLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqZS0xKTtEKHRoaXMsdCxyLGUsaS0xLC1pKX12YXIgbz0wLGY9MSx1PTA7Zm9yKHRoaXNbcl09MjU1JnQ7KytvPGUmJihmKj0yNTYpOyl0PDAmJjA9PT11JiYwIT09dGhpc1tyK28tMV0mJih1PTEpLHRoaXNbcitvXT0odC9mPj4wKS11JjI1NTtyZXR1cm4gcitlfSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24odCxyLGUsbil7aWYodD0rdCxyPTB8ciwhbil7dmFyIGk9TWF0aC5wb3coMiw4KmUtMSk7RCh0aGlzLHQscixlLGktMSwtaSl9dmFyIG89ZS0xLGY9MSx1PTA7Zm9yKHRoaXNbcitvXT0yNTUmdDstLW8+PTAmJihmKj0yNTYpOyl0PDAmJjA9PT11JiYwIT09dGhpc1tyK28rMV0mJih1PTEpLHRoaXNbcitvXT0odC9mPj4wKS11JjI1NTtyZXR1cm4gcitlfSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHQ9K3Qscj0wfHIsZXx8RCh0aGlzLHQsciwxLDEyNywtMTI4KSxCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHQ9TWF0aC5mbG9vcih0KSksdDwwJiYodD0yNTUrdCsxKSx0aGlzW3JdPTI1NSZ0LHIrMX0sQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24odCxyLGUpe3JldHVybiB0PSt0LHI9MHxyLGV8fEQodGhpcyx0LHIsMiwzMjc2NywtMzI3NjgpLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZ0LHRoaXNbcisxXT10Pj4+OCk6Tyh0aGlzLHQsciwhMCkscisyfSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHQ9K3Qscj0wfHIsZXx8RCh0aGlzLHQsciwyLDMyNzY3LC0zMjc2OCksQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09dD4+PjgsdGhpc1tyKzFdPTI1NSZ0KTpPKHRoaXMsdCxyLCExKSxyKzJ9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gdD0rdCxyPTB8cixlfHxEKHRoaXMsdCxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JnQsdGhpc1tyKzFdPXQ+Pj44LHRoaXNbcisyXT10Pj4+MTYsdGhpc1tyKzNdPXQ+Pj4yNCk6TCh0aGlzLHQsciwhMCkscis0fSxCdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIHQ9K3Qscj0wfHIsZXx8RCh0aGlzLHQsciw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPXQ+Pj4yNCx0aGlzW3IrMV09dD4+PjE2LHRoaXNbcisyXT10Pj4+OCx0aGlzW3IrM109MjU1JnQpOkwodGhpcyx0LHIsITEpLHIrNH0sQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odCxyLGUpe3JldHVybiBOKHRoaXMsdCxyLCEwLGUpfSxCdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIE4odGhpcyx0LHIsITEsZSl9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIEYodGhpcyx0LHIsITAsZSl9LEJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0LHIsZSl7cmV0dXJuIEYodGhpcyx0LHIsITEsZSl9LEJ1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0LHIsZSxuKXtpZihlfHwoZT0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLHI+PXQubGVuZ3RoJiYocj10Lmxlbmd0aCkscnx8KHI9MCksbj4wJiZuPGUmJihuPWUpLG49PT1lKXJldHVybiAwO2lmKDA9PT10Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoZTwwfHxlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLHQubGVuZ3RoLXI8bi1lJiYobj10Lmxlbmd0aC1yK2UpO3ZhciBpLG89bi1lO2lmKHRoaXM9PT10JiZlPHImJnI8bilmb3IoaT1vLTE7aT49MDstLWkpdFtpK3JdPXRoaXNbaStlXTtlbHNlIGlmKG88MWUzfHwhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKXRbaStyXT10aGlzW2krZV07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkoZSxlK28pLHIpO3JldHVybiBvfSxCdWZmZXIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxyLGUsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPXIscj0wLGU9dGhpcy5sZW5ndGgpOlwic3RyaW5nXCI9PXR5cGVvZiBlJiYobj1lLGU9dGhpcy5sZW5ndGgpLDE9PT10Lmxlbmd0aCl7dmFyIGk9dC5jaGFyQ29kZUF0KDApO2k8MjU2JiYodD1pKX1pZih2b2lkIDAhPT1uJiZcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIUJ1ZmZlci5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIituKX1lbHNlXCJudW1iZXJcIj09dHlwZW9mIHQmJih0PTI1NSZ0KTtpZihyPDB8fHRoaXMubGVuZ3RoPHJ8fHRoaXMubGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYoZTw9cilyZXR1cm4gdGhpcztyPj4+PTAsZT12b2lkIDA9PT1lP3RoaXMubGVuZ3RoOmU+Pj4wLHR8fCh0PTApO3ZhciBvO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KWZvcihvPXI7bzxlOysrbyl0aGlzW29dPXQ7ZWxzZXt2YXIgZj1CdWZmZXIuaXNCdWZmZXIodCk/dDpxKG5ldyBCdWZmZXIodCxuKS50b1N0cmluZygpKSx1PWYubGVuZ3RoO2ZvcihvPTA7bzxlLXI7KytvKXRoaXNbbytyXT1mW28ldV19cmV0dXJuIHRoaXN9O3ZhciB0dD0vW14rXFwvMC05QS1aYS16LV9dL2d9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcImJhc2U2NC1qc1wiOjMwLGllZWU3NTQ6MzIsaXNhcnJheTozNH1dLDMwOltmdW5jdGlvbih0LHIsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt2YXIgcj10Lmxlbmd0aDtpZihyJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3JldHVyblwiPVwiPT09dFtyLTJdPzI6XCI9XCI9PT10W3ItMV0/MTowfWZ1bmN0aW9uIGkodCl7cmV0dXJuIDMqdC5sZW5ndGgvNC1uKHQpfWZ1bmN0aW9uIG8odCl7dmFyIHIsZSxpLG8sZix1LGE9dC5sZW5ndGg7Zj1uKHQpLHU9bmV3IGgoMyphLzQtZiksaT1mPjA/YS00OmE7dmFyIHM9MDtmb3Iocj0wLGU9MDtyPGk7cis9NCxlKz0zKW89Y1t0LmNoYXJDb2RlQXQocildPDwxOHxjW3QuY2hhckNvZGVBdChyKzEpXTw8MTJ8Y1t0LmNoYXJDb2RlQXQocisyKV08PDZ8Y1t0LmNoYXJDb2RlQXQociszKV0sdVtzKytdPW8+PjE2JjI1NSx1W3MrK109bz4+OCYyNTUsdVtzKytdPTI1NSZvO3JldHVybiAyPT09Zj8obz1jW3QuY2hhckNvZGVBdChyKV08PDJ8Y1t0LmNoYXJDb2RlQXQocisxKV0+PjQsdVtzKytdPTI1NSZvKToxPT09ZiYmKG89Y1t0LmNoYXJDb2RlQXQocildPDwxMHxjW3QuY2hhckNvZGVBdChyKzEpXTw8NHxjW3QuY2hhckNvZGVBdChyKzIpXT4+Mix1W3MrK109bz4+OCYyNTUsdVtzKytdPTI1NSZvKSx1fWZ1bmN0aW9uIGYodCl7cmV0dXJuIHNbdD4+MTgmNjNdK3NbdD4+MTImNjNdK3NbdD4+NiY2M10rc1s2MyZ0XX1mdW5jdGlvbiB1KHQscixlKXtmb3IodmFyIG4saT1bXSxvPXI7bzxlO28rPTMpbj0odFtvXTw8MTYpKyh0W28rMV08PDgpK3RbbysyXSxpLnB1c2goZihuKSk7cmV0dXJuIGkuam9pbihcIlwiKX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgcixlPXQubGVuZ3RoLG49ZSUzLGk9XCJcIixvPVtdLGY9MTYzODMsYT0wLGM9ZS1uO2E8YzthKz1mKW8ucHVzaCh1KHQsYSxhK2Y+Yz9jOmErZikpO3JldHVybiAxPT09bj8ocj10W2UtMV0saSs9c1tyPj4yXSxpKz1zW3I8PDQmNjNdLGkrPVwiPT1cIik6Mj09PW4mJihyPSh0W2UtMl08PDgpK3RbZS0xXSxpKz1zW3I+PjEwXSxpKz1zW3I+PjQmNjNdLGkrPXNbcjw8MiY2M10saSs9XCI9XCIpLG8ucHVzaChpKSxvLmpvaW4oXCJcIil9ZS5ieXRlTGVuZ3RoPWksZS50b0J5dGVBcnJheT1vLGUuZnJvbUJ5dGVBcnJheT1hO2Zvcih2YXIgcz1bXSxjPVtdLGg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxsPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLHA9MCxkPWwubGVuZ3RoO3A8ZDsrK3Apc1twXT1sW3BdLGNbbC5jaGFyQ29kZUF0KHApXT1wO2NbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsY1tcIl9cIi5jaGFyQ29kZUF0KDApXT02M30se31dLDMxOltmdW5jdGlvbih0LHIsZSl7ZnVuY3Rpb24gbigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbn0hZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIHIgaW4gcyl0W3JdPXNbcl07cmV0dXJuIHR9ZnVuY3Rpb24gbih0LHIpe3JldHVybiB1KHRoaXMsdCkucHVzaChyKSx0aGlzfWZ1bmN0aW9uIGkodCxyKXtmdW5jdGlvbiBlKCl7by5jYWxsKG4sdCxlKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgbj10aGlzO3JldHVybiBlLm9yaWdpbmFsTGlzdGVuZXI9cix1KG4sdCkucHVzaChlKSxufWZ1bmN0aW9uIG8odCxyKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0IT09ciYmdC5vcmlnaW5hbExpc3RlbmVyIT09cn12YXIgbixpPXRoaXM7aWYoYXJndW1lbnRzLmxlbmd0aCl7aWYocil7aWYobj11KGksdCwhMCkpe2lmKG49bi5maWx0ZXIoZSksIW4ubGVuZ3RoKXJldHVybiBvLmNhbGwoaSx0KTtpW2FdW3RdPW59fWVsc2UgaWYobj1pW2FdLG4mJihkZWxldGUgblt0XSwhT2JqZWN0LmtleXMobikubGVuZ3RoKSlyZXR1cm4gby5jYWxsKGkpfWVsc2UgZGVsZXRlIGlbYV07cmV0dXJuIGl9ZnVuY3Rpb24gZih0LHIpe2Z1bmN0aW9uIGUodCl7dC5jYWxsKG8pfWZ1bmN0aW9uIG4odCl7dC5jYWxsKG8scil9ZnVuY3Rpb24gaSh0KXt0LmFwcGx5KG8scyl9dmFyIG89dGhpcyxmPXUobyx0LCEwKTtpZighZilyZXR1cm4hMTt2YXIgYT1hcmd1bWVudHMubGVuZ3RoO2lmKDE9PT1hKWYuZm9yRWFjaChlKTtlbHNlIGlmKDI9PT1hKWYuZm9yRWFjaChuKTtlbHNle3ZhciBzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmLmZvckVhY2goaSl9cmV0dXJuISFmLmxlbmd0aH1mdW5jdGlvbiB1KHQscixlKXtpZighZXx8dFthXSl7dmFyIG49dFthXXx8KHRbYV09e30pO3JldHVybiBuW3JdfHwobltyXT1bXSl9fVwidW5kZWZpbmVkXCIhPXR5cGVvZiByJiYoci5leHBvcnRzPXQpO3ZhciBhPVwibGlzdGVuZXJzXCIscz17b246bixvbmNlOmksb2ZmOm8sZW1pdDpmfTtlKHQucHJvdG90eXBlKSx0Lm1peGluPWV9KG4pfSx7fV0sMzI6W2Z1bmN0aW9uKHQscixlKXtlLnJlYWQ9ZnVuY3Rpb24odCxyLGUsbixpKXt2YXIgbyxmLHU9OCppLW4tMSxhPSgxPDx1KS0xLHM9YT4+MSxjPS03LGg9ZT9pLTE6MCxsPWU/LTE6MSxwPXRbcitoXTtmb3IoaCs9bCxvPXAmKDE8PC1jKS0xLHA+Pj0tYyxjKz11O2M+MDtvPTI1NipvK3RbcitoXSxoKz1sLGMtPTgpO2ZvcihmPW8mKDE8PC1jKS0xLG8+Pj0tYyxjKz1uO2M+MDtmPTI1NipmK3RbcitoXSxoKz1sLGMtPTgpO2lmKDA9PT1vKW89MS1zO2Vsc2V7aWYobz09PWEpcmV0dXJuIGY/TmFOOihwPy0xOjEpKigxLzApO2YrPU1hdGgucG93KDIsbiksby09c31yZXR1cm4ocD8tMToxKSpmKk1hdGgucG93KDIsby1uKX0sZS53cml0ZT1mdW5jdGlvbih0LHIsZSxuLGksbyl7dmFyIGYsdSxhLHM9OCpvLWktMSxjPSgxPDxzKS0xLGg9Yz4+MSxsPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6by0xLGQ9bj8xOi0xLHk9cjwwfHwwPT09ciYmMS9yPDA/MTowO2ZvcihyPU1hdGguYWJzKHIpLGlzTmFOKHIpfHxyPT09MS8wPyh1PWlzTmFOKHIpPzE6MCxmPWMpOihmPU1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjIpLHIqKGE9TWF0aC5wb3coMiwtZikpPDEmJihmLS0sYSo9Mikscis9ZitoPj0xP2wvYTpsKk1hdGgucG93KDIsMS1oKSxyKmE+PTImJihmKyssYS89MiksZitoPj1jPyh1PTAsZj1jKTpmK2g+PTE/KHU9KHIqYS0xKSpNYXRoLnBvdygyLGkpLGYrPWgpOih1PXIqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSksZj0wKSk7aT49ODt0W2UrcF09MjU1JnUscCs9ZCx1Lz0yNTYsaS09OCk7Zm9yKGY9Zjw8aXx1LHMrPWk7cz4wO3RbZStwXT0yNTUmZixwKz1kLGYvPTI1NixzLT04KTt0W2UrcC1kXXw9MTI4Knl9fSx7fV0sMzM6W2Z1bmN0aW9uKHQscixlKXsoZnVuY3Rpb24oQnVmZmVyKXt2YXIgdCxyLG4saTshZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbyh0LHIsbil7ZnVuY3Rpb24gaSh0LHIsZSxuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dih0aGlzLHQscixlLG4pOm5ldyBpKHQscixlLG4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuISghdHx8IXRbRl0pfWZ1bmN0aW9uIHYodCxyLGUsbixpKXtpZihFJiZBJiYociBpbnN0YW5jZW9mIEEmJihyPW5ldyBFKHIpKSxuIGluc3RhbmNlb2YgQSYmKG49bmV3IEUobikpKSwhKHJ8fGV8fG58fGcpKXJldHVybiB2b2lkKHQuYnVmZmVyPWgobSwwKSk7aWYoIXMocixlKSl7dmFyIG89Z3x8QXJyYXk7aT1lLG49cixlPTAscj1uZXcgbyg4KX10LmJ1ZmZlcj1yLHQub2Zmc2V0PWV8PTAsYiE9PXR5cGVvZiBuJiYoXCJzdHJpbmdcIj09dHlwZW9mIG4/eChyLGUsbixpfHwxMCk6cyhuLGkpP2MocixlLG4saSk6XCJudW1iZXJcIj09dHlwZW9mIGk/KGsocixlK1QsbiksayhyLGUrUyxpKSk6bj4wP08ocixlLG4pOm48MD9MKHIsZSxuKTpjKHIsZSxtLDApKX1mdW5jdGlvbiB4KHQscixlLG4pe3ZhciBpPTAsbz1lLmxlbmd0aCxmPTAsdT0wO1wiLVwiPT09ZVswXSYmaSsrO2Zvcih2YXIgYT1pO2k8bzspe3ZhciBzPXBhcnNlSW50KGVbaSsrXSxuKTtpZighKHM+PTApKWJyZWFrO3U9dSpuK3MsZj1mKm4rTWF0aC5mbG9vcih1L0IpLHUlPUJ9YSYmKGY9fmYsdT91PUItdTpmKyspLGsodCxyK1QsZiksayh0LHIrUyx1KX1mdW5jdGlvbiBQKCl7dmFyIHQ9dGhpcy5idWZmZXIscj10aGlzLm9mZnNldCxlPV8odCxyK1QpLGk9Xyh0LHIrUyk7cmV0dXJuIG58fChlfD0wKSxlP2UqQitpOml9ZnVuY3Rpb24gUih0KXt2YXIgcj10aGlzLmJ1ZmZlcixlPXRoaXMub2Zmc2V0LGk9XyhyLGUrVCksbz1fKHIsZStTKSxmPVwiXCIsdT0hbiYmMjE0NzQ4MzY0OCZpO2Zvcih1JiYoaT1+aSxvPUItbyksdD10fHwxMDs7KXt2YXIgYT1pJXQqQitvO2lmKGk9TWF0aC5mbG9vcihpL3QpLG89TWF0aC5mbG9vcihhL3QpLGY9KGEldCkudG9TdHJpbmcodCkrZiwhaSYmIW8pYnJlYWt9cmV0dXJuIHUmJihmPVwiLVwiK2YpLGZ9ZnVuY3Rpb24gayh0LHIsZSl7dFtyK0RdPTI1NSZlLGU+Pj04LHRbcitDXT0yNTUmZSxlPj49OCx0W3IrWV09MjU1JmUsZT4+PTgsdFtyK0ldPTI1NSZlfWZ1bmN0aW9uIF8odCxyKXtyZXR1cm4gdFtyK0ldKlUrKHRbcitZXTw8MTYpKyh0W3IrQ108PDgpK3RbcitEXX12YXIgVD1yPzA6NCxTPXI/NDowLEk9cj8wOjMsWT1yPzE6MixDPXI/MjoxLEQ9cj8zOjAsTz1yP2w6ZCxMPXI/cDp5LE09aS5wcm90b3R5cGUsTj1cImlzXCIrdCxGPVwiX1wiK047cmV0dXJuIE0uYnVmZmVyPXZvaWQgMCxNLm9mZnNldD0wLE1bRl09ITAsTS50b051bWJlcj1QLE0udG9TdHJpbmc9UixNLnRvSlNPTj1QLE0udG9BcnJheT1mLHcmJihNLnRvQnVmZmVyPXUpLEUmJihNLnRvQXJyYXlCdWZmZXI9YSksaVtOXT1vLGVbdF09aSxpfWZ1bmN0aW9uIGYodCl7dmFyIHI9dGhpcy5idWZmZXIsZT10aGlzLm9mZnNldDtyZXR1cm4gZz1udWxsLHQhPT0hMSYmMD09PWUmJjg9PT1yLmxlbmd0aCYmeChyKT9yOmgocixlKX1mdW5jdGlvbiB1KHQpe3ZhciByPXRoaXMuYnVmZmVyLGU9dGhpcy5vZmZzZXQ7aWYoZz13LHQhPT0hMSYmMD09PWUmJjg9PT1yLmxlbmd0aCYmQnVmZmVyLmlzQnVmZmVyKHIpKXJldHVybiByO3ZhciBuPW5ldyB3KDgpO3JldHVybiBjKG4sMCxyLGUpLG59ZnVuY3Rpb24gYSh0KXt2YXIgcj10aGlzLmJ1ZmZlcixlPXRoaXMub2Zmc2V0LG49ci5idWZmZXI7aWYoZz1FLHQhPT0hMSYmMD09PWUmJm4gaW5zdGFuY2VvZiBBJiY4PT09bi5ieXRlTGVuZ3RoKXJldHVybiBuO3ZhciBpPW5ldyBFKDgpO3JldHVybiBjKGksMCxyLGUpLGkuYnVmZmVyfWZ1bmN0aW9uIHModCxyKXt2YXIgZT10JiZ0Lmxlbmd0aDtyZXR1cm4gcnw9MCxlJiZyKzg8PWUmJlwic3RyaW5nXCIhPXR5cGVvZiB0W3JdfWZ1bmN0aW9uIGModCxyLGUsbil7cnw9MCxufD0wO2Zvcih2YXIgaT0wO2k8ODtpKyspdFtyKytdPTI1NSZlW24rK119ZnVuY3Rpb24gaCh0LHIpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LHIscis4KX1mdW5jdGlvbiBsKHQscixlKXtmb3IodmFyIG49cis4O24+cjspdFstLW5dPTI1NSZlLGUvPTI1Nn1mdW5jdGlvbiBwKHQscixlKXt2YXIgbj1yKzg7Zm9yKGUrKztuPnI7KXRbLS1uXT0yNTUmLWVeMjU1LGUvPTI1Nn1mdW5jdGlvbiBkKHQscixlKXtmb3IodmFyIG49cis4O3I8bjspdFtyKytdPTI1NSZlLGUvPTI1Nn1mdW5jdGlvbiB5KHQscixlKXt2YXIgbj1yKzg7Zm9yKGUrKztyPG47KXRbcisrXT0yNTUmLWVeMjU1LGUvPTI1Nn1mdW5jdGlvbiB2KHQpe3JldHVybiEhdCYmXCJbb2JqZWN0IEFycmF5XVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9dmFyIGcsYj1cInVuZGVmaW5lZFwiLHc9YiE9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlcixFPWIhPT10eXBlb2YgVWludDhBcnJheSYmVWludDhBcnJheSxBPWIhPT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLG09WzAsMCwwLDAsMCwwLDAsMF0seD1BcnJheS5pc0FycmF5fHx2LEI9NDI5NDk2NzI5NixVPTE2Nzc3MjE2O3Q9byhcIlVpbnQ2NEJFXCIsITAsITApLHI9byhcIkludDY0QkVcIiwhMCwhMSksbj1vKFwiVWludDY0TEVcIiwhMSwhMCksaT1vKFwiSW50NjRMRVwiLCExLCExKX0oXCJvYmplY3RcIj09dHlwZW9mIGUmJlwic3RyaW5nXCIhPXR5cGVvZiBlLm5vZGVOYW1lP2U6dGhpc3x8e30pfSkuY2FsbCh0aGlzLHQoXCJidWZmZXJcIikuQnVmZmVyKX0se2J1ZmZlcjoyOX1dLDM0OltmdW5jdGlvbih0LHIsZSl7dmFyIG49e30udG9TdHJpbmc7ci5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09bi5jYWxsKHQpfX0se31dfSx7fSxbMV0pKDEpfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L21zZ3BhY2stbGl0ZS9kaXN0L21zZ3BhY2subWluLmpzXG4vLyBtb2R1bGUgaWQgPSAxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==");
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
eval("const MsgpackConnection = __webpack_require__(12)\nconst Uint64 = __webpack_require__(2)\nconst Transaction = __webpack_require__(14)\nconst Ref = __webpack_require__(4)\nconst {TransactionRetryNeeded, TransactionRejectedError} = __webpack_require__(1)\nconst ObjectCache = __webpack_require__(13)\nconst {binaryToHex, asPromise} = __webpack_require__(0)\n\nlet nextConnectionNumber = 0\n\n/**\n * GosConnections represent the connection to the GoshawkDB.\n *\n * They should be acquired through the static {@link GoshawkDb.connect} function.\n */\nclass Connection {\n\t/** @private */\n\tconstructor(url) {\n\t\t/** @private used in logging to distinguish different connections */\n\t\tthis.connectionId = (nextConnectionNumber++)\n\t\t/** @private */\n\t\tthis.link = new MsgpackConnection(url, (\"000\" + this.connectionId).substr(-3))\n\n\t\t/**\n\t\t * The product and version information we sent to the server during the initial connection handshake.\n\t\t * @type {{Product: string, Version: string}}\n\t\t */\n\t\tthis.clientInfo = {Product: \"GoshawkDB\", Version: \"dev\"}\n\n\t\t/**\n\t\t * The product and version information we receive from the server during the initial handshake.\n\t\t * Will always be set after the promise returned by connect has resolved successfully. May be null otherwise.\n\t\t * @type {?{Product: string, Version: string}}\n\t\t */\n\t\tthis.serverInfo = null\n\n\t\t/**\n\t\t * The namespace that the server assigns to this client.\n\t\t * Will always be set after the promise returned by connect has resolved successfully. May be null otherwise.\n\t\t * @type {?ArrayBuffer}\n\t\t */\n\t\tthis.namespace = null\n\n\t\t/**\n\t\t * The roots that this client has access to.\n\t\t * Provided by the server during handshake.\n\t\t * Will always be set after the promise returned by connect has resolved successfully. May be empty otherwise.\n\t\t * @type {{string: Ref}}\n\t\t */\n\t\tthis.roots = {}\n\n\t\t/** @private the function to deal with incoming messages */\n\t\tthis.messageHandler = null\n\t\t/** @private the top level cache that stores all the values and refs for objects the client knows about. */\n\t\tthis.cache = null\n\n\t\t// we control the first 8 bytes of transaction ids and new object ids (used during creation).\n\t\t// the namespace is appended to them when actually sent to the server. We can't use normal js\n\t\t// numbers as javascript doesn't support 64 integers. The only actual operation we need is 'increment'.\n\t\t/** @private */\n\t\tthis.nextTransactionId = Uint64.from(0, 0, 0, 0, 0, 0, 0, 0)\n\n\t\t/** @private the queue of transactions.*/\n\t\tthis.transactions = []\n\t\t/** @private the transaction currently being processed.*/\n\t\tthis.currentTransaction = null\n\t\t/** @private the timeout handle or null if no timeout to process a transaction is waiting*/\n\t\tthis.scheduledCallback = null\n\t}\n\n\t/**\n\t * Connects to the server. If running in node, you will need to provide connectionOptions that include the client\n\t * certificate and key.\n\t *\n\t * @return {Promise<Connection, Error>}\n\t */\n\tconnect(connectionOptions) {\n\t\tconst serverHelloHandler = (message) => {\n\t\t\t// TODO? : a check could go here to ensure that the server version matches our version (from this.clientInfo.Version).\n\t\t\tthis.serverInfo = message\n\t\t\tthis.messageHandler = rootsHandler\n\t\t}\n\n\t\tconst rootsHandler = (message) => {\n\t\t\t// populate the roots\n\t\t\tthis.roots = {}\n\t\t\tfor (const root of message.Roots) {\n\t\t\t\tthis.roots[root.Name] = Ref.fromMessage(root)\n\t\t\t}\n\t\t\t// set the namespace\n\t\t\tthis.namespace = message.Namespace\n\n\t\t\t// now we're properly connected\n\t\t\tthis.messageHandler = null\n\t\t\tthis.cache = new ObjectCache(this.namespace)\n\t\t\tconsole.info(`Connection ${this.connectionId}: Connected to goshawkdb.`, this.serverInfo, this.clientInfo, this.namespace, this.roots)\n\t\t\tthis._onConnectionNegotiated(this)\n\t\t}\n\n\t\t// This promise should resolve with a working, setup connection if the connection makes its way to a fully\n\t\t// negotiated connection: i.e. it connects, it swaps info, it loads the roots and the namespace and initialises the\n\t\t// relevant state.\n\t\t// If anything happens to disrupt this process before it completes, this promise will reject.\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis._onConnectionNegotiated = resolve\n\t\t\tthis.messageHandler = serverHelloHandler\n\t\t\tthis.link.connect(\n\t\t\t\t// on message\n\t\t\t\t(data) => {\n\t\t\t\t\tif (this.messageHandler) {\n\t\t\t\t\t\tthis.messageHandler(data)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(`Connection ${this.connectionId}: No handler found for message`, data)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// on end - if the connection stops for any reason (error, or deliberate) before it resolves then it rejects.\n\t\t\t\t(e) => reject(e),\n\t\t\t\t// on open we start the handshake by sending the client info.\n\t\t\t\t() => this.link.send(this.clientInfo),\n\t\t\t\tconnectionOptions\n\t\t\t)\n\t\t})\n\t}\n\n\t/**\n\t * Queues a transaction for running, then ensures that transaction processing is happening.\n\t * The returned promise resolves with the value returned by the fn once the transaction has committed. The fn may be\n\t * run multiple times and so should avoid side effects.\n\t * fn may be an asynchronous or a synchronous function.\n\t *\n\t * @param {function(txn: Transaction): {*|Promise<*, Error>}} fn the transaction function. This function may be run multiple times and should rethrow any TransactionRetryNeeded exceptions.\n\t * @returns {Promise<*, Error>} a promise that resolves to the result of the transaction function once the transaction submits or an error if it cannot.\n \t */\n\ttransact(fn) {\n\t\tif (fn instanceof Function === false) {\n\t\t\tthrow new TypeError(`Connection ${this.connectionId}: Transaction argument must be a function, was ${String(fn)}`)\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.transactions.push(new Transaction(fn, {onSuccess: resolve, onFail: reject}, this.roots, this.namespace, this.cache))\n\t\t\tthis.scheduleNextTransaction(false)\n\t\t})\n\t}\n\n\t/**\n\t * Closes the underlying link.\n\t */\n\tclose() {\n\t\tthis.link.close()\n\t}\n\n\t// private api\n\n\t/** @private\n\t * Actually runs the next queued transaction.\n\t */\n\texecuteNextTransaction() {\n\t\tif (this.currentTransaction != null) {\n\t\t\t// we're currently processing a transaction, exit without doing anything.\n\t\t\treturn\n\t\t}\n\n\t\tconst currentTransaction = this.currentTransaction = this.transactions.shift()\n\t\tconst txnIdWithNamespace = this.nextTransactionId.concat(this.namespace)\n\n\t\tconst succeed = (finalId, transactionResult) => {\n\t\t\tif (finalId) {\n\t\t\t\tcurrentTransaction.promoteCache(finalId)\n\t\t\t}\n\t\t\tcurrentTransaction.onSuccess(transactionResult)\n\t\t\tthis.scheduleNextTransaction(true)\n\t\t}\n\t\tconst retry = () => {\n\t\t\tcurrentTransaction.reset()\n\t\t\tthis.transactions.unshift(currentTransaction)\n\t\t\tthis.scheduleNextTransaction(true)\n\t\t}\n\t\tconst fail = (err) => {\n\t\t\tcurrentTransaction.onFail(err)\n\t\t\tthis.scheduleNextTransaction(true)\n\t\t}\n\t\tconst sendTransaction = (result) => {\n\t\t\tconst transactionMessage = currentTransaction.toMessage(txnIdWithNamespace)\n\t\t\tif (transactionMessage.ClientTxnSubmission.Actions.length > 0) {\n\t\t\t\tthis.link.request(transactionMessage)\n\t\t\t\t\t.then((response) => {\n\t\t\t\t\t\tthis.updateFromTransactionResponse(response)\n\t\t\t\t\t\tconst outcome = response.ClientTxnOutcome\n\t\t\t\t\t\tif (outcome.Commit) {\n\t\t\t\t\t\t\tsucceed(outcome.FinalId, result)\n\t\t\t\t\t\t} else if (outcome.Error != \"\") {\n\t\t\t\t\t\t\tfail(new TransactionRejectedError(outcome.Error))\n\t\t\t\t\t\t} else if (outcome.Abort) {\n\t\t\t\t\t\t\tretry()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfail(\"Unknown response message \" + JSON.stringify(outcome))\n\t\t\t\t\t\t}\n\t\t\t\t\t}).catch(fail)\n\t\t\t} else {\n\t\t\t\tsucceed(undefined, result)\n\t\t\t}\n\t\t}\n\n\t\t// we use asPromise, since the result of running fn might be a Promise.\n\t\tasPromise(() => {\n\t\t\treturn currentTransaction.fn(currentTransaction)\n\t\t}).catch( (e) => {\n\t\t\tif (e instanceof TransactionRetryNeeded === false) {\n\t\t\t\tthrow e\n\t\t\t}\n\t\t}).then(sendTransaction, fail)\n\t}\n\n\t/** @private\n\t * Updates the top level connection cache and counters based on a response from the server.\n\t * @param response the msgpack response.\n\t */\n\tupdateFromTransactionResponse(response) {\n\t\t// Responses contain a final transaction id. We take the first 8 bytes and increment it.\n\t\tthis.nextTransactionId = Uint64.fromBinary(response.ClientTxnOutcome.FinalId).inc()\n\t\t// If we received an Abort message, then we may also have received some cache update instructions.\n\t\tif (response.ClientTxnOutcome.Abort) {\n\t\t\tfor (let update of response.ClientTxnOutcome.Abort) {\n\t\t\t\tconst otherTxnId = update.Version.buffer\n\t\t\t\tfor (let action of update.Actions) {\n\t\t\t\t\tconst id = action.VarId\n\t\t\t\t\tif (action.Delete) {\n\t\t\t\t\t\tconsole.debug(`Connection ${this.connectionId}: Removing ${binaryToHex(id)} from cache.`)\n\t\t\t\t\t\tthis.cache.remove(id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst writeData = action.Write || action.Create\n\t\t\t\t\t\tif (writeData) {\n\t\t\t\t\t\t\tthis.cache.get(id).update(otherTxnId, writeData.Value.buffer, writeData.References.map(Ref.fromMessage))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @private\n\t * If there is no transaction currently processing and we haven't scheduled one\n\t * and there is a transaction waiting to be processed, then schedule it.\n\t * @param {boolean} clearCurrentTransaction if true, this will first clear the current transaction.\n\t */\n\tscheduleNextTransaction(clearCurrentTransaction) {\n\t\tif (clearCurrentTransaction) {\n\t\t\tthis.currentTransaction = null\n\t\t}\n\t\tif (this.scheduledCallback == null && this.currentTransaction == null && this.transactions.length > 0) {\n\t\t\tthis.scheduledCallback = setTimeout(() => {\n\t\t\t\tthis.scheduledCallback = null\n\t\t\t\tthis.executeNextTransaction()\n\t\t\t}, 0)\n\t\t}\n\t}\n}\n\nmodule.exports = Connection//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi5qcz9hN2ZkIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE1zZ3BhY2tDb25uZWN0aW9uID0gcmVxdWlyZSgnLi9tc2dwYWNrLWNvbm5lY3Rpb24nKVxuY29uc3QgVWludDY0ID0gcmVxdWlyZSgnLi91aW50NjQnKVxuY29uc3QgVHJhbnNhY3Rpb24gPSByZXF1aXJlKCcuL3RyYW5zYWN0aW9uJylcbmNvbnN0IFJlZiA9IHJlcXVpcmUoJy4vcmVmJylcbmNvbnN0IHtUcmFuc2FjdGlvblJldHJ5TmVlZGVkLCBUcmFuc2FjdGlvblJlamVjdGVkRXJyb3J9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgT2JqZWN0Q2FjaGUgPSByZXF1aXJlKCcuL29iamVjdGNhY2hlJylcbmNvbnN0IHtiaW5hcnlUb0hleCwgYXNQcm9taXNlfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5sZXQgbmV4dENvbm5lY3Rpb25OdW1iZXIgPSAwXG5cbi8qKlxuICogR29zQ29ubmVjdGlvbnMgcmVwcmVzZW50IHRoZSBjb25uZWN0aW9uIHRvIHRoZSBHb3NoYXdrREIuXG4gKlxuICogVGhleSBzaG91bGQgYmUgYWNxdWlyZWQgdGhyb3VnaCB0aGUgc3RhdGljIHtAbGluayBHb3NoYXdrRGIuY29ubmVjdH0gZnVuY3Rpb24uXG4gKi9cbmNsYXNzIENvbm5lY3Rpb24ge1xuXHQvKiogQHByaXZhdGUgKi9cblx0Y29uc3RydWN0b3IodXJsKSB7XG5cdFx0LyoqIEBwcml2YXRlIHVzZWQgaW4gbG9nZ2luZyB0byBkaXN0aW5ndWlzaCBkaWZmZXJlbnQgY29ubmVjdGlvbnMgKi9cblx0XHR0aGlzLmNvbm5lY3Rpb25JZCA9IChuZXh0Q29ubmVjdGlvbk51bWJlcisrKVxuXHRcdC8qKiBAcHJpdmF0ZSAqL1xuXHRcdHRoaXMubGluayA9IG5ldyBNc2dwYWNrQ29ubmVjdGlvbih1cmwsIChcIjAwMFwiICsgdGhpcy5jb25uZWN0aW9uSWQpLnN1YnN0cigtMykpXG5cblx0XHQvKipcblx0XHQgKiBUaGUgcHJvZHVjdCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiB3ZSBzZW50IHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gaGFuZHNoYWtlLlxuXHRcdCAqIEB0eXBlIHt7UHJvZHVjdDogc3RyaW5nLCBWZXJzaW9uOiBzdHJpbmd9fVxuXHRcdCAqL1xuXHRcdHRoaXMuY2xpZW50SW5mbyA9IHtQcm9kdWN0OiBcIkdvc2hhd2tEQlwiLCBWZXJzaW9uOiBcImRldlwifVxuXG5cdFx0LyoqXG5cdFx0ICogVGhlIHByb2R1Y3QgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gd2UgcmVjZWl2ZSBmcm9tIHRoZSBzZXJ2ZXIgZHVyaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZS5cblx0XHQgKiBXaWxsIGFsd2F5cyBiZSBzZXQgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgY29ubmVjdCBoYXMgcmVzb2x2ZWQgc3VjY2Vzc2Z1bGx5LiAgTWF5IGJlIG51bGwgb3RoZXJ3aXNlLlxuXHRcdCAqIEB0eXBlIHs/e1Byb2R1Y3Q6IHN0cmluZywgVmVyc2lvbjogc3RyaW5nfX1cblx0XHQgKi9cblx0XHR0aGlzLnNlcnZlckluZm8gPSBudWxsXG5cblx0XHQvKipcblx0XHQgKiBUaGUgbmFtZXNwYWNlIHRoYXQgdGhlIHNlcnZlciBhc3NpZ25zIHRvIHRoaXMgY2xpZW50LlxuXHRcdCAqIFdpbGwgYWx3YXlzIGJlIHNldCBhZnRlciB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSBjb25uZWN0IGhhcyByZXNvbHZlZCBzdWNjZXNzZnVsbHkuICBNYXkgYmUgbnVsbCBvdGhlcndpc2UuXG5cdFx0ICogQHR5cGUgez9BcnJheUJ1ZmZlcn1cblx0XHQgKi9cblx0XHR0aGlzLm5hbWVzcGFjZSA9IG51bGxcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSByb290cyB0aGF0IHRoaXMgY2xpZW50IGhhcyBhY2Nlc3MgdG8uXG5cdFx0ICogUHJvdmlkZWQgYnkgdGhlIHNlcnZlciBkdXJpbmcgaGFuZHNoYWtlLlxuXHRcdCAqIFdpbGwgYWx3YXlzIGJlIHNldCBhZnRlciB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSBjb25uZWN0IGhhcyByZXNvbHZlZCBzdWNjZXNzZnVsbHkuICBNYXkgYmUgZW1wdHkgb3RoZXJ3aXNlLlxuXHRcdCAqIEB0eXBlIHt7c3RyaW5nOiBSZWZ9fVxuXHRcdCAqL1xuXHRcdHRoaXMucm9vdHMgPSB7fVxuXG5cdFx0LyoqIEBwcml2YXRlIHRoZSBmdW5jdGlvbiB0byBkZWFsIHdpdGggaW5jb21pbmcgbWVzc2FnZXMgKi9cblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbnVsbFxuXHRcdC8qKiBAcHJpdmF0ZSB0aGUgdG9wIGxldmVsIGNhY2hlIHRoYXQgc3RvcmVzIGFsbCB0aGUgdmFsdWVzIGFuZCByZWZzIGZvciBvYmplY3RzIHRoZSBjbGllbnQga25vd3MgYWJvdXQuICovXG5cdFx0dGhpcy5jYWNoZSA9IG51bGxcblxuXHRcdC8vIHdlIGNvbnRyb2wgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdHJhbnNhY3Rpb24gaWRzIGFuZCBuZXcgb2JqZWN0IGlkcyAodXNlZCBkdXJpbmcgY3JlYXRpb24pLlxuXHRcdC8vIHRoZSBuYW1lc3BhY2UgaXMgYXBwZW5kZWQgdG8gdGhlbSB3aGVuIGFjdHVhbGx5IHNlbnQgdG8gdGhlIHNlcnZlci4gIFdlIGNhbid0IHVzZSBub3JtYWwganNcblx0XHQvLyBudW1iZXJzIGFzIGphdmFzY3JpcHQgZG9lc24ndCBzdXBwb3J0IDY0IGludGVnZXJzLiAgVGhlIG9ubHkgYWN0dWFsIG9wZXJhdGlvbiB3ZSBuZWVkIGlzICdpbmNyZW1lbnQnLlxuXHRcdC8qKiBAcHJpdmF0ZSAqL1xuXHRcdHRoaXMubmV4dFRyYW5zYWN0aW9uSWQgPSBVaW50NjQuZnJvbSgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKVxuXG5cdFx0LyoqIEBwcml2YXRlIHRoZSBxdWV1ZSBvZiB0cmFuc2FjdGlvbnMuKi9cblx0XHR0aGlzLnRyYW5zYWN0aW9ucyA9IFtdXG5cdFx0LyoqIEBwcml2YXRlIHRoZSB0cmFuc2FjdGlvbiBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiovXG5cdFx0dGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSBudWxsXG5cdFx0LyoqIEBwcml2YXRlIHRoZSB0aW1lb3V0IGhhbmRsZSBvciBudWxsIGlmIG5vIHRpbWVvdXQgdG8gcHJvY2VzcyBhIHRyYW5zYWN0aW9uIGlzIHdhaXRpbmcqL1xuXHRcdHRoaXMuc2NoZWR1bGVkQ2FsbGJhY2sgPSBudWxsXG5cdH1cblxuXHQvKipcblx0ICogQ29ubmVjdHMgdG8gdGhlIHNlcnZlci4gIElmIHJ1bm5pbmcgaW4gbm9kZSwgeW91IHdpbGwgbmVlZCB0byBwcm92aWRlIGNvbm5lY3Rpb25PcHRpb25zIHRoYXQgaW5jbHVkZSB0aGUgY2xpZW50XG5cdCAqIGNlcnRpZmljYXRlIGFuZCBrZXkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2U8Q29ubmVjdGlvbiwgRXJyb3I+fVxuXHQgKi9cblx0Y29ubmVjdChjb25uZWN0aW9uT3B0aW9ucykge1xuXHRcdGNvbnN0IHNlcnZlckhlbGxvSGFuZGxlciA9IChtZXNzYWdlKSA9PiB7XG5cdFx0XHQvLyBUT0RPPyA6IGEgY2hlY2sgY291bGQgZ28gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgc2VydmVyIHZlcnNpb24gbWF0Y2hlcyBvdXIgdmVyc2lvbiAoZnJvbSB0aGlzLmNsaWVudEluZm8uVmVyc2lvbikuXG5cdFx0XHR0aGlzLnNlcnZlckluZm8gPSBtZXNzYWdlXG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyID0gcm9vdHNIYW5kbGVyXG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm9vdHNIYW5kbGVyID0gKG1lc3NhZ2UpID0+IHtcblx0XHRcdC8vIHBvcHVsYXRlIHRoZSByb290c1xuXHRcdFx0dGhpcy5yb290cyA9IHt9XG5cdFx0XHRmb3IgKGNvbnN0IHJvb3Qgb2YgbWVzc2FnZS5Sb290cykge1xuXHRcdFx0XHR0aGlzLnJvb3RzW3Jvb3QuTmFtZV0gPSBSZWYuZnJvbU1lc3NhZ2Uocm9vdClcblx0XHRcdH1cblx0XHRcdC8vIHNldCB0aGUgbmFtZXNwYWNlXG5cdFx0XHR0aGlzLm5hbWVzcGFjZSA9IG1lc3NhZ2UuTmFtZXNwYWNlXG5cblx0XHRcdC8vIG5vdyB3ZSdyZSBwcm9wZXJseSBjb25uZWN0ZWRcblx0XHRcdHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsXG5cdFx0XHR0aGlzLmNhY2hlID0gbmV3IE9iamVjdENhY2hlKHRoaXMubmFtZXNwYWNlKVxuXHRcdFx0Y29uc29sZS5pbmZvKGBDb25uZWN0aW9uICR7dGhpcy5jb25uZWN0aW9uSWR9OiBDb25uZWN0ZWQgdG8gZ29zaGF3a2RiLmAsIHRoaXMuc2VydmVySW5mbywgdGhpcy5jbGllbnRJbmZvLCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5yb290cylcblx0XHRcdHRoaXMuX29uQ29ubmVjdGlvbk5lZ290aWF0ZWQodGhpcylcblx0XHR9XG5cblx0XHQvLyBUaGlzIHByb21pc2Ugc2hvdWxkIHJlc29sdmUgd2l0aCBhIHdvcmtpbmcsIHNldHVwIGNvbm5lY3Rpb24gaWYgdGhlIGNvbm5lY3Rpb24gbWFrZXMgaXRzIHdheSB0byBhIGZ1bGx5XG5cdFx0Ly8gbmVnb3RpYXRlZCBjb25uZWN0aW9uOiBpLmUuIGl0IGNvbm5lY3RzLCBpdCBzd2FwcyBpbmZvLCBpdCBsb2FkcyB0aGUgcm9vdHMgYW5kIHRoZSBuYW1lc3BhY2UgYW5kIGluaXRpYWxpc2VzIHRoZVxuXHRcdC8vIHJlbGV2YW50IHN0YXRlLlxuXHRcdC8vIElmIGFueXRoaW5nIGhhcHBlbnMgdG8gZGlzcnVwdCB0aGlzIHByb2Nlc3MgYmVmb3JlIGl0IGNvbXBsZXRlcywgdGhpcyBwcm9taXNlIHdpbGwgcmVqZWN0LlxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9vbkNvbm5lY3Rpb25OZWdvdGlhdGVkID0gcmVzb2x2ZVxuXHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlciA9IHNlcnZlckhlbGxvSGFuZGxlclxuXHRcdFx0dGhpcy5saW5rLmNvbm5lY3QoXG5cdFx0XHRcdC8vIG9uIG1lc3NhZ2Vcblx0XHRcdFx0KGRhdGEpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXNzYWdlSGFuZGxlcihkYXRhKVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYENvbm5lY3Rpb24gJHt0aGlzLmNvbm5lY3Rpb25JZH06IE5vIGhhbmRsZXIgZm91bmQgZm9yIG1lc3NhZ2VgLCBkYXRhKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gb24gZW5kIC0gaWYgdGhlIGNvbm5lY3Rpb24gc3RvcHMgZm9yIGFueSByZWFzb24gKGVycm9yLCBvciBkZWxpYmVyYXRlKSBiZWZvcmUgaXQgcmVzb2x2ZXMgdGhlbiBpdCByZWplY3RzLlxuXHRcdFx0XHQoZSkgPT4gcmVqZWN0KGUpLFxuXHRcdFx0XHQvLyBvbiBvcGVuIHdlIHN0YXJ0IHRoZSBoYW5kc2hha2UgYnkgc2VuZGluZyB0aGUgY2xpZW50IGluZm8uXG5cdFx0XHRcdCgpID0+IHRoaXMubGluay5zZW5kKHRoaXMuY2xpZW50SW5mbyksXG5cdFx0XHRcdGNvbm5lY3Rpb25PcHRpb25zXG5cdFx0XHQpXG5cdFx0fSlcblx0fVxuXG5cdC8qKlxuXHQgKiBRdWV1ZXMgYSB0cmFuc2FjdGlvbiBmb3IgcnVubmluZywgdGhlbiBlbnN1cmVzIHRoYXQgdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyBpcyBoYXBwZW5pbmcuXG5cdCAqIFRoZSByZXR1cm5lZCBwcm9taXNlIHJlc29sdmVzIHdpdGggdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBmbiBvbmNlIHRoZSB0cmFuc2FjdGlvbiBoYXMgY29tbWl0dGVkLiAgVGhlIGZuIG1heSBiZVxuXHQgKiBydW4gbXVsdGlwbGUgdGltZXMgYW5kIHNvIHNob3VsZCBhdm9pZCBzaWRlIGVmZmVjdHMuXG5cdCAqIGZuIG1heSBiZSBhbiBhc3luY2hyb25vdXMgb3IgYSBzeW5jaHJvbm91cyBmdW5jdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbih0eG46IFRyYW5zYWN0aW9uKTogeyp8UHJvbWlzZTwqLCBFcnJvcj59fSBmbiB0aGUgdHJhbnNhY3Rpb24gZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBydW4gbXVsdGlwbGUgdGltZXMgYW5kIHNob3VsZCByZXRocm93IGFueSBUcmFuc2FjdGlvblJldHJ5TmVlZGVkIGV4Y2VwdGlvbnMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPCosIEVycm9yPn0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJlc3VsdCBvZiB0aGUgdHJhbnNhY3Rpb24gZnVuY3Rpb24gb25jZSB0aGUgdHJhbnNhY3Rpb24gc3VibWl0cyBvciBhbiBlcnJvciBpZiBpdCBjYW5ub3QuXG4gXHQgKi9cblx0dHJhbnNhY3QoZm4pIHtcblx0XHRpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYENvbm5lY3Rpb24gJHt0aGlzLmNvbm5lY3Rpb25JZH06IFRyYW5zYWN0aW9uIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbiwgd2FzICR7U3RyaW5nKGZuKX1gKVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnRyYW5zYWN0aW9ucy5wdXNoKG5ldyBUcmFuc2FjdGlvbihmbiwge29uU3VjY2VzczogcmVzb2x2ZSwgb25GYWlsOiByZWplY3R9LCB0aGlzLnJvb3RzLCB0aGlzLm5hbWVzcGFjZSwgdGhpcy5jYWNoZSkpXG5cdFx0XHR0aGlzLnNjaGVkdWxlTmV4dFRyYW5zYWN0aW9uKGZhbHNlKVxuXHRcdH0pXG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSB1bmRlcmx5aW5nIGxpbmsuXG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHR0aGlzLmxpbmsuY2xvc2UoKVxuXHR9XG5cblx0Ly8gcHJpdmF0ZSBhcGlcblxuXHQvKiogQHByaXZhdGVcblx0ICogQWN0dWFsbHkgcnVucyB0aGUgbmV4dCBxdWV1ZWQgdHJhbnNhY3Rpb24uXG5cdCAqL1xuXHRleGVjdXRlTmV4dFRyYW5zYWN0aW9uKCkge1xuXHRcdGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAhPSBudWxsKSB7XG5cdFx0XHQvLyB3ZSdyZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBhIHRyYW5zYWN0aW9uLCBleGl0IHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50VHJhbnNhY3Rpb24gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiA9IHRoaXMudHJhbnNhY3Rpb25zLnNoaWZ0KClcblx0XHRjb25zdCB0eG5JZFdpdGhOYW1lc3BhY2UgPSB0aGlzLm5leHRUcmFuc2FjdGlvbklkLmNvbmNhdCh0aGlzLm5hbWVzcGFjZSlcblxuXHRcdGNvbnN0IHN1Y2NlZWQgPSAoZmluYWxJZCwgdHJhbnNhY3Rpb25SZXN1bHQpID0+IHtcblx0XHRcdGlmIChmaW5hbElkKSB7XG5cdFx0XHRcdGN1cnJlbnRUcmFuc2FjdGlvbi5wcm9tb3RlQ2FjaGUoZmluYWxJZClcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUcmFuc2FjdGlvbi5vblN1Y2Nlc3ModHJhbnNhY3Rpb25SZXN1bHQpXG5cdFx0XHR0aGlzLnNjaGVkdWxlTmV4dFRyYW5zYWN0aW9uKHRydWUpXG5cdFx0fVxuXHRcdGNvbnN0IHJldHJ5ID0gKCkgPT4ge1xuXHRcdFx0Y3VycmVudFRyYW5zYWN0aW9uLnJlc2V0KClcblx0XHRcdHRoaXMudHJhbnNhY3Rpb25zLnVuc2hpZnQoY3VycmVudFRyYW5zYWN0aW9uKVxuXHRcdFx0dGhpcy5zY2hlZHVsZU5leHRUcmFuc2FjdGlvbih0cnVlKVxuXHRcdH1cblx0XHRjb25zdCBmYWlsID0gKGVycikgPT4ge1xuXHRcdFx0Y3VycmVudFRyYW5zYWN0aW9uLm9uRmFpbChlcnIpXG5cdFx0XHR0aGlzLnNjaGVkdWxlTmV4dFRyYW5zYWN0aW9uKHRydWUpXG5cdFx0fVxuXHRcdGNvbnN0IHNlbmRUcmFuc2FjdGlvbiA9IChyZXN1bHQpID0+IHtcblx0XHRcdGNvbnN0IHRyYW5zYWN0aW9uTWVzc2FnZSA9IGN1cnJlbnRUcmFuc2FjdGlvbi50b01lc3NhZ2UodHhuSWRXaXRoTmFtZXNwYWNlKVxuXHRcdFx0aWYgKHRyYW5zYWN0aW9uTWVzc2FnZS5DbGllbnRUeG5TdWJtaXNzaW9uLkFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLmxpbmsucmVxdWVzdCh0cmFuc2FjdGlvbk1lc3NhZ2UpXG5cdFx0XHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUZyb21UcmFuc2FjdGlvblJlc3BvbnNlKHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0Y29tZSA9IHJlc3BvbnNlLkNsaWVudFR4bk91dGNvbWVcblx0XHRcdFx0XHRcdGlmIChvdXRjb21lLkNvbW1pdCkge1xuXHRcdFx0XHRcdFx0XHRzdWNjZWVkKG91dGNvbWUuRmluYWxJZCwgcmVzdWx0KVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvdXRjb21lLkVycm9yICE9IFwiXCIpIHtcblx0XHRcdFx0XHRcdFx0ZmFpbChuZXcgVHJhbnNhY3Rpb25SZWplY3RlZEVycm9yKG91dGNvbWUuRXJyb3IpKVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvdXRjb21lLkFib3J0KSB7XG5cdFx0XHRcdFx0XHRcdHJldHJ5KClcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZhaWwoXCJVbmtub3duIHJlc3BvbnNlIG1lc3NhZ2UgXCIgKyBKU09OLnN0cmluZ2lmeShvdXRjb21lKSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5jYXRjaChmYWlsKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3VjY2VlZCh1bmRlZmluZWQsIHJlc3VsdClcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB3ZSB1c2UgYXNQcm9taXNlLCBzaW5jZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgZm4gbWlnaHQgYmUgYSBQcm9taXNlLlxuXHRcdGFzUHJvbWlzZSgoKSA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFRyYW5zYWN0aW9uLmZuKGN1cnJlbnRUcmFuc2FjdGlvbilcblx0XHR9KS5jYXRjaCggKGUpID0+IHtcblx0XHRcdGlmIChlIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZXRyeU5lZWRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhyb3cgZVxuXHRcdFx0fVxuXHRcdH0pLnRoZW4oc2VuZFRyYW5zYWN0aW9uLCBmYWlsKVxuXHR9XG5cblx0LyoqIEBwcml2YXRlXG5cdCAqIFVwZGF0ZXMgdGhlIHRvcCBsZXZlbCBjb25uZWN0aW9uIGNhY2hlIGFuZCBjb3VudGVycyBiYXNlZCBvbiBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cblx0ICogQHBhcmFtIHJlc3BvbnNlIHRoZSBtc2dwYWNrIHJlc3BvbnNlLlxuXHQgKi9cblx0dXBkYXRlRnJvbVRyYW5zYWN0aW9uUmVzcG9uc2UocmVzcG9uc2UpIHtcblx0XHQvLyBSZXNwb25zZXMgY29udGFpbiBhIGZpbmFsIHRyYW5zYWN0aW9uIGlkLiAgV2UgdGFrZSB0aGUgZmlyc3QgOCBieXRlcyBhbmQgaW5jcmVtZW50IGl0LlxuXHRcdHRoaXMubmV4dFRyYW5zYWN0aW9uSWQgPSBVaW50NjQuZnJvbUJpbmFyeShyZXNwb25zZS5DbGllbnRUeG5PdXRjb21lLkZpbmFsSWQpLmluYygpXG5cdFx0Ly8gSWYgd2UgcmVjZWl2ZWQgYW4gQWJvcnQgbWVzc2FnZSwgdGhlbiB3ZSBtYXkgYWxzbyBoYXZlIHJlY2VpdmVkIHNvbWUgY2FjaGUgdXBkYXRlIGluc3RydWN0aW9ucy5cblx0XHRpZiAocmVzcG9uc2UuQ2xpZW50VHhuT3V0Y29tZS5BYm9ydCkge1xuXHRcdFx0Zm9yIChsZXQgdXBkYXRlIG9mIHJlc3BvbnNlLkNsaWVudFR4bk91dGNvbWUuQWJvcnQpIHtcblx0XHRcdFx0Y29uc3Qgb3RoZXJUeG5JZCA9IHVwZGF0ZS5WZXJzaW9uLmJ1ZmZlclxuXHRcdFx0XHRmb3IgKGxldCBhY3Rpb24gb2YgdXBkYXRlLkFjdGlvbnMpIHtcblx0XHRcdFx0XHRjb25zdCBpZCA9IGFjdGlvbi5WYXJJZFxuXHRcdFx0XHRcdGlmIChhY3Rpb24uRGVsZXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGBDb25uZWN0aW9uICR7dGhpcy5jb25uZWN0aW9uSWR9OiBSZW1vdmluZyAke2JpbmFyeVRvSGV4KGlkKX0gZnJvbSBjYWNoZS5gKVxuXHRcdFx0XHRcdFx0dGhpcy5jYWNoZS5yZW1vdmUoaWQpXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IHdyaXRlRGF0YSA9IGFjdGlvbi5Xcml0ZSB8fCBhY3Rpb24uQ3JlYXRlXG5cdFx0XHRcdFx0XHRpZiAod3JpdGVEYXRhKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY2FjaGUuZ2V0KGlkKS51cGRhdGUob3RoZXJUeG5JZCwgd3JpdGVEYXRhLlZhbHVlLmJ1ZmZlciwgd3JpdGVEYXRhLlJlZmVyZW5jZXMubWFwKFJlZi5mcm9tTWVzc2FnZSkpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBwcml2YXRlXG5cdCAqIElmIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGN1cnJlbnRseSBwcm9jZXNzaW5nIGFuZCB3ZSBoYXZlbid0IHNjaGVkdWxlZCBvbmVcblx0ICogYW5kIHRoZXJlIGlzIGEgdHJhbnNhY3Rpb24gd2FpdGluZyB0byBiZSBwcm9jZXNzZWQsIHRoZW4gc2NoZWR1bGUgaXQuXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xlYXJDdXJyZW50VHJhbnNhY3Rpb24gaWYgdHJ1ZSwgdGhpcyB3aWxsIGZpcnN0IGNsZWFyIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLlxuXHQgKi9cblx0c2NoZWR1bGVOZXh0VHJhbnNhY3Rpb24oY2xlYXJDdXJyZW50VHJhbnNhY3Rpb24pIHtcblx0XHRpZiAoY2xlYXJDdXJyZW50VHJhbnNhY3Rpb24pIHtcblx0XHRcdHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gbnVsbFxuXHRcdH1cblx0XHRpZiAodGhpcy5zY2hlZHVsZWRDYWxsYmFjayA9PSBudWxsICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID09IG51bGwgJiYgdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zY2hlZHVsZWRDYWxsYmFjayA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNjaGVkdWxlZENhbGxiYWNrID0gbnVsbFxuXHRcdFx0XHR0aGlzLmV4ZWN1dGVOZXh0VHJhbnNhY3Rpb24oKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25uZWN0aW9uXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY29ubmVjdGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==");
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
eval("const msgpack = __webpack_require__(10)\nconst WebSocket = __webpack_require__(15)\n\n/**\n * The websocket and Msgpack connection.\n * @private\n */\nclass MsgpackConnection {\n\tconstructor(url, connectionLabel = \"\") {\n\t\tthis.url = url\n\t\t// connectionLabel is purely used for logging.\n\t\tthis.connectionLabel = connectionLabel\n\t\tthis.websocket = null\n\t\tthis.options = {\n\t\t\tcodec: msgpack.createCodec({binarraybuffer: true})\n\t\t}\n\t\t// all the callbacks!\n\t\tthis.onOpen = null\n\t\tthis.onEnd = null\n\t\tthis.onMessage = null\n\t\tthis.onClose = null\n\t\tthis.onError = null\n\t}\n\n\tconnect(onMessage, onEnd, onOpen, connectionOptions) {\n\t\tthis.onMessage = onMessage\n\t\t// onEnd triggers onError or onClose.\n\t\tthis.onEnd = onEnd\n\t\tthis.onOpen = onOpen\n\t\tconst websocket = this.websocket = new WebSocket(this.url, undefined, connectionOptions)\n\t\twebsocket.binaryType = 'arraybuffer'\n\t\twebsocket.onopen = (evt) => {\n\t\t\tconsole.debug(`Connection ${this.connectionLabel}: Connection Open`)\n\t\t\tif (this.onOpen) {\n\t\t\t\tthis.onOpen(evt)\n\t\t\t}\n\t\t}\n\t\twebsocket.onclose = (evt) => {\n\t\t\tconsole.debug(`Connection ${this.connectionLabel}: Connection Closed`, evt.code, evt.reason)\n\t\t\tif (this.onEnd) {\n\t\t\t\tthis.onEnd(evt)\n\t\t\t}\n\t\t\tif (this.onClose) {\n\t\t\t\tthis.onClose(evt)\n\t\t\t}\n\t\t}\n\t\twebsocket.onerror = (evt) => {\n\t\t\tconsole.error(`Connection ${this.connectionLabel}: Connection Error`, evt.code, evt.reason)\n\t\t\tif (this.onEnd) {\n\t\t\t\tthis.onEnd(evt)\n\t\t\t}\n\t\t\tif (this.onError) {\n\t\t\t\tthis.onError(evt)\n\t\t\t}\n\t\t}\n\t\twebsocket.onmessage = (messageEvent) => {\n\t\t\tconst data = msgpack.decode(new Uint8Array(messageEvent.data));\n\t\t\tconsole.debug(`${this.connectionLabel} <`, data)\n\n\t\t\tif (this.onMessage) {\n\t\t\t\tthis.onMessage(data)\n\t\t\t}\n\t\t}\n\t}\n\n\tsend(message) {\n\t\tconsole.debug(`${this.connectionLabel} >`, message)\n\t\tthis.websocket.send(msgpack.encode(message, this.options))\n\t}\n\n\t// sends a message, and returns a promise which resolves with the next message back from the server. This helps\n\t// make a request/response pattern easy. It replaces onMessage and onEnd until it receives the message.\n\trequest(message) {\n\t\tconst oldHandler = this.onMessage\n\t\tconst oldEndHandler = this.onEnd\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.onMessage = (msg) => {\n\t\t\t\tresolve(msg)\n\t\t\t\tthis.onMessage = oldHandler\n\t\t\t\tthis.onEnd = oldEndHandler\n\t\t\t}\n\t\t\tthis.onEnd = (evt) => {\n\t\t\t\tthis.onMessage = oldHandler\n\t\t\t\tthis.onEnd = oldEndHandler\n\t\t\t\treject(evt)\n\t\t\t\tif (oldEndHandler) {\n\t\t\t\t\toldEndHandler(evt)\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.send(message)\n\t\t})\n\t}\n\n\tclose() {\n\t\tthis.websocket.close()\n\t}\n}\n\nmodule.exports = MsgpackConnection//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbXNncGFjay1jb25uZWN0aW9uLmpzP2M4MGEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbXNncGFjayA9IHJlcXVpcmUoJ21zZ3BhY2stbGl0ZS9kaXN0L21zZ3BhY2subWluLmpzJylcbmNvbnN0IFdlYlNvY2tldCA9IHJlcXVpcmUoJ3dzJylcblxuLyoqXG4gKiBUaGUgd2Vic29ja2V0IGFuZCBNc2dwYWNrIGNvbm5lY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBNc2dwYWNrQ29ubmVjdGlvbiB7XG5cdGNvbnN0cnVjdG9yKHVybCwgY29ubmVjdGlvbkxhYmVsID0gXCJcIikge1xuXHRcdHRoaXMudXJsID0gdXJsXG5cdFx0Ly8gY29ubmVjdGlvbkxhYmVsIGlzIHB1cmVseSB1c2VkIGZvciBsb2dnaW5nLlxuXHRcdHRoaXMuY29ubmVjdGlvbkxhYmVsID0gY29ubmVjdGlvbkxhYmVsXG5cdFx0dGhpcy53ZWJzb2NrZXQgPSBudWxsXG5cdFx0dGhpcy5vcHRpb25zID0ge1xuXHRcdFx0Y29kZWM6IG1zZ3BhY2suY3JlYXRlQ29kZWMoe2JpbmFycmF5YnVmZmVyOiB0cnVlfSlcblx0XHR9XG5cdFx0Ly8gYWxsIHRoZSBjYWxsYmFja3MhXG5cdFx0dGhpcy5vbk9wZW4gPSBudWxsXG5cdFx0dGhpcy5vbkVuZCA9IG51bGxcblx0XHR0aGlzLm9uTWVzc2FnZSA9IG51bGxcblx0XHR0aGlzLm9uQ2xvc2UgPSBudWxsXG5cdFx0dGhpcy5vbkVycm9yID0gbnVsbFxuXHR9XG5cblx0Y29ubmVjdChvbk1lc3NhZ2UsIG9uRW5kLCBvbk9wZW4sIGNvbm5lY3Rpb25PcHRpb25zKSB7XG5cdFx0dGhpcy5vbk1lc3NhZ2UgPSBvbk1lc3NhZ2Vcblx0XHQvLyBvbkVuZCB0cmlnZ2VycyBvbkVycm9yIG9yIG9uQ2xvc2UuXG5cdFx0dGhpcy5vbkVuZCA9IG9uRW5kXG5cdFx0dGhpcy5vbk9wZW4gPSBvbk9wZW5cblx0XHRjb25zdCB3ZWJzb2NrZXQgPSB0aGlzLndlYnNvY2tldCA9IG5ldyBXZWJTb2NrZXQodGhpcy51cmwsIHVuZGVmaW5lZCwgY29ubmVjdGlvbk9wdGlvbnMpXG5cdFx0d2Vic29ja2V0LmJpbmFyeVR5cGUgPSAnYXJyYXlidWZmZXInXG5cdFx0d2Vic29ja2V0Lm9ub3BlbiA9IChldnQpID0+IHtcblx0XHRcdGNvbnNvbGUuZGVidWcoYENvbm5lY3Rpb24gJHt0aGlzLmNvbm5lY3Rpb25MYWJlbH06IENvbm5lY3Rpb24gT3BlbmApXG5cdFx0XHRpZiAodGhpcy5vbk9wZW4pIHtcblx0XHRcdFx0dGhpcy5vbk9wZW4oZXZ0KVxuXHRcdFx0fVxuXHRcdH1cblx0XHR3ZWJzb2NrZXQub25jbG9zZSA9IChldnQpID0+IHtcblx0XHRcdGNvbnNvbGUuZGVidWcoYENvbm5lY3Rpb24gJHt0aGlzLmNvbm5lY3Rpb25MYWJlbH06IENvbm5lY3Rpb24gQ2xvc2VkYCwgZXZ0LmNvZGUsIGV2dC5yZWFzb24pXG5cdFx0XHRpZiAodGhpcy5vbkVuZCkge1xuXHRcdFx0XHR0aGlzLm9uRW5kKGV2dClcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLm9uQ2xvc2UpIHtcblx0XHRcdFx0dGhpcy5vbkNsb3NlKGV2dClcblx0XHRcdH1cblx0XHR9XG5cdFx0d2Vic29ja2V0Lm9uZXJyb3IgPSAoZXZ0KSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGBDb25uZWN0aW9uICR7dGhpcy5jb25uZWN0aW9uTGFiZWx9OiBDb25uZWN0aW9uIEVycm9yYCwgZXZ0LmNvZGUsIGV2dC5yZWFzb24pXG5cdFx0XHRpZiAodGhpcy5vbkVuZCkge1xuXHRcdFx0XHR0aGlzLm9uRW5kKGV2dClcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLm9uRXJyb3IpIHtcblx0XHRcdFx0dGhpcy5vbkVycm9yKGV2dClcblx0XHRcdH1cblx0XHR9XG5cdFx0d2Vic29ja2V0Lm9ubWVzc2FnZSA9IChtZXNzYWdlRXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBtc2dwYWNrLmRlY29kZShuZXcgVWludDhBcnJheShtZXNzYWdlRXZlbnQuZGF0YSkpO1xuXHRcdFx0Y29uc29sZS5kZWJ1ZyhgJHt0aGlzLmNvbm5lY3Rpb25MYWJlbH0gPGAsIGRhdGEpXG5cblx0XHRcdGlmICh0aGlzLm9uTWVzc2FnZSkge1xuXHRcdFx0XHR0aGlzLm9uTWVzc2FnZShkYXRhKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHNlbmQobWVzc2FnZSkge1xuXHRcdGNvbnNvbGUuZGVidWcoYCR7dGhpcy5jb25uZWN0aW9uTGFiZWx9ID5gLCBtZXNzYWdlKVxuXHRcdHRoaXMud2Vic29ja2V0LnNlbmQobXNncGFjay5lbmNvZGUobWVzc2FnZSwgdGhpcy5vcHRpb25zKSlcblx0fVxuXG5cdC8vIHNlbmRzIGEgbWVzc2FnZSwgYW5kIHJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIG5leHQgbWVzc2FnZSBiYWNrIGZyb20gdGhlIHNlcnZlci4gVGhpcyBoZWxwc1xuXHQvLyBtYWtlIGEgcmVxdWVzdC9yZXNwb25zZSBwYXR0ZXJuIGVhc3kuICBJdCByZXBsYWNlcyBvbk1lc3NhZ2UgYW5kIG9uRW5kIHVudGlsIGl0IHJlY2VpdmVzIHRoZSBtZXNzYWdlLlxuXHRyZXF1ZXN0KG1lc3NhZ2UpIHtcblx0XHRjb25zdCBvbGRIYW5kbGVyID0gdGhpcy5vbk1lc3NhZ2Vcblx0XHRjb25zdCBvbGRFbmRIYW5kbGVyID0gdGhpcy5vbkVuZFxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLm9uTWVzc2FnZSA9IChtc2cpID0+IHtcblx0XHRcdFx0cmVzb2x2ZShtc2cpXG5cdFx0XHRcdHRoaXMub25NZXNzYWdlID0gb2xkSGFuZGxlclxuXHRcdFx0XHR0aGlzLm9uRW5kID0gb2xkRW5kSGFuZGxlclxuXHRcdFx0fVxuXHRcdFx0dGhpcy5vbkVuZCA9IChldnQpID0+IHtcblx0XHRcdFx0dGhpcy5vbk1lc3NhZ2UgPSBvbGRIYW5kbGVyXG5cdFx0XHRcdHRoaXMub25FbmQgPSBvbGRFbmRIYW5kbGVyXG5cdFx0XHRcdHJlamVjdChldnQpXG5cdFx0XHRcdGlmIChvbGRFbmRIYW5kbGVyKSB7XG5cdFx0XHRcdFx0b2xkRW5kSGFuZGxlcihldnQpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuc2VuZChtZXNzYWdlKVxuXHRcdH0pXG5cdH1cblxuXHRjbG9zZSgpIHtcblx0XHR0aGlzLndlYnNvY2tldC5jbG9zZSgpXG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNc2dwYWNrQ29ubmVjdGlvblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21zZ3BhY2stY29ubmVjdGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=");
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
eval("/* WEBPACK VAR INJECTION */(function(global) {const {binaryToHex, toArrayBuffer} = __webpack_require__(0)\nconst {TransactionRetryNeeded, MutationNotAllowed} = __webpack_require__(1)\nconst Uint64 = __webpack_require__(2)\nconst Ref = __webpack_require__(4)\n\nfunction checkRefs(refs) {\n\tfor (let i = 0; i < refs.length; ++i) {\n\t\tconst ref = refs[i]\n\t\tif (ref instanceof Ref === false) {\n\t\t\tthrow new TypeError(`Reference ${i} was not of reference type - was a ${ref.constructor.name} : ${ref.toString()}`)\n\t\t}\n\t}\n}\n\n/**\n * The top level object cache. It keeps objects value and refs stored against their id.\n * @private\n */\nclass ObjectCache {\n\tconstructor() {\n\t\tthis.objects = new Map()\n\t}\n\n\tget(id) {\n\t\tconst hashable = binaryToHex(id)\n\t\tif (!this.objects.has(hashable)) {\n\t\t\tthis.objects.set(hashable, new ObjectCacheEntry(id))\n\t\t}\n\t\treturn this.objects.get(hashable)\n\t}\n\n\tremove(id) {\n\t\tconst hashable = binaryToHex(id)\n\t\tif (!this.objects.has(hashable)) {\n\t\t\tthrow new Error(`Unexpected remove of id ${hashable}`)\n\t\t}\n\t\tthis.objects.delete(hashable)\n\t}\n\n\tgetTemporaryView() {\n\t\treturn new CopyCache(this)\n\t}\n}\n\nmodule.exports = ObjectCache\n\n// An ObjectCacheEntry represents the clients knowledge about a GoshawkDB Object.\n// - It should always have an id.\n// - If it contains values known to have been in the database (either they have been sent in a cache update, or a\n// create/write that has been acknowledged. The values version and data.value and data.refs will be set.\n//\t- data.refs and data.value will be set after a write or create.\nclass ObjectCacheEntry {\n\tconstructor(id) {\n\t\tif (id instanceof Uint8Array == false) {\n\t\t\tthrow new TypeError(`id must be a uint8, was ${String(id)}`)\n\t\t}\n\t\tthis.id = id\n\n\t\tthis.version = null\n\t\tthis.data = {\n\t\t\tvalue: null,\n\t\t\trefs: null\n\t\t}\n\n\t\t// best effort attempt to restrict mutations in the data I return to the user.\n\t\tthis.readOnlyData = Object.create({}, {\n\t\t\t\tvalue: {\n\t\t\t\t\tset: () => {\n\t\t\t\t\t\tthrow new MutationNotAllowed(\"Cannot set value without a transaction.write call.\")\n\t\t\t\t\t},\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\treturn this.data.value\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trefs: {\n\t\t\t\t\tset: () => {\n\t\t\t\t\t\tthrow new MutationNotAllowed(\"Cannot set references without a transaction.write call.\")\n\t\t\t\t\t},\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\tconst srcRefs = this.data.refs\n\t\t\t\t\t\tif (global.Proxy) {\n\t\t\t\t\t\t\treturn new Proxy(srcRefs, {\n\t\t\t\t\t\t\t\tset: () => {\n\t\t\t\t\t\t\t\t\tthrow new MutationNotAllowed(\"Cannot change references without a transaction.write call.\")\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn srcRefs.slice()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tversion: {\n\t\t\t\t\tset: () => {\n\t\t\t\t\t\tthrow new MutationNotAllowed(\"Cannot set references without a transaction.write call.\")\n\t\t\t\t\t},\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\treturn this.version\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t// Record which actions have occurred on this object from the client.\n\t\t// These are only needed on objects within a transactions cache, not at the top level.\n\t\t// - If something has been written or created, calling read on it has no effect (it is answered from cache).\n\t\t// - If something has been created, calling write on it has no effect (the create is merely updated to the contents of the write).\n\t\tthis.hasBeenWritten = false\n\t\tthis.hasBeenRead = false\n\t\tthis.hasBeenCreated = false\n\t}\n\n\t// Updates representing version, value and refs are they are in the remote database. Can populate on an abort or a submit.\n\tupdate(version, value, refs) {\n\t\tvalue = toArrayBuffer(value)\n\t\tcheckRefs(refs)\n\t\tthis.data.value = value\n\t\tthis.data.refs = refs\n\t\tthis.version = toArrayBuffer(version)\n\t}\n\n\tread() {\n\t\tif (!this.hasBeenWritten && !this.hasBeenCreated) {\n\t\t\tthis.hasBeenRead = true\n\t\t}\n\t\tif (this.hasData()) {\n\t\t\treturn this.readOnlyData\n\t\t}\n\n\t\tthrow new TransactionRetryNeeded(`Object ${binaryToHex(this.id)} not present in cache`)\n\t}\n\n\twrite(value, refs) {\n\t\tvalue = toArrayBuffer(value)\n\t\tcheckRefs(refs)\n\t\tif (!this.hasBeenCreated) {\n\t\t\tthis.hasBeenWritten = true\n\t\t}\n\t\tthis.data.value = value\n\t\tthis.data.refs = refs\n\t}\n\n\thasData() {\n\t\treturn this.hasBeenCreated || this.hasBeenWritten || this.version != null\n\t}\n\n\tcreate(value, refs) {\n\t\tif (value instanceof ArrayBuffer != true) {\n\t\t\tthrow new TypeError(\"values should be array buffers : \" + value)\n\t\t}\n\t\tcheckRefs(refs)\n\t\tthis.hasBeenCreated = true\n\t\tthis.data.value = value\n\t\tthis.data.refs = refs\n\t}\n\n\tclone() {\n\t\treturn new ObjectCacheEntry(this.id).copyFrom(this)\n\t}\n\n\tcopyFrom(otherEntry) {\n\t\tthis.version = otherEntry.version\n\t\tthis.data.value = otherEntry.data.value\n\t\tthis.data.refs = otherEntry.data.refs\n\t\tthis.hasBeenRead = otherEntry.hasBeenRead\n\t\tthis.hasBeenWritten = otherEntry.hasBeenWritten\n\t\tthis.hasBeenCreated = otherEntry.hasBeenCreated\n\t\treturn this\n\t}\n\n\ttoAction(initialVersion) {\n\t\tconst result = {\n\t\t\tVarId: this.id.buffer,\n\t\t}\n\t\tconst refMessages = this.data.refs ? this.data.refs.map((ref) => ref.toMessage()) : []\n\n\t\tif (this.hasBeenRead && !this.hasBeenWritten) {\n\t\t\tresult.Read = {Version: this.version || initialVersion}\n\t\t} else if (this.hasBeenWritten && !this.hasBeenRead) {\n\t\t\tresult.Write = {Value: this.data.value, References: refMessages}\n\t\t} else if (this.hasBeenWritten && this.hasBeenRead) {\n\t\t\tresult.ReadWrite = {Version: this.version, Value: this.data.value, References: refMessages}\n\t\t} else if (this.hasBeenCreated) {\n\t\t\tresult.Create = {Value: this.data.value, References: refMessages}\n\t\t} else {\n\t\t\tthrow new Error(`No read or write has occurred on object ${this.id}, cannot form an action.`)\n\t\t}\n\t\treturn result\n\t}\n}\n\nclass CopyCache {\n\tconstructor(parentCache) {\n\t\tthis.parentCache = parentCache\n\t\tthis.objects = new Map()\n\t}\n\n\tget(id) {\n\t\tconst hashable = binaryToHex(id)\n\t\tif (!this.objects.has(hashable)) {\n\t\t\tthis.objects.set(hashable, this.parentCache.get(id).clone())\n\t\t}\n\t\treturn this.objects.get(hashable)\n\t}\n\n\tpromote(finalTxnId) {\n\t\tfor (let [, entry] of this.objects) {\n\t\t\tconst parentEntry = this.parentCache.get(entry.id)\n\t\t\tif (finalTxnId) {\n\t\t\t\t// if we are given a transaction id, then this promotion should be treated like a cache update from the server.\n\t\t\t\tif (entry.hasBeenCreated || entry.hasBeenWritten) {\n\t\t\t\t\tparentEntry.update(finalTxnId, entry.data.value, entry.data.refs)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// otherwise, it's a nested transaction completing, so we do a full copy into the parent.\n\t\t\t\tparentEntry.copyFrom(entry)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Returns an array of all the actions that have occurred on this cache.\n\tgetActions(namespace, cacheEntryFilter) {\n\t\tconst actions = []\n\t\t// the version to ask for if we don't currently have any data in the cache for an object.\n\t\tconst initialVersion = Uint64.from(0, 0, 0, 0, 0, 0, 0, 0).concat(namespace)\n\n\t\tfor (let [,cacheEntry] of this.objects) {\n\t\t\tif (cacheEntryFilter(cacheEntry)) {\n\t\t\t\tactions.push(cacheEntry.toAction(initialVersion))\n\t\t\t}\n\t\t}\n\n\t\treturn actions\n\t}\n\n\tgetTemporaryView() {\n\t\treturn new CopyCache(this)\n\t}\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvb2JqZWN0Y2FjaGUuanM/YjU1MCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7YmluYXJ5VG9IZXgsIHRvQXJyYXlCdWZmZXJ9ID0gcmVxdWlyZSgnLi91dGlscycpXG5jb25zdCB7VHJhbnNhY3Rpb25SZXRyeU5lZWRlZCwgTXV0YXRpb25Ob3RBbGxvd2VkfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IFVpbnQ2NCA9IHJlcXVpcmUoJy4vdWludDY0JylcbmNvbnN0IFJlZiA9IHJlcXVpcmUoJy4vcmVmJylcblxuZnVuY3Rpb24gY2hlY2tSZWZzKHJlZnMpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgKytpKSB7XG5cdFx0Y29uc3QgcmVmID0gcmVmc1tpXVxuXHRcdGlmIChyZWYgaW5zdGFuY2VvZiBSZWYgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWZlcmVuY2UgJHtpfSB3YXMgbm90IG9mIHJlZmVyZW5jZSB0eXBlIC0gd2FzIGEgJHtyZWYuY29uc3RydWN0b3IubmFtZX0gOiAke3JlZi50b1N0cmluZygpfWApXG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogVGhlIHRvcCBsZXZlbCBvYmplY3QgY2FjaGUuIEl0IGtlZXBzIG9iamVjdHMgdmFsdWUgYW5kIHJlZnMgc3RvcmVkIGFnYWluc3QgdGhlaXIgaWQuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBPYmplY3RDYWNoZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMub2JqZWN0cyA9IG5ldyBNYXAoKVxuXHR9XG5cblx0Z2V0KGlkKSB7XG5cdFx0Y29uc3QgaGFzaGFibGUgPSBiaW5hcnlUb0hleChpZClcblx0XHRpZiAoIXRoaXMub2JqZWN0cy5oYXMoaGFzaGFibGUpKSB7XG5cdFx0XHR0aGlzLm9iamVjdHMuc2V0KGhhc2hhYmxlLCBuZXcgT2JqZWN0Q2FjaGVFbnRyeShpZCkpXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9iamVjdHMuZ2V0KGhhc2hhYmxlKVxuXHR9XG5cblx0cmVtb3ZlKGlkKSB7XG5cdFx0Y29uc3QgaGFzaGFibGUgPSBiaW5hcnlUb0hleChpZClcblx0XHRpZiAoIXRoaXMub2JqZWN0cy5oYXMoaGFzaGFibGUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgcmVtb3ZlIG9mIGlkICR7aGFzaGFibGV9YClcblx0XHR9XG5cdFx0dGhpcy5vYmplY3RzLmRlbGV0ZShoYXNoYWJsZSlcblx0fVxuXG5cdGdldFRlbXBvcmFyeVZpZXcoKSB7XG5cdFx0cmV0dXJuIG5ldyBDb3B5Q2FjaGUodGhpcylcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdENhY2hlXG5cbi8vIEFuIE9iamVjdENhY2hlRW50cnkgcmVwcmVzZW50cyB0aGUgY2xpZW50cyBrbm93bGVkZ2UgYWJvdXQgYSBHb3NoYXdrREIgT2JqZWN0LlxuLy8gIC0gSXQgc2hvdWxkIGFsd2F5cyBoYXZlIGFuIGlkLlxuLy8gIC0gSWYgaXQgY29udGFpbnMgdmFsdWVzIGtub3duIHRvIGhhdmUgYmVlbiBpbiB0aGUgZGF0YWJhc2UgKGVpdGhlciB0aGV5IGhhdmUgYmVlbiBzZW50IGluIGEgY2FjaGUgdXBkYXRlLCBvciBhXG4vLyAgICBjcmVhdGUvd3JpdGUgdGhhdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQuICBUaGUgdmFsdWVzIHZlcnNpb24gYW5kIGRhdGEudmFsdWUgYW5kIGRhdGEucmVmcyB3aWxsIGJlIHNldC5cbi8vXHQtIGRhdGEucmVmcyBhbmQgZGF0YS52YWx1ZSB3aWxsIGJlIHNldCBhZnRlciBhIHdyaXRlIG9yIGNyZWF0ZS5cbmNsYXNzIE9iamVjdENhY2hlRW50cnkge1xuXHRjb25zdHJ1Y3RvcihpZCkge1xuXHRcdGlmIChpZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYGlkIG11c3QgYmUgYSB1aW50OCwgd2FzICR7U3RyaW5nKGlkKX1gKVxuXHRcdH1cblx0XHR0aGlzLmlkID0gaWRcblxuXHRcdHRoaXMudmVyc2lvbiA9IG51bGxcblx0XHR0aGlzLmRhdGEgPSB7XG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHRcdHJlZnM6IG51bGxcblx0XHR9XG5cblx0XHQvLyBiZXN0IGVmZm9ydCBhdHRlbXB0IHRvIHJlc3RyaWN0IG11dGF0aW9ucyBpbiB0aGUgZGF0YSBJIHJldHVybiB0byB0aGUgdXNlci5cblx0XHR0aGlzLnJlYWRPbmx5RGF0YSA9IE9iamVjdC5jcmVhdGUoe30sIHtcblx0XHRcdFx0dmFsdWU6IHtcblx0XHRcdFx0XHRzZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBNdXRhdGlvbk5vdEFsbG93ZWQoXCJDYW5ub3Qgc2V0IHZhbHVlIHdpdGhvdXQgYSB0cmFuc2FjdGlvbi53cml0ZSBjYWxsLlwiKVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5kYXRhLnZhbHVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZWZzOiB7XG5cdFx0XHRcdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgTXV0YXRpb25Ob3RBbGxvd2VkKFwiQ2Fubm90IHNldCByZWZlcmVuY2VzIHdpdGhvdXQgYSB0cmFuc2FjdGlvbi53cml0ZSBjYWxsLlwiKVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBzcmNSZWZzID0gdGhpcy5kYXRhLnJlZnNcblx0XHRcdFx0XHRcdGlmIChnbG9iYWwuUHJveHkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG5ldyBQcm94eShzcmNSZWZzLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgTXV0YXRpb25Ob3RBbGxvd2VkKFwiQ2Fubm90IGNoYW5nZSByZWZlcmVuY2VzIHdpdGhvdXQgYSB0cmFuc2FjdGlvbi53cml0ZSBjYWxsLlwiKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzcmNSZWZzLnNsaWNlKClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHZlcnNpb246IHtcblx0XHRcdFx0XHRzZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBNdXRhdGlvbk5vdEFsbG93ZWQoXCJDYW5ub3Qgc2V0IHJlZmVyZW5jZXMgd2l0aG91dCBhIHRyYW5zYWN0aW9uLndyaXRlIGNhbGwuXCIpXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnZlcnNpb25cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cblx0XHQvLyBSZWNvcmQgd2hpY2ggYWN0aW9ucyBoYXZlIG9jY3VycmVkIG9uIHRoaXMgb2JqZWN0IGZyb20gdGhlIGNsaWVudC5cblx0XHQvLyBUaGVzZSBhcmUgb25seSBuZWVkZWQgb24gb2JqZWN0cyB3aXRoaW4gYSB0cmFuc2FjdGlvbnMgY2FjaGUsIG5vdCBhdCB0aGUgdG9wIGxldmVsLlxuXHRcdC8vICAtIElmIHNvbWV0aGluZyBoYXMgYmVlbiB3cml0dGVuIG9yIGNyZWF0ZWQsIGNhbGxpbmcgcmVhZCBvbiBpdCBoYXMgbm8gZWZmZWN0IChpdCBpcyBhbnN3ZXJlZCBmcm9tIGNhY2hlKS5cblx0XHQvLyAgLSBJZiBzb21ldGhpbmcgaGFzIGJlZW4gY3JlYXRlZCwgY2FsbGluZyB3cml0ZSBvbiBpdCBoYXMgbm8gZWZmZWN0ICh0aGUgY3JlYXRlIGlzIG1lcmVseSB1cGRhdGVkIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUpLlxuXHRcdHRoaXMuaGFzQmVlbldyaXR0ZW4gPSBmYWxzZVxuXHRcdHRoaXMuaGFzQmVlblJlYWQgPSBmYWxzZVxuXHRcdHRoaXMuaGFzQmVlbkNyZWF0ZWQgPSBmYWxzZVxuXHR9XG5cblx0Ly8gVXBkYXRlcyByZXByZXNlbnRpbmcgdmVyc2lvbiwgdmFsdWUgYW5kIHJlZnMgYXJlIHRoZXkgYXJlIGluIHRoZSByZW1vdGUgZGF0YWJhc2UuICBDYW4gcG9wdWxhdGUgb24gYW4gYWJvcnQgb3IgYSBzdWJtaXQuXG5cdHVwZGF0ZSh2ZXJzaW9uLCB2YWx1ZSwgcmVmcykge1xuXHRcdHZhbHVlID0gdG9BcnJheUJ1ZmZlcih2YWx1ZSlcblx0XHRjaGVja1JlZnMocmVmcylcblx0XHR0aGlzLmRhdGEudmFsdWUgPSB2YWx1ZVxuXHRcdHRoaXMuZGF0YS5yZWZzID0gcmVmc1xuXHRcdHRoaXMudmVyc2lvbiA9IHRvQXJyYXlCdWZmZXIodmVyc2lvbilcblx0fVxuXG5cdHJlYWQoKSB7XG5cdFx0aWYgKCF0aGlzLmhhc0JlZW5Xcml0dGVuICYmICF0aGlzLmhhc0JlZW5DcmVhdGVkKSB7XG5cdFx0XHR0aGlzLmhhc0JlZW5SZWFkID0gdHJ1ZVxuXHRcdH1cblx0XHRpZiAodGhpcy5oYXNEYXRhKCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlYWRPbmx5RGF0YVxuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUcmFuc2FjdGlvblJldHJ5TmVlZGVkKGBPYmplY3QgJHtiaW5hcnlUb0hleCh0aGlzLmlkKX0gbm90IHByZXNlbnQgaW4gY2FjaGVgKVxuXHR9XG5cblx0d3JpdGUodmFsdWUsIHJlZnMpIHtcblx0XHR2YWx1ZSA9IHRvQXJyYXlCdWZmZXIodmFsdWUpXG5cdFx0Y2hlY2tSZWZzKHJlZnMpXG5cdFx0aWYgKCF0aGlzLmhhc0JlZW5DcmVhdGVkKSB7XG5cdFx0XHR0aGlzLmhhc0JlZW5Xcml0dGVuID0gdHJ1ZVxuXHRcdH1cblx0XHR0aGlzLmRhdGEudmFsdWUgPSB2YWx1ZVxuXHRcdHRoaXMuZGF0YS5yZWZzID0gcmVmc1xuXHR9XG5cblx0aGFzRGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNCZWVuQ3JlYXRlZCB8fCB0aGlzLmhhc0JlZW5Xcml0dGVuIHx8IHRoaXMudmVyc2lvbiAhPSBudWxsXG5cdH1cblxuXHRjcmVhdGUodmFsdWUsIHJlZnMpIHtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAhPSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWVzIHNob3VsZCBiZSBhcnJheSBidWZmZXJzIDogXCIgKyB2YWx1ZSlcblx0XHR9XG5cdFx0Y2hlY2tSZWZzKHJlZnMpXG5cdFx0dGhpcy5oYXNCZWVuQ3JlYXRlZCA9IHRydWVcblx0XHR0aGlzLmRhdGEudmFsdWUgPSB2YWx1ZVxuXHRcdHRoaXMuZGF0YS5yZWZzID0gcmVmc1xuXHR9XG5cblx0Y2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBPYmplY3RDYWNoZUVudHJ5KHRoaXMuaWQpLmNvcHlGcm9tKHRoaXMpXG5cdH1cblxuXHRjb3B5RnJvbShvdGhlckVudHJ5KSB7XG5cdFx0dGhpcy52ZXJzaW9uID0gb3RoZXJFbnRyeS52ZXJzaW9uXG5cdFx0dGhpcy5kYXRhLnZhbHVlID0gb3RoZXJFbnRyeS5kYXRhLnZhbHVlXG5cdFx0dGhpcy5kYXRhLnJlZnMgPSBvdGhlckVudHJ5LmRhdGEucmVmc1xuXHRcdHRoaXMuaGFzQmVlblJlYWQgPSBvdGhlckVudHJ5Lmhhc0JlZW5SZWFkXG5cdFx0dGhpcy5oYXNCZWVuV3JpdHRlbiA9IG90aGVyRW50cnkuaGFzQmVlbldyaXR0ZW5cblx0XHR0aGlzLmhhc0JlZW5DcmVhdGVkID0gb3RoZXJFbnRyeS5oYXNCZWVuQ3JlYXRlZFxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHR0b0FjdGlvbihpbml0aWFsVmVyc2lvbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRcdFZhcklkOiB0aGlzLmlkLmJ1ZmZlcixcblx0XHR9XG5cdFx0Y29uc3QgcmVmTWVzc2FnZXMgPSB0aGlzLmRhdGEucmVmcyA/IHRoaXMuZGF0YS5yZWZzLm1hcCgocmVmKSA9PiByZWYudG9NZXNzYWdlKCkpIDogW11cblxuXHRcdGlmICh0aGlzLmhhc0JlZW5SZWFkICYmICF0aGlzLmhhc0JlZW5Xcml0dGVuKSB7XG5cdFx0XHRyZXN1bHQuUmVhZCA9IHtWZXJzaW9uOiB0aGlzLnZlcnNpb24gfHwgaW5pdGlhbFZlcnNpb259XG5cdFx0fSBlbHNlIGlmICh0aGlzLmhhc0JlZW5Xcml0dGVuICYmICF0aGlzLmhhc0JlZW5SZWFkKSB7XG5cdFx0XHRyZXN1bHQuV3JpdGUgPSB7VmFsdWU6IHRoaXMuZGF0YS52YWx1ZSwgUmVmZXJlbmNlczogcmVmTWVzc2FnZXN9XG5cdFx0fSBlbHNlIGlmICh0aGlzLmhhc0JlZW5Xcml0dGVuICYmIHRoaXMuaGFzQmVlblJlYWQpIHtcblx0XHRcdHJlc3VsdC5SZWFkV3JpdGUgPSB7VmVyc2lvbjogdGhpcy52ZXJzaW9uLCBWYWx1ZTogdGhpcy5kYXRhLnZhbHVlLCBSZWZlcmVuY2VzOiByZWZNZXNzYWdlc31cblx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzQmVlbkNyZWF0ZWQpIHtcblx0XHRcdHJlc3VsdC5DcmVhdGUgPSB7VmFsdWU6IHRoaXMuZGF0YS52YWx1ZSwgUmVmZXJlbmNlczogcmVmTWVzc2FnZXN9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gcmVhZCBvciB3cml0ZSBoYXMgb2NjdXJyZWQgb24gb2JqZWN0ICR7dGhpcy5pZH0sIGNhbm5vdCBmb3JtIGFuIGFjdGlvbi5gKVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0XG5cdH1cbn1cblxuY2xhc3MgQ29weUNhY2hlIHtcblx0Y29uc3RydWN0b3IocGFyZW50Q2FjaGUpIHtcblx0XHR0aGlzLnBhcmVudENhY2hlID0gcGFyZW50Q2FjaGVcblx0XHR0aGlzLm9iamVjdHMgPSBuZXcgTWFwKClcblx0fVxuXG5cdGdldChpZCkge1xuXHRcdGNvbnN0IGhhc2hhYmxlID0gYmluYXJ5VG9IZXgoaWQpXG5cdFx0aWYgKCF0aGlzLm9iamVjdHMuaGFzKGhhc2hhYmxlKSkge1xuXHRcdFx0dGhpcy5vYmplY3RzLnNldChoYXNoYWJsZSwgdGhpcy5wYXJlbnRDYWNoZS5nZXQoaWQpLmNsb25lKCkpXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9iamVjdHMuZ2V0KGhhc2hhYmxlKVxuXHR9XG5cblx0cHJvbW90ZShmaW5hbFR4bklkKSB7XG5cdFx0Zm9yIChsZXQgWywgZW50cnldIG9mIHRoaXMub2JqZWN0cykge1xuXHRcdFx0Y29uc3QgcGFyZW50RW50cnkgPSB0aGlzLnBhcmVudENhY2hlLmdldChlbnRyeS5pZClcblx0XHRcdGlmIChmaW5hbFR4bklkKSB7XG5cdFx0XHRcdC8vIGlmIHdlIGFyZSBnaXZlbiBhIHRyYW5zYWN0aW9uIGlkLCB0aGVuIHRoaXMgcHJvbW90aW9uIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgYSBjYWNoZSB1cGRhdGUgZnJvbSB0aGUgc2VydmVyLlxuXHRcdFx0XHRpZiAoZW50cnkuaGFzQmVlbkNyZWF0ZWQgfHwgZW50cnkuaGFzQmVlbldyaXR0ZW4pIHtcblx0XHRcdFx0XHRwYXJlbnRFbnRyeS51cGRhdGUoZmluYWxUeG5JZCwgZW50cnkuZGF0YS52YWx1ZSwgZW50cnkuZGF0YS5yZWZzKVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBvdGhlcndpc2UsIGl0J3MgYSBuZXN0ZWQgdHJhbnNhY3Rpb24gY29tcGxldGluZywgc28gd2UgZG8gYSBmdWxsIGNvcHkgaW50byB0aGUgcGFyZW50LlxuXHRcdFx0XHRwYXJlbnRFbnRyeS5jb3B5RnJvbShlbnRyeSlcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgYWN0aW9ucyB0aGF0IGhhdmUgb2NjdXJyZWQgb24gdGhpcyBjYWNoZS5cblx0Z2V0QWN0aW9ucyhuYW1lc3BhY2UsIGNhY2hlRW50cnlGaWx0ZXIpIHtcblx0XHRjb25zdCBhY3Rpb25zID0gW11cblx0XHQvLyB0aGUgdmVyc2lvbiB0byBhc2sgZm9yIGlmIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGFueSBkYXRhIGluIHRoZSBjYWNoZSBmb3IgYW4gb2JqZWN0LlxuXHRcdGNvbnN0IGluaXRpYWxWZXJzaW9uID0gVWludDY0LmZyb20oMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkuY29uY2F0KG5hbWVzcGFjZSlcblxuXHRcdGZvciAobGV0IFssY2FjaGVFbnRyeV0gb2YgdGhpcy5vYmplY3RzKSB7XG5cdFx0XHRpZiAoY2FjaGVFbnRyeUZpbHRlcihjYWNoZUVudHJ5KSkge1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goY2FjaGVFbnRyeS50b0FjdGlvbihpbml0aWFsVmVyc2lvbikpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjdGlvbnNcblx0fVxuXG5cdGdldFRlbXBvcmFyeVZpZXcoKSB7XG5cdFx0cmV0dXJuIG5ldyBDb3B5Q2FjaGUodGhpcylcblx0fVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL29iamVjdGNhY2hlLmpzXG4vLyBtb2R1bGUgaWQgPSAxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9");
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
eval("const Ref = __webpack_require__(4)\nconst {TransactionRetryNeeded, CapabilityDenied} = __webpack_require__(1)\nconst {toArrayBuffer} = __webpack_require__(0)\nconst Uint64 = __webpack_require__(2)\n\n/** @private */\nconst nextNewObjectId = Uint64.from(0, 0, 0, 0, 0, 0, 0, 0)\n\n/**\n * A transaction represents an attempt to make a modification to the database.\n *\n * The code associated with it may be required to run multiple times before it\n * successfully completes. Care must be taken to make sure this will not\n * break the client environment.\n *\n * Transactions are acquired by calling {@link Connection#transact}.\n */\nclass Transaction {\n\n\t/** @private */\n\tconstructor(txnFn, {onSuccess, onFail}, roots, namespace, parentCache) {\n\t\t/** @private */\n\t\tthis.onSuccess = onSuccess;\n\n\t\t/** @private */\n\t\tthis.onFail = onFail;\n\n\t\t/** @private */\n\t\tthis.shouldRetry = false\n\n\t\t/** @private */\n\t\tthis.hasCacheMissed = false\n\n\t\t/** @private */\n\t\tthis.namespace = namespace\n\n\t\t/**\n\t\t * The roots that this client has access to.\n\t\t * @type {{string: Ref}}\n\t\t */\n\t\tthis.roots = roots\n\n\t\t/** @private */\n\t\tthis.fn = txnFn\n\n\t\t/** @private */\n\t\tthis.parentCache = parentCache\n\n\t\t/** @private */\n\t\tthis.cache = parentCache.getTemporaryView()\n\t}\n\n\t/**\n\t * Reads the value and references from an object pointed to by a Ref.\n\t * @param {Ref} ref a reference to the object to read from.\n\t * @returns {{value:ArrayBuffer, refs:Ref[]}}\n\t * @throws {CapabilityDenied} if ref does not have read capability.\n\t * @throws {TransactionRetryNeeded} if the object is not in cache. Do not catch this without rethrowing it.\n\t */\n\tread(ref) {\n\t\tif (ref instanceof Ref == false) {\n\t\t\tthrow new TypeError(`Can only read a reference; you tried to read from ${String(ref)}`)\n\t\t}\n\t\tif (!ref.read) {\n\t\t\tthrow new CapabilityDenied(`Unable to read using reference ${ref.toString()}, as it doesn't allow reads.`)\n\t\t}\n\t\tconst id = ref.varId\n\t\tconst cacheEntry = this.cache.get(id)\n\t\tif (cacheEntry.hasData() === false) {\n\t\t\tthis.hasCacheMissed = true\n\t\t}\n\t\treturn cacheEntry.read()\n\t}\n\n\t/**\n\t * Changes the value an dreferences of an object pointed to by a Ref.\n\t * @param {Ref} ref a reference to the object to be written.\n\t * @param {ArrayBuffer|Buffer|TypedArray} value the new value to be stored in the object.\n\t * @param {Ref[]} refs the references from this object to other objects.\n\t */\n\twrite(ref, value, refs) {\n\t\tif (ref instanceof Ref == false) {\n\t\t\tthrow new TypeError(`Can only write with a reference; you tried to write to ${String(ref)}.`)\n\t\t}\n\t\tif (!ref.write) {\n\t\t\tthrow new CapabilityDenied(`Unable to write using reference ${ref.toString()}, as it doesn't allow writes.`)\n\t\t}\n\t\tvalue = toArrayBuffer(value)\n\t\tconst id = ref.varId\n\t\tconst cacheEntry = this.cache.get(id)\n\t\tcacheEntry.write(value, refs)\n\t}\n\n\t/**\n\t * Creates a new object and returns the reference to it.\n\t * @param {ArrayBuffer|Buffer|TypedArray} value the value that the new object will be created with.\n\t * @param {Ref[]} refs the references that the new object will be created with. This will default to the empty array.\n\t * @returns {Ref} a reference to the newly created object.\n\t */\n\tcreate(value, refs = []) {\n\t\tvalue = toArrayBuffer(value)\n\t\tconst newId = this.getNewObjectId()\n\t\tconst cacheEntry = this.cache.get(newId)\n\t\tcacheEntry.create(value, refs)\n\t\treturn new Ref(new Uint8Array(newId), true, true)\n\t}\n\n\t/**\n\t * Stops the current transaction, and waits for any of the values that have been\n\t * read to change before rerunning. No further transactions will be processed while\n\t * a transaction is waiting.\n\t *\n\t * Internally, this method throws a TransactionRetryNeeded error. If you catch it\n\t * and do not rethrow it, you will stop the retry behaviour from working.\n\t *\n\t * @throws {TransactionRetryNeeded}\n\t */\n\tretry() {\n\t\tthis.shouldRetry = true\n\t\tthrow new TransactionRetryNeeded(\"Transaction code called retry.\")\n\t}\n\n\t/**\n\t * Runs a nested transaction inside this transaction.\n\t *\n\t * If a nested transaction fails, its modifications will not be seen by the parent transaction.\n\t *\n\t * @param {function} fn the transaction function. This function may be run multiple times and should rethrow any\n\t * \t\t\t\t\t\t\tTransactionRetryNeeded exceptions.\n\t * @returns {Promise<*, Error>} a promise that resolves to the result of the transaction function once the transaction\n\t * \t\t\t\t\t\t\tsubmits or an error if it cannot.\n\t */\n\ttransact(fn) {\n\t\tif (fn instanceof Function === false) {\n\t\t\tthrow new TypeError(\"Transaction argument must be a function.\")\n\t\t}\n\t\t// txnFn, {onSuccess, onFail}, roots, namespace, parentCache\n\t\tconst nestedTransaction = new Transaction(fn, {onSuccess: this.onSuccess, onFail: this.onFail}, this.roots, this.namespace, this.cache)\n\t\tlet resultPromise = undefined\n\t\ttry {\n\t\t\tresultPromise = Promise.resolve(fn(nestedTransaction))\n\t\t} catch (e) {\n\t\t\tif (e instanceof TransactionRetryNeeded) {\n\t\t\t\tthis.shouldRetry = true\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\treturn resultPromise\n\t\t\t.then((result) => {\n\t\t\t\tnestedTransaction.promoteCache(undefined)\n\t\t\t\treturn result\n\t\t\t})\n\t}\n\n\t// private API\n\n\t/** @private\n\t * Gets the object id to use for the next `txn.create` and increments the counter.\n\t * @returns {Uint8Array}\n\t */\n\tgetNewObjectId() {\n\t\tconst objId = nextNewObjectId.concat(this.namespace)\n\t\tnextNewObjectId.inc()\n\t\treturn new Uint8Array(objId)\n\t}\n\n\n\t/** @private\n\t * Prepares this transaction to be run again.*/\n\treset() {\n\t\tthis.cache = this.parentCache.getTemporaryView()\n\t\tthis.shouldRetry = false\n\t\tthis.hasCacheMissed = false\n\t}\n\n\t/** @private\n\t * This transaction has completed successfully, notify the parent.*/\n\tpromoteCache(finalTxnId) {\n\t\tthis.cache.promote(finalTxnId)\n\t}\n\n\t/** @private */\n\ttoMessage(txnId) {\n\t\tconst anyChange = (entry) => entry.hasBeenCreated || entry.hasBeenWritten || entry.hasBeenRead\n\t\tconst justReads = (entry) => entry.hasBeenRead\n\t\tconst justCacheMisses = (entry) => entry.hasBeenRead && entry.hasData() === false\n\n\t\tlet filter = anyChange\n\t\tif (this.shouldRetry) {\n\t\t\tfilter = justReads\n\t\t} else if (this.hasCacheMissed) {\n\t\t\tfilter = justCacheMisses\n\t\t}\n\n\t\tconst actions = this.cache.getActions(this.namespace, filter)\n\t\treturn {\n\t\t\tClientTxnSubmission: {\n\t\t\t\tId: txnId,\n\t\t\t\tRetry: this.shouldRetry,\n\t\t\t\tActions: actions\n\t\t\t}\n\t\t}\n\t}\n}\n\nmodule.exports = Transaction//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24uanM/N2ZjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBSZWYgPSByZXF1aXJlKCcuL3JlZicpXG5jb25zdCB7VHJhbnNhY3Rpb25SZXRyeU5lZWRlZCwgQ2FwYWJpbGl0eURlbmllZH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7dG9BcnJheUJ1ZmZlcn0gPSByZXF1aXJlKCcuL3V0aWxzJylcbmNvbnN0IFVpbnQ2NCA9IHJlcXVpcmUoJy4vdWludDY0JylcblxuLyoqIEBwcml2YXRlICovXG5jb25zdCBuZXh0TmV3T2JqZWN0SWQgPSBVaW50NjQuZnJvbSgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKVxuXG4vKipcbiAqIEEgdHJhbnNhY3Rpb24gcmVwcmVzZW50cyBhbiBhdHRlbXB0IHRvIG1ha2UgYSBtb2RpZmljYXRpb24gdG8gdGhlIGRhdGFiYXNlLlxuICpcbiAqIFRoZSBjb2RlIGFzc29jaWF0ZWQgd2l0aCBpdCBtYXkgYmUgcmVxdWlyZWQgdG8gcnVuIG11bHRpcGxlIHRpbWVzIGJlZm9yZSBpdFxuICogc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4gIENhcmUgbXVzdCBiZSB0YWtlbiB0byBtYWtlIHN1cmUgdGhpcyB3aWxsIG5vdFxuICogYnJlYWsgdGhlIGNsaWVudCBlbnZpcm9ubWVudC5cbiAqXG4gKiBUcmFuc2FjdGlvbnMgYXJlIGFjcXVpcmVkIGJ5IGNhbGxpbmcge0BsaW5rIENvbm5lY3Rpb24jdHJhbnNhY3R9LlxuICovXG5jbGFzcyBUcmFuc2FjdGlvbiB7XG5cblx0LyoqIEBwcml2YXRlICovXG5cdGNvbnN0cnVjdG9yKHR4bkZuLCB7b25TdWNjZXNzLCBvbkZhaWx9LCByb290cywgbmFtZXNwYWNlLCBwYXJlbnRDYWNoZSkge1xuXHRcdC8qKiBAcHJpdmF0ZSAqL1xuXHRcdHRoaXMub25TdWNjZXNzID0gb25TdWNjZXNzO1xuXG5cdFx0LyoqIEBwcml2YXRlICovXG5cdFx0dGhpcy5vbkZhaWwgPSBvbkZhaWw7XG5cblx0XHQvKiogQHByaXZhdGUgKi9cblx0XHR0aGlzLnNob3VsZFJldHJ5ID0gZmFsc2VcblxuXHRcdC8qKiBAcHJpdmF0ZSAqL1xuXHRcdHRoaXMuaGFzQ2FjaGVNaXNzZWQgPSBmYWxzZVxuXG5cdFx0LyoqIEBwcml2YXRlICovXG5cdFx0dGhpcy5uYW1lc3BhY2UgPSBuYW1lc3BhY2VcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSByb290cyB0aGF0IHRoaXMgY2xpZW50IGhhcyBhY2Nlc3MgdG8uXG5cdFx0ICogQHR5cGUge3tzdHJpbmc6IFJlZn19XG5cdFx0ICovXG5cdFx0dGhpcy5yb290cyA9IHJvb3RzXG5cblx0XHQvKiogQHByaXZhdGUgKi9cblx0XHR0aGlzLmZuID0gdHhuRm5cblxuXHRcdC8qKiBAcHJpdmF0ZSAqL1xuXHRcdHRoaXMucGFyZW50Q2FjaGUgPSBwYXJlbnRDYWNoZVxuXG5cdFx0LyoqIEBwcml2YXRlICovXG5cdFx0dGhpcy5jYWNoZSA9IHBhcmVudENhY2hlLmdldFRlbXBvcmFyeVZpZXcoKVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlYWRzIHRoZSB2YWx1ZSBhbmQgcmVmZXJlbmNlcyBmcm9tIGFuIG9iamVjdCBwb2ludGVkIHRvIGJ5IGEgUmVmLlxuXHQgKiBAcGFyYW0ge1JlZn0gcmVmIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdG8gcmVhZCBmcm9tLlxuXHQgKiBAcmV0dXJucyB7e3ZhbHVlOkFycmF5QnVmZmVyLCByZWZzOlJlZltdfX1cblx0ICogQHRocm93cyB7Q2FwYWJpbGl0eURlbmllZH0gaWYgcmVmIGRvZXMgbm90IGhhdmUgcmVhZCBjYXBhYmlsaXR5LlxuXHQgKiBAdGhyb3dzIHtUcmFuc2FjdGlvblJldHJ5TmVlZGVkfSBpZiB0aGUgb2JqZWN0IGlzIG5vdCBpbiBjYWNoZS4gRG8gbm90IGNhdGNoIHRoaXMgd2l0aG91dCByZXRocm93aW5nIGl0LlxuXHQgKi9cblx0cmVhZChyZWYpIHtcblx0XHRpZiAocmVmIGluc3RhbmNlb2YgUmVmID09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW4gb25seSByZWFkIGEgcmVmZXJlbmNlOyB5b3UgdHJpZWQgdG8gcmVhZCBmcm9tICR7U3RyaW5nKHJlZil9YClcblx0XHR9XG5cdFx0aWYgKCFyZWYucmVhZCkge1xuXHRcdFx0dGhyb3cgbmV3IENhcGFiaWxpdHlEZW5pZWQoYFVuYWJsZSB0byByZWFkIHVzaW5nIHJlZmVyZW5jZSAke3JlZi50b1N0cmluZygpfSwgYXMgaXQgZG9lc24ndCBhbGxvdyByZWFkcy5gKVxuXHRcdH1cblx0XHRjb25zdCBpZCA9IHJlZi52YXJJZFxuXHRcdGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLmNhY2hlLmdldChpZClcblx0XHRpZiAoY2FjaGVFbnRyeS5oYXNEYXRhKCkgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzLmhhc0NhY2hlTWlzc2VkID0gdHJ1ZVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGVFbnRyeS5yZWFkKClcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSB2YWx1ZSBhbiBkcmVmZXJlbmNlcyBvZiBhbiBvYmplY3QgcG9pbnRlZCB0byBieSBhIFJlZi5cblx0ICogQHBhcmFtIHtSZWZ9IHJlZiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4uXG5cdCAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ8QnVmZmVyfFR5cGVkQXJyYXl9IHZhbHVlIHRoZSBuZXcgdmFsdWUgdG8gYmUgc3RvcmVkIGluIHRoZSBvYmplY3QuXG5cdCAqIEBwYXJhbSB7UmVmW119IHJlZnMgdGhlIHJlZmVyZW5jZXMgZnJvbSB0aGlzIG9iamVjdCB0byBvdGhlciBvYmplY3RzLlxuXHQgKi9cblx0d3JpdGUocmVmLCB2YWx1ZSwgcmVmcykge1xuXHRcdGlmIChyZWYgaW5zdGFuY2VvZiBSZWYgPT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYENhbiBvbmx5IHdyaXRlIHdpdGggYSByZWZlcmVuY2U7IHlvdSB0cmllZCB0byB3cml0ZSB0byAke1N0cmluZyhyZWYpfS5gKVxuXHRcdH1cblx0XHRpZiAoIXJlZi53cml0ZSkge1xuXHRcdFx0dGhyb3cgbmV3IENhcGFiaWxpdHlEZW5pZWQoYFVuYWJsZSB0byB3cml0ZSB1c2luZyByZWZlcmVuY2UgJHtyZWYudG9TdHJpbmcoKX0sIGFzIGl0IGRvZXNuJ3QgYWxsb3cgd3JpdGVzLmApXG5cdFx0fVxuXHRcdHZhbHVlID0gdG9BcnJheUJ1ZmZlcih2YWx1ZSlcblx0XHRjb25zdCBpZCA9IHJlZi52YXJJZFxuXHRcdGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLmNhY2hlLmdldChpZClcblx0XHRjYWNoZUVudHJ5LndyaXRlKHZhbHVlLCByZWZzKVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSByZWZlcmVuY2UgdG8gaXQuXG5cdCAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ8QnVmZmVyfFR5cGVkQXJyYXl9IHZhbHVlIHRoZSB2YWx1ZSB0aGF0IHRoZSBuZXcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB3aXRoLlxuXHQgKiBAcGFyYW0ge1JlZltdfSByZWZzIHRoZSByZWZlcmVuY2VzIHRoYXQgdGhlIG5ldyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHdpdGguICBUaGlzIHdpbGwgZGVmYXVsdCB0byB0aGUgZW1wdHkgYXJyYXkuXG5cdCAqIEByZXR1cm5zIHtSZWZ9IGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC5cblx0ICovXG5cdGNyZWF0ZSh2YWx1ZSwgcmVmcyA9IFtdKSB7XG5cdFx0dmFsdWUgPSB0b0FycmF5QnVmZmVyKHZhbHVlKVxuXHRcdGNvbnN0IG5ld0lkID0gdGhpcy5nZXROZXdPYmplY3RJZCgpXG5cdFx0Y29uc3QgY2FjaGVFbnRyeSA9IHRoaXMuY2FjaGUuZ2V0KG5ld0lkKVxuXHRcdGNhY2hlRW50cnkuY3JlYXRlKHZhbHVlLCByZWZzKVxuXHRcdHJldHVybiBuZXcgUmVmKG5ldyBVaW50OEFycmF5KG5ld0lkKSwgdHJ1ZSwgdHJ1ZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYW5kIHdhaXRzIGZvciBhbnkgb2YgdGhlIHZhbHVlcyB0aGF0IGhhdmUgYmVlblxuXHQgKiByZWFkIHRvIGNoYW5nZSBiZWZvcmUgcmVydW5uaW5nLiAgTm8gZnVydGhlciB0cmFuc2FjdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgd2hpbGVcblx0ICogYSB0cmFuc2FjdGlvbiBpcyB3YWl0aW5nLlxuXHQgKlxuXHQgKiBJbnRlcm5hbGx5LCB0aGlzIG1ldGhvZCB0aHJvd3MgYSBUcmFuc2FjdGlvblJldHJ5TmVlZGVkIGVycm9yLiAgSWYgeW91IGNhdGNoIGl0XG5cdCAqIGFuZCBkbyBub3QgcmV0aHJvdyBpdCwgeW91IHdpbGwgc3RvcCB0aGUgcmV0cnkgYmVoYXZpb3VyIGZyb20gd29ya2luZy5cblx0ICpcblx0ICogQHRocm93cyB7VHJhbnNhY3Rpb25SZXRyeU5lZWRlZH1cblx0ICovXG5cdHJldHJ5KCkge1xuXHRcdHRoaXMuc2hvdWxkUmV0cnkgPSB0cnVlXG5cdFx0dGhyb3cgbmV3IFRyYW5zYWN0aW9uUmV0cnlOZWVkZWQoXCJUcmFuc2FjdGlvbiBjb2RlIGNhbGxlZCByZXRyeS5cIilcblx0fVxuXG5cdC8qKlxuXHQgKiBSdW5zIGEgbmVzdGVkIHRyYW5zYWN0aW9uIGluc2lkZSB0aGlzIHRyYW5zYWN0aW9uLlxuXHQgKlxuXHQgKiBJZiBhIG5lc3RlZCB0cmFuc2FjdGlvbiBmYWlscywgaXRzIG1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgc2VlbiBieSB0aGUgcGFyZW50IHRyYW5zYWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiB0aGUgdHJhbnNhY3Rpb24gZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBydW4gbXVsdGlwbGUgdGltZXMgYW5kIHNob3VsZCByZXRocm93IGFueVxuXHQgKiBcdFx0XHRcdFx0XHRcdFRyYW5zYWN0aW9uUmV0cnlOZWVkZWQgZXhjZXB0aW9ucy5cblx0ICogQHJldHVybnMge1Byb21pc2U8KiwgRXJyb3I+fSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmVzdWx0IG9mIHRoZSB0cmFuc2FjdGlvbiBmdW5jdGlvbiBvbmNlIHRoZSB0cmFuc2FjdGlvblxuXHQgKiBcdFx0XHRcdFx0XHRcdHN1Ym1pdHMgb3IgYW4gZXJyb3IgaWYgaXQgY2Fubm90LlxuXHQgKi9cblx0dHJhbnNhY3QoZm4pIHtcblx0XHRpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJUcmFuc2FjdGlvbiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpXG5cdFx0fVxuXHRcdC8vIHR4bkZuLCB7b25TdWNjZXNzLCBvbkZhaWx9LCByb290cywgbmFtZXNwYWNlLCBwYXJlbnRDYWNoZVxuXHRcdGNvbnN0IG5lc3RlZFRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGZuLCB7b25TdWNjZXNzOiB0aGlzLm9uU3VjY2Vzcywgb25GYWlsOiB0aGlzLm9uRmFpbH0sIHRoaXMucm9vdHMsIHRoaXMubmFtZXNwYWNlLCB0aGlzLmNhY2hlKVxuXHRcdGxldCByZXN1bHRQcm9taXNlID0gdW5kZWZpbmVkXG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZm4obmVzdGVkVHJhbnNhY3Rpb24pKVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmIChlIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25SZXRyeU5lZWRlZCkge1xuXHRcdFx0XHR0aGlzLnNob3VsZFJldHJ5ID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHRQcm9taXNlXG5cdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdG5lc3RlZFRyYW5zYWN0aW9uLnByb21vdGVDYWNoZSh1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiByZXN1bHRcblx0XHRcdH0pXG5cdH1cblxuXHQvLyBwcml2YXRlIEFQSVxuXG5cdC8qKiBAcHJpdmF0ZVxuXHQgKiBHZXRzIHRoZSBvYmplY3QgaWQgdG8gdXNlIGZvciB0aGUgbmV4dCBgdHhuLmNyZWF0ZWAgYW5kIGluY3JlbWVudHMgdGhlIGNvdW50ZXIuXG5cdCAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuXHQgKi9cblx0Z2V0TmV3T2JqZWN0SWQoKSB7XG5cdFx0Y29uc3Qgb2JqSWQgPSBuZXh0TmV3T2JqZWN0SWQuY29uY2F0KHRoaXMubmFtZXNwYWNlKVxuXHRcdG5leHROZXdPYmplY3RJZC5pbmMoKVxuXHRcdHJldHVybiBuZXcgVWludDhBcnJheShvYmpJZClcblx0fVxuXG5cblx0LyoqIEBwcml2YXRlXG5cdCAqIFByZXBhcmVzIHRoaXMgdHJhbnNhY3Rpb24gdG8gYmUgcnVuIGFnYWluLiovXG5cdHJlc2V0KCkge1xuXHRcdHRoaXMuY2FjaGUgPSB0aGlzLnBhcmVudENhY2hlLmdldFRlbXBvcmFyeVZpZXcoKVxuXHRcdHRoaXMuc2hvdWxkUmV0cnkgPSBmYWxzZVxuXHRcdHRoaXMuaGFzQ2FjaGVNaXNzZWQgPSBmYWxzZVxuXHR9XG5cblx0LyoqIEBwcml2YXRlXG5cdCAqIFRoaXMgdHJhbnNhY3Rpb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIG5vdGlmeSB0aGUgcGFyZW50LiovXG5cdHByb21vdGVDYWNoZShmaW5hbFR4bklkKSB7XG5cdFx0dGhpcy5jYWNoZS5wcm9tb3RlKGZpbmFsVHhuSWQpXG5cdH1cblxuXHQvKiogQHByaXZhdGUgKi9cblx0dG9NZXNzYWdlKHR4bklkKSB7XG5cdFx0Y29uc3QgYW55Q2hhbmdlID0gKGVudHJ5KSA9PiBlbnRyeS5oYXNCZWVuQ3JlYXRlZCB8fCBlbnRyeS5oYXNCZWVuV3JpdHRlbiB8fCBlbnRyeS5oYXNCZWVuUmVhZFxuXHRcdGNvbnN0IGp1c3RSZWFkcyA9IChlbnRyeSkgPT4gZW50cnkuaGFzQmVlblJlYWRcblx0XHRjb25zdCBqdXN0Q2FjaGVNaXNzZXMgPSAoZW50cnkpID0+IGVudHJ5Lmhhc0JlZW5SZWFkICYmIGVudHJ5Lmhhc0RhdGEoKSA9PT0gZmFsc2VcblxuXHRcdGxldCBmaWx0ZXIgPSBhbnlDaGFuZ2Vcblx0XHRpZiAodGhpcy5zaG91bGRSZXRyeSkge1xuXHRcdFx0ZmlsdGVyID0ganVzdFJlYWRzXG5cdFx0fSBlbHNlIGlmICh0aGlzLmhhc0NhY2hlTWlzc2VkKSB7XG5cdFx0XHRmaWx0ZXIgPSBqdXN0Q2FjaGVNaXNzZXNcblx0XHR9XG5cblx0XHRjb25zdCBhY3Rpb25zID0gdGhpcy5jYWNoZS5nZXRBY3Rpb25zKHRoaXMubmFtZXNwYWNlLCBmaWx0ZXIpXG5cdFx0cmV0dXJuIHtcblx0XHRcdENsaWVudFR4blN1Ym1pc3Npb246IHtcblx0XHRcdFx0SWQ6IHR4bklkLFxuXHRcdFx0XHRSZXRyeTogdGhpcy5zaG91bGRSZXRyeSxcblx0XHRcdFx0QWN0aW9uczogYWN0aW9uc1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zYWN0aW9uXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdHJhbnNhY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9");
/***/ }),
/* 15 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_15__;
/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__(6)\n\nmodule.exports.binaryToHex = __webpack_require__(0).binaryToHex\nmodule.exports.Uint64 = __webpack_require__(2)\nmodule.exports.errors = __webpack_require__(1)//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbmRleC5qcz8yNjQ1Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9zcmMvZ29zaGF3a2RiJylcblxubW9kdWxlLmV4cG9ydHMuYmluYXJ5VG9IZXggPSByZXF1aXJlKCcuL3NyYy91dGlscycpLmJpbmFyeVRvSGV4XG5tb2R1bGUuZXhwb3J0cy5VaW50NjQgPSByZXF1aXJlKCcuL3NyYy91aW50NjQnKVxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gcmVxdWlyZSgnLi9zcmMvZXJyb3JzJylcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=");
/***/ })
/******/ ]);
});