superagent 8.0.1 → 8.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/superagent.js +31 -615
- package/dist/superagent.min.js +1 -1
- package/lib/agent-base.js +2 -12
- package/lib/client.js +90 -161
- package/lib/node/agent.js +10 -30
- package/lib/node/http2wrapper.js +14 -55
- package/lib/node/index.js +171 -283
- package/lib/node/parsers/image.js +1 -1
- package/lib/node/parsers/index.js +1 -3
- package/lib/node/parsers/json.js +5 -6
- package/lib/node/parsers/text.js +1 -1
- package/lib/node/parsers/urlencoded.js +2 -2
- package/lib/node/response.js +14 -19
- package/lib/node/unzip.js +14 -15
- package/lib/request-base.js +58 -107
- package/lib/response-base.js +20 -13
- package/lib/utils.js +11 -24
- package/package.json +14 -14
package/lib/node/agent.js
CHANGED
|
@@ -1,35 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
4
|
-
|
|
5
4
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
-
|
|
7
5
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
8
|
-
|
|
9
6
|
/**
|
|
10
7
|
* Module dependencies.
|
|
11
8
|
*/
|
|
9
|
+
|
|
12
10
|
// eslint-disable-next-line node/no-deprecated-api
|
|
13
11
|
const _require = require('url'),
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
parse = _require.parse;
|
|
16
13
|
const _require2 = require('cookiejar'),
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
CookieJar = _require2.CookieJar;
|
|
19
15
|
const _require3 = require('cookiejar'),
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
CookieAccessInfo = _require3.CookieAccessInfo;
|
|
22
17
|
const methods = require('methods');
|
|
23
|
-
|
|
24
18
|
const request = require('../..');
|
|
25
|
-
|
|
26
19
|
const AgentBase = require('../agent-base');
|
|
20
|
+
|
|
27
21
|
/**
|
|
28
22
|
* Expose `Agent`.
|
|
29
23
|
*/
|
|
30
24
|
|
|
31
|
-
|
|
32
25
|
module.exports = Agent;
|
|
26
|
+
|
|
33
27
|
/**
|
|
34
28
|
* Initialize a new `Agent`.
|
|
35
29
|
*
|
|
@@ -40,34 +34,28 @@ function Agent(options) {
|
|
|
40
34
|
if (!(this instanceof Agent)) {
|
|
41
35
|
return new Agent(options);
|
|
42
36
|
}
|
|
43
|
-
|
|
44
37
|
AgentBase.call(this);
|
|
45
38
|
this.jar = new CookieJar();
|
|
46
|
-
|
|
47
39
|
if (options) {
|
|
48
40
|
if (options.ca) {
|
|
49
41
|
this.ca(options.ca);
|
|
50
42
|
}
|
|
51
|
-
|
|
52
43
|
if (options.key) {
|
|
53
44
|
this.key(options.key);
|
|
54
45
|
}
|
|
55
|
-
|
|
56
46
|
if (options.pfx) {
|
|
57
47
|
this.pfx(options.pfx);
|
|
58
48
|
}
|
|
59
|
-
|
|
60
49
|
if (options.cert) {
|
|
61
50
|
this.cert(options.cert);
|
|
62
51
|
}
|
|
63
|
-
|
|
64
52
|
if (options.rejectUnauthorized === false) {
|
|
65
53
|
this.disableTLSCerts();
|
|
66
54
|
}
|
|
67
55
|
}
|
|
68
56
|
}
|
|
69
|
-
|
|
70
57
|
Agent.prototype = Object.create(AgentBase.prototype);
|
|
58
|
+
|
|
71
59
|
/**
|
|
72
60
|
* Save the cookies in the given `res` to
|
|
73
61
|
* the agent's cookie jar for persistence.
|
|
@@ -80,6 +68,7 @@ Agent.prototype._saveCookies = function (res) {
|
|
|
80
68
|
const cookies = res.headers['set-cookie'];
|
|
81
69
|
if (cookies) this.jar.setCookies(cookies);
|
|
82
70
|
};
|
|
71
|
+
|
|
83
72
|
/**
|
|
84
73
|
* Attach cookies when available to the given `req`.
|
|
85
74
|
*
|
|
@@ -87,36 +76,28 @@ Agent.prototype._saveCookies = function (res) {
|
|
|
87
76
|
* @api private
|
|
88
77
|
*/
|
|
89
78
|
|
|
90
|
-
|
|
91
79
|
Agent.prototype._attachCookies = function (request_) {
|
|
92
80
|
const url = parse(request_.url);
|
|
93
81
|
const access = new CookieAccessInfo(url.hostname, url.pathname, url.protocol === 'https:');
|
|
94
82
|
const cookies = this.jar.getCookies(access).toValueString();
|
|
95
83
|
request_.cookies = cookies;
|
|
96
84
|
};
|
|
97
|
-
|
|
98
85
|
var _iterator = _createForOfIteratorHelper(methods),
|
|
99
|
-
|
|
100
|
-
|
|
86
|
+
_step;
|
|
101
87
|
try {
|
|
102
88
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
103
89
|
const name = _step.value;
|
|
104
90
|
const method = name.toUpperCase();
|
|
105
|
-
|
|
106
91
|
Agent.prototype[name] = function (url, fn) {
|
|
107
92
|
const request_ = new request.Request(method, url);
|
|
108
93
|
request_.on('response', this._saveCookies.bind(this));
|
|
109
94
|
request_.on('redirect', this._saveCookies.bind(this));
|
|
110
95
|
request_.on('redirect', this._attachCookies.bind(this, request_));
|
|
111
|
-
|
|
112
96
|
this._setDefaults(request_);
|
|
113
|
-
|
|
114
97
|
this._attachCookies(request_);
|
|
115
|
-
|
|
116
98
|
if (fn) {
|
|
117
99
|
request_.end(fn);
|
|
118
100
|
}
|
|
119
|
-
|
|
120
101
|
return request_;
|
|
121
102
|
};
|
|
122
103
|
}
|
|
@@ -125,6 +106,5 @@ try {
|
|
|
125
106
|
} finally {
|
|
126
107
|
_iterator.f();
|
|
127
108
|
}
|
|
128
|
-
|
|
129
109
|
Agent.prototype.del = Agent.prototype.delete;
|
|
130
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwicGFyc2UiLCJDb29raWVKYXIiLCJDb29raWVBY2Nlc3NJbmZvIiwibWV0aG9kcyIsInJlcXVlc3QiLCJBZ2VudEJhc2UiLCJtb2R1bGUiLCJleHBvcnRzIiwiQWdlbnQiLCJvcHRpb25zIiwiY2FsbCIsImphciIsImNhIiwia2V5IiwicGZ4IiwiY2VydCIsInJlamVjdFVuYXV0aG9yaXplZCIsImRpc2FibGVUTFNDZXJ0cyIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsIl9zYXZlQ29va2llcyIsInJlcyIsImNvb2tpZXMiLCJoZWFkZXJzIiwic2V0Q29va2llcyIsIl9hdHRhY2hDb29raWVzIiwicmVxdWVzdF8iLCJ1cmwiLCJhY2Nlc3MiLCJob3N0bmFtZSIsInBhdGhuYW1lIiwicHJvdG9jb2wiLCJnZXRDb29raWVzIiwidG9WYWx1ZVN0cmluZyIsIm5hbWUiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsImZuIiwiUmVxdWVzdCIsIm9uIiwiYmluZCIsIl9zZXREZWZhdWx0cyIsImVuZCIsImRlbCIsImRlbGV0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2FnZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby1kZXByZWNhdGVkLWFwaVxuY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCB7IENvb2tpZUphciB9ID0gcmVxdWlyZSgnY29va2llamFyJyk7XG5jb25zdCB7IENvb2tpZUFjY2Vzc0luZm8gfSA9IHJlcXVpcmUoJ2Nvb2tpZWphcicpO1xuY29uc3QgbWV0aG9kcyA9IHJlcXVpcmUoJ21ldGhvZHMnKTtcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCcuLi8uLicpO1xuY29uc3QgQWdlbnRCYXNlID0gcmVxdWlyZSgnLi4vYWdlbnQtYmFzZScpO1xuXG4vKipcbiAqIEV4cG9zZSBgQWdlbnRgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnQ7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgQWdlbnRgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gQWdlbnQob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWdlbnQpKSB7XG4gICAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKTtcbiAgfVxuXG4gIEFnZW50QmFzZS5jYWxsKHRoaXMpO1xuICB0aGlzLmphciA9IG5ldyBDb29raWVKYXIoKTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmNhKSB7XG4gICAgICB0aGlzLmNhKG9wdGlvbnMuY2EpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmtleSkge1xuICAgICAgdGhpcy5rZXkob3B0aW9ucy5rZXkpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBmeCkge1xuICAgICAgdGhpcy5wZngob3B0aW9ucy5wZngpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNlcnQpIHtcbiAgICAgIHRoaXMuY2VydChvcHRpb25zLmNlcnQpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGlzYWJsZVRMU0NlcnRzKCk7XG4gICAgfVxuICB9XG59XG5cbkFnZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWdlbnRCYXNlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogU2F2ZSB0aGUgY29va2llcyBpbiB0aGUgZ2l2ZW4gYHJlc2AgdG9cbiAqIHRoZSBhZ2VudCdzIGNvb2tpZSBqYXIgZm9yIHBlcnNpc3RlbmNlLlxuICpcbiAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQWdlbnQucHJvdG90eXBlLl9zYXZlQ29va2llcyA9IGZ1bmN0aW9uIChyZXMpIHtcbiAgY29uc3QgY29va2llcyA9IHJlcy5oZWFkZXJzWydzZXQtY29va2llJ107XG4gIGlmIChjb29raWVzKSB0aGlzLmphci5zZXRDb29raWVzKGNvb2tpZXMpO1xufTtcblxuLyoqXG4gKiBBdHRhY2ggY29va2llcyB3aGVuIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gYHJlcWAuXG4gKlxuICogQHBhcmFtIHtSZXF1ZXN0fSByZXFcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkFnZW50LnByb3RvdHlwZS5fYXR0YWNoQ29va2llcyA9IGZ1bmN0aW9uIChyZXF1ZXN0Xykge1xuICBjb25zdCB1cmwgPSBwYXJzZShyZXF1ZXN0Xy51cmwpO1xuICBjb25zdCBhY2Nlc3MgPSBuZXcgQ29va2llQWNjZXNzSW5mbyhcbiAgICB1cmwuaG9zdG5hbWUsXG4gICAgdXJsLnBhdGhuYW1lLFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKTtcbiAgY29uc3QgY29va2llcyA9IHRoaXMuamFyLmdldENvb2tpZXMoYWNjZXNzKS50b1ZhbHVlU3RyaW5nKCk7XG4gIHJlcXVlc3RfLmNvb2tpZXMgPSBjb29raWVzO1xufTtcblxuZm9yIChjb25zdCBuYW1lIG9mIG1ldGhvZHMpIHtcbiAgY29uc3QgbWV0aG9kID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICBBZ2VudC5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodXJsLCBmbikge1xuICAgIGNvbnN0IHJlcXVlc3RfID0gbmV3IHJlcXVlc3QuUmVxdWVzdChtZXRob2QsIHVybCk7XG5cbiAgICByZXF1ZXN0Xy5vbigncmVzcG9uc2UnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9zYXZlQ29va2llcy5iaW5kKHRoaXMpKTtcbiAgICByZXF1ZXN0Xy5vbigncmVkaXJlY3QnLCB0aGlzLl9hdHRhY2hDb29raWVzLmJpbmQodGhpcywgcmVxdWVzdF8pKTtcbiAgICB0aGlzLl9zZXREZWZhdWx0cyhyZXF1ZXN0Xyk7XG4gICAgdGhpcy5fYXR0YWNoQ29va2llcyhyZXF1ZXN0Xyk7XG5cbiAgICBpZiAoZm4pIHtcbiAgICAgIHJlcXVlc3RfLmVuZChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RfO1xuICB9O1xufVxuXG5BZ2VudC5wcm90b3R5cGUuZGVsID0gQWdlbnQucHJvdG90eXBlLmRlbGV0ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBa0JBLE9BQU8sQ0FBQyxLQUFLLENBQUM7RUFBeEJDLEtBQUssWUFBTEEsS0FBSztBQUNiLGtCQUFzQkQsT0FBTyxDQUFDLFdBQVcsQ0FBQztFQUFsQ0UsU0FBUyxhQUFUQSxTQUFTO0FBQ2pCLGtCQUE2QkYsT0FBTyxDQUFDLFdBQVcsQ0FBQztFQUF6Q0csZ0JBQWdCLGFBQWhCQSxnQkFBZ0I7QUFDeEIsTUFBTUMsT0FBTyxHQUFHSixPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1LLE9BQU8sR0FBR0wsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNoQyxNQUFNTSxTQUFTLEdBQUdOLE9BQU8sQ0FBQyxlQUFlLENBQUM7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQU8sTUFBTSxDQUFDQyxPQUFPLEdBQUdDLEtBQUs7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBU0EsS0FBSyxDQUFDQyxPQUFPLEVBQUU7RUFDdEIsSUFBSSxFQUFFLElBQUksWUFBWUQsS0FBSyxDQUFDLEVBQUU7SUFDNUIsT0FBTyxJQUFJQSxLQUFLLENBQUNDLE9BQU8sQ0FBQztFQUMzQjtFQUVBSixTQUFTLENBQUNLLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDcEIsSUFBSSxDQUFDQyxHQUFHLEdBQUcsSUFBSVYsU0FBUyxFQUFFO0VBRTFCLElBQUlRLE9BQU8sRUFBRTtJQUNYLElBQUlBLE9BQU8sQ0FBQ0csRUFBRSxFQUFFO01BQ2QsSUFBSSxDQUFDQSxFQUFFLENBQUNILE9BQU8sQ0FBQ0csRUFBRSxD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
|
package/lib/node/http2wrapper.js
CHANGED
|
@@ -1,47 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
|
-
|
|
5
4
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
-
|
|
7
5
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
-
|
|
9
6
|
const Stream = require('stream');
|
|
10
|
-
|
|
11
7
|
const util = require('util');
|
|
12
|
-
|
|
13
8
|
const net = require('net');
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
const tls = require('tls');
|
|
10
|
+
// eslint-disable-next-line node/no-deprecated-api
|
|
18
11
|
const _require = require('url'),
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
parse = _require.parse;
|
|
21
13
|
const process = require('process');
|
|
22
|
-
|
|
23
14
|
const semverGte = require('semver/functions/gte');
|
|
24
|
-
|
|
25
15
|
let http2;
|
|
26
16
|
if (semverGte(process.version, 'v10.10.0')) http2 = require('http2');else throw new Error('superagent: this version of Node.js does not support http2');
|
|
27
17
|
const _http2$constants = http2.constants,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
18
|
+
HTTP2_HEADER_PATH = _http2$constants.HTTP2_HEADER_PATH,
|
|
19
|
+
HTTP2_HEADER_STATUS = _http2$constants.HTTP2_HEADER_STATUS,
|
|
20
|
+
HTTP2_HEADER_METHOD = _http2$constants.HTTP2_HEADER_METHOD,
|
|
21
|
+
HTTP2_HEADER_AUTHORITY = _http2$constants.HTTP2_HEADER_AUTHORITY,
|
|
22
|
+
HTTP2_HEADER_HOST = _http2$constants.HTTP2_HEADER_HOST,
|
|
23
|
+
HTTP2_HEADER_SET_COOKIE = _http2$constants.HTTP2_HEADER_SET_COOKIE,
|
|
24
|
+
NGHTTP2_CANCEL = _http2$constants.NGHTTP2_CANCEL;
|
|
36
25
|
function setProtocol(protocol) {
|
|
37
26
|
return {
|
|
38
27
|
request(options) {
|
|
39
28
|
return new Request(protocol, options);
|
|
40
29
|
}
|
|
41
|
-
|
|
42
30
|
};
|
|
43
31
|
}
|
|
44
|
-
|
|
45
32
|
function Request(protocol, options) {
|
|
46
33
|
Stream.call(this);
|
|
47
34
|
const defaultPort = protocol === 'https:' ? 443 : 80;
|
|
@@ -56,53 +43,44 @@ function Request(protocol, options) {
|
|
|
56
43
|
this.host = host;
|
|
57
44
|
delete options.method;
|
|
58
45
|
delete options.path;
|
|
59
|
-
|
|
60
46
|
const sessionOptions = _objectSpread({}, options);
|
|
61
|
-
|
|
62
47
|
if (options.socketPath) {
|
|
63
48
|
sessionOptions.socketPath = options.socketPath;
|
|
64
49
|
sessionOptions.createConnection = this.createUnixConnection.bind(this);
|
|
65
50
|
}
|
|
66
|
-
|
|
67
51
|
this._headers = {};
|
|
68
52
|
const session = http2.connect(`${protocol}//${host}:${port}`, sessionOptions);
|
|
69
53
|
this.setHeader('host', `${host}:${port}`);
|
|
70
54
|
session.on('error', error => this.emit('error', error));
|
|
71
55
|
this.session = session;
|
|
72
56
|
}
|
|
57
|
+
|
|
73
58
|
/**
|
|
74
59
|
* Inherit from `Stream` (which inherits from `EventEmitter`).
|
|
75
60
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
61
|
util.inherits(Request, Stream);
|
|
79
|
-
|
|
80
62
|
Request.prototype.createUnixConnection = function (authority, options) {
|
|
81
63
|
switch (this.protocol) {
|
|
82
64
|
case 'http:':
|
|
83
65
|
return net.connect(options.socketPath);
|
|
84
|
-
|
|
85
66
|
case 'https:':
|
|
86
67
|
options.ALPNProtocols = ['h2'];
|
|
87
68
|
options.servername = this.host;
|
|
88
69
|
options.allowHalfOpen = true;
|
|
89
70
|
return tls.connect(options.socketPath, options);
|
|
90
|
-
|
|
91
71
|
default:
|
|
92
72
|
throw new Error('Unsupported protocol', this.protocol);
|
|
93
73
|
}
|
|
94
74
|
};
|
|
95
|
-
|
|
96
|
-
|
|
75
|
+
Request.prototype.setNoDelay = function (bool) {
|
|
76
|
+
// We can not use setNoDelay with HTTP/2.
|
|
97
77
|
// Node 10 limits http2session.socket methods to ones safe to use with HTTP/2.
|
|
98
78
|
// See also https://nodejs.org/api/http2.html#http2_http2session_socket
|
|
99
79
|
};
|
|
100
|
-
|
|
101
80
|
Request.prototype.getFrame = function () {
|
|
102
81
|
if (this.frame) {
|
|
103
82
|
return this.frame;
|
|
104
83
|
}
|
|
105
|
-
|
|
106
84
|
const method = {
|
|
107
85
|
[HTTP2_HEADER_PATH]: this.path,
|
|
108
86
|
[HTTP2_HEADER_METHOD]: this.method
|
|
@@ -124,84 +102,65 @@ Request.prototype.getFrame = function () {
|
|
|
124
102
|
this.frame = frame;
|
|
125
103
|
return frame;
|
|
126
104
|
};
|
|
127
|
-
|
|
128
105
|
Request.prototype.mapToHttpHeader = function (headers) {
|
|
129
106
|
const keys = Object.keys(headers);
|
|
130
107
|
const http2Headers = {};
|
|
131
|
-
|
|
132
108
|
for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
|
|
133
109
|
let key = _keys[_i];
|
|
134
110
|
let value = headers[key];
|
|
135
111
|
key = key.toLowerCase();
|
|
136
|
-
|
|
137
112
|
switch (key) {
|
|
138
113
|
case HTTP2_HEADER_SET_COOKIE:
|
|
139
114
|
value = Array.isArray(value) ? value : [value];
|
|
140
115
|
break;
|
|
141
|
-
|
|
142
116
|
default:
|
|
143
117
|
break;
|
|
144
118
|
}
|
|
145
|
-
|
|
146
119
|
http2Headers[key] = value;
|
|
147
120
|
}
|
|
148
|
-
|
|
149
121
|
return http2Headers;
|
|
150
122
|
};
|
|
151
|
-
|
|
152
123
|
Request.prototype.mapToHttp2Header = function (headers) {
|
|
153
124
|
const keys = Object.keys(headers);
|
|
154
125
|
const http2Headers = {};
|
|
155
|
-
|
|
156
126
|
for (var _i2 = 0, _keys2 = keys; _i2 < _keys2.length; _i2++) {
|
|
157
127
|
let key = _keys2[_i2];
|
|
158
128
|
let value = headers[key];
|
|
159
129
|
key = key.toLowerCase();
|
|
160
|
-
|
|
161
130
|
switch (key) {
|
|
162
131
|
case HTTP2_HEADER_HOST:
|
|
163
132
|
key = HTTP2_HEADER_AUTHORITY;
|
|
164
133
|
value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value;
|
|
165
134
|
break;
|
|
166
|
-
|
|
167
135
|
default:
|
|
168
136
|
break;
|
|
169
137
|
}
|
|
170
|
-
|
|
171
138
|
http2Headers[key] = value;
|
|
172
139
|
}
|
|
173
|
-
|
|
174
140
|
return http2Headers;
|
|
175
141
|
};
|
|
176
|
-
|
|
177
142
|
Request.prototype.setHeader = function (name, value) {
|
|
178
143
|
this._headers[name.toLowerCase()] = value;
|
|
179
144
|
};
|
|
180
|
-
|
|
181
145
|
Request.prototype.getHeader = function (name) {
|
|
182
146
|
return this._headers[name.toLowerCase()];
|
|
183
147
|
};
|
|
184
|
-
|
|
185
148
|
Request.prototype.write = function (data, encoding) {
|
|
186
149
|
const frame = this.getFrame();
|
|
187
150
|
return frame.write(data, encoding);
|
|
188
151
|
};
|
|
189
|
-
|
|
190
152
|
Request.prototype.pipe = function (stream, options) {
|
|
191
153
|
const frame = this.getFrame();
|
|
192
154
|
return frame.pipe(stream, options);
|
|
193
155
|
};
|
|
194
|
-
|
|
195
156
|
Request.prototype.end = function (data) {
|
|
196
157
|
const frame = this.getFrame();
|
|
197
158
|
frame.end(data);
|
|
198
159
|
};
|
|
199
|
-
|
|
200
160
|
Request.prototype.abort = function (data) {
|
|
201
161
|
const frame = this.getFrame();
|
|
202
162
|
frame.close(NGHTTP2_CANCEL);
|
|
203
163
|
this.session.destroy();
|
|
204
164
|
};
|
|
205
|
-
|
|
206
165
|
exports.setProtocol = setProtocol;
|
|
207
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJlYW0iLCJyZXF1aXJlIiwidXRpbCIsIm5ldCIsInRscyIsInBhcnNlIiwicHJvY2VzcyIsInNlbXZlckd0ZSIsImh0dHAyIiwidmVyc2lvbiIsIkVycm9yIiwiY29uc3RhbnRzIiwiSFRUUDJfSEVBREVSX1BBVEgiLCJIVFRQMl9IRUFERVJfU1RBVFVTIiwiSFRUUDJfSEVBREVSX01FVEhPRCIsIkhUVFAyX0hFQURFUl9BVVRIT1JJVFkiLCJIVFRQMl9IRUFERVJfSE9TVCIsIkhUVFAyX0hFQURFUl9TRVRfQ09PS0lFIiwiTkdIVFRQMl9DQU5DRUwiLCJzZXRQcm90b2NvbCIsInByb3RvY29sIiwicmVxdWVzdCIsIm9wdGlvbnMiLCJSZXF1ZXN0IiwiY2FsbCIsImRlZmF1bHRQb3J0IiwiZGVmYXVsdEhvc3QiLCJwb3J0IiwiaG9zdCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsInNvY2tldFBhdGgiLCJjcmVhdGVDb25uZWN0aW9uIiwiY3JlYXRlVW5peENvbm5lY3Rpb24iLCJiaW5kIiwiX2hlYWRlcnMiLCJzZXNzaW9uIiwiY29ubmVjdCIsInNldEhlYWRlciIsIm9uIiwiZXJyb3IiLCJlbWl0IiwiaW5oZXJpdHMiLCJwcm90b3R5cGUiLCJhdXRob3JpdHkiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsImFsbG93SGFsZk9wZW4iLCJzZXROb0RlbGF5IiwiYm9vbCIsImdldEZyYW1lIiwiZnJhbWUiLCJoZWFkZXJzIiwibWFwVG9IdHRwMkhlYWRlciIsIk9iamVjdCIsImFzc2lnbiIsIm9uY2UiLCJmbGFncyIsIm1hcFRvSHR0cEhlYWRlciIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJfaGVhZGVyU2VudCIsImNsb3NlIiwia2V5cyIsImh0dHAySGVhZGVycyIsImtleSIsInZhbHVlIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJ0ZXN0IiwibmFtZSIsImdldEhlYWRlciIsIndyaXRlIiwiZGF0YSIsImVuY29kaW5nIiwicGlwZSIsInN0cmVhbSIsImVuZCIsImFib3J0IiwiZGVzdHJveSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9odHRwMndyYXBwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG5jb25zdCB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpXG5jb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzJyk7XG5jb25zdCBzZW12ZXJHdGUgPSByZXF1aXJlKCdzZW12ZXIvZnVuY3Rpb25zL2d0ZScpO1xuXG5sZXQgaHR0cDI7XG5cbmlmIChzZW12ZXJHdGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCdodHRwMicpO1xuZWxzZVxuICB0aHJvdyBuZXcgRXJyb3IoJ3N1cGVyYWdlbnQ6IHRoaXMgdmVyc2lvbiBvZiBOb2RlLmpzIGRvZXMgbm90IHN1cHBvcnQgaHR0cDInKTtcblxuY29uc3Qge1xuICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgSFRUUDJfSEVBREVSX1NUQVRVUyxcbiAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgSFRUUDJfSEVBREVSX0FVVEhPUklUWSxcbiAgSFRUUDJfSEVBREVSX0hPU1QsXG4gIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFLFxuICBOR0hUVFAyX0NBTkNFTFxufSA9IGh0dHAyLmNvbnN0YW50cztcblxuZnVuY3Rpb24gc2V0UHJvdG9jb2wocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgUmVxdWVzdChwcm90b2NvbCwgb3B0aW9ucyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBSZXF1ZXN0KHByb3RvY29sLCBvcHRpb25zKSB7XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xuICBjb25zdCBkZWZhdWx0UG9ydCA9IHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICBjb25zdCBkZWZhdWx0SG9zdCA9ICdsb2NhbGhvc3QnO1xuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IGRlZmF1bHRQb3J0O1xuICBjb25zdCBob3N0ID0gb3B0aW9ucy5ob3N0IHx8IGRlZmF1bHRIb3N0O1xuXG4gIGRlbGV0ZSBvcHRpb25zLnBvcnQ7XG4gIGRlbGV0ZSBvcHRpb25zLmhvc3Q7XG5cbiAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoO1xuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMuaG9zdCA9IGhvc3Q7XG5cbiAgZGVsZXRlIG9wdGlvbnMubWV0aG9kO1xuICBkZWxldGUgb3B0aW9ucy5wYXRoO1xuXG4gIGNvbnN0IHNlc3Npb25PcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gIGlmIChvcHRpb25zLnNvY2tldFBhdGgpIHtcbiAgICBzZXNzaW9uT3B0aW9ucy5zb2NrZXRQYXRoID0gb3B0aW9ucy5zb2NrZXRQYXRoO1xuICAgIHNlc3Npb25PcHRpb25zLmNyZWF0ZUNvbm5lY3Rpb24gPSB0aGlzLmNyZWF0ZVVuaXhDb25uZWN0aW9uLmJpbmQodGhpcyk7XG4gIH1cblxuICB0aGlzLl9oZWFkZXJzID0ge307XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoYCR7cHJvdG9jb2x9Ly8ke2hvc3R9OiR7cG9ydH1gLCBzZXNzaW9uT3B0aW9ucyk7XG4gIHRoaXMuc2V0SGVhZGVyKCdob3N0JywgYCR7aG9zdH06JHtwb3J0fWApO1xuXG4gIHNlc3Npb24ub24oJ2Vycm9yJywgKGVycm9yKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xufVxuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYCAod2hpY2ggaW5oZXJpdHMgZnJvbSBgRXZlbnRFbWl0dGVyYCkuXG4gKi9cbnV0aWwuaW5oZXJpdHMoUmVxdWVzdCwgU3RyZWFtKTtcblxuUmVxdWVzdC5wcm90b3R5cGUuY3JlYXRlVW5peENvbm5lY3Rpb24gPSBmdW5jdGlvbiAoYXV0aG9yaXR5LCBvcHRpb25zKSB7XG4gIHN3aXRjaCAodGhpcy5wcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgIHJldHVybiBuZXQuY29ubmVjdChvcHRpb25zLnNvY2tldFBhdGgpO1xuICAgIGNhc2UgJ2h0dHBzOic6XG4gICAgICBvcHRpb25zLkFMUE5Qcm90b2NvbHMgPSBbJ2gyJ107XG4gICAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLmhvc3Q7XG4gICAgICBvcHRpb25zLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRscy5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCwgb3B0aW9ucyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wnLCB0aGlzLnByb3RvY29sKTtcbiAgfVxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuc2V0Tm9EZWxheSA9IGZ1bmN0aW9uIChib29sKSB7XG4gIC8vIFdlIGNhbiBub3QgdXNlIHNldE5vRGVsYXkgd2l0aCBIVFRQLzIuXG4gIC8vIE5vZGUgMTAgbGltaXRzIGh0dHAyc2Vzc2lvbi5zb2NrZXQgbWV0aG9kcyB0byBvbmVzIHNhZmUgdG8gdXNlIHdpdGggSFRUUC8yLlxuICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSB7XG4gICAgW0hUVFAyX0hFQURFUl9QQVRIXTogdGhpcy5wYXRoLFxuICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgfTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMubWFwVG9IdHRwMkhlYWRlcih0aGlzLl9oZWFkZXJzKTtcblxuICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gIGNvbnN0IGZyYW1lID0gdGhpcy5zZXNzaW9uLnJlcXVlc3QoaGVhZGVycyk7XG5cbiAgZnJhbWUub25jZSgncmVzcG9uc2UnLCAoaGVhZGVycywgZmxhZ3MpID0+IHtcbiAgICBoZWFkZXJzID0gdGhpcy5tYXBUb0h0dHBIZWFkZXIoaGVhZGVycyk7XG4gICAgZnJhbWUuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgZnJhbWUuc3RhdHVzQ29kZSA9IGhlYWRlcnNbSFRUUDJfSEVBREVSX1NUQVRVU107XG4gICAgZnJhbWUuc3RhdHVzID0gZnJhbWUuc3RhdHVzQ29kZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3BvbnNlJywgZnJhbWUpO1xuICB9KTtcblxuICB0aGlzLl9oZWFkZXJTZW50ID0gdHJ1ZTtcblxuICBmcmFtZS5vbmNlKCdkcmFpbicsICgpID0+IHRoaXMuZW1pdCgnZHJhaW4nKSk7XG4gIGZyYW1lLm9uKCdlcnJvcicsIChlcnJvcikgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKSk7XG4gIGZyYW1lLm9uKCdjbG9zZScsICgpID0+IHRoaXMuc2Vzc2lvbi5jbG9zZSgpKTtcblxuICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gIHJldHVybiBmcmFtZTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLm1hcFRvSHR0cEhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFOlxuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gaHR0cDJIZWFkZXJzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUubWFwVG9IdHRwMkhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlIEhUVFAyX0hFQURFUl9IT1NUOlxuICAgICAgICBrZXkgPSBIVFRQMl9IRUFERVJfQVVUSE9SSVRZO1xuICAgICAgICB2YWx1ZSA9IC9eaHR0cDpcXC9cXC98Xmh0dHBzOlxcL1xcLy8udGVzdCh2YWx1ZSlcbiAgICAgICAgICA/IHBhcnNlKHZhbHVlKS5ob3N0XG4gICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBodHRwMkhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGh0dHAySGVhZGVycztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmdldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgcmV0dXJuIGZyYW1lLndyaXRlKGRhdGEsIGVuY29kaW5nKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoc3RyZWFtLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZyYW1lID0gdGhpcy5nZXRGcmFtZSgpO1xuICByZXR1cm4gZnJhbWUucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIGZyYW1lLmVuZChkYXRhKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIGZyYW1lLmNsb3NlKE5HSFRUUDJfQ0FOQ0VMKTtcbiAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTtcbn07XG5cbmV4cG9ydHMuc2V0UHJvdG9jb2wgPSBzZXRQcm90b2NvbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsTUFBTUUsR0FBRyxHQUFHRixPQUFPLENBQUMsS0FBRCxDQUFuQjs7QUFDQSxNQUFNRyxHQUFHLEdBQUdILE9BQU8sQ0FBQyxLQUFELENBQW5CLEMsQ0FDQTs7O0FBQ0EsaUJBQWtCQSxPQUFPLENBQUMsS0FBRCxDQUF6QjtBQUFBLE1BQVFJLEtBQVIsWUFBUUEsS0FBUjs7QUFDQSxNQUFNQyxPQUFPLEdBQUdMLE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUNBLE1BQU1NLFNBQVMsR0FBR04sT0FBTyxDQUFDLHNCQUFELENBQXpCOztBQUVBLElBQUlPLEtBQUo7QUFFQSxJQUFJRCxTQUFTLENBQUNELE9BQU8sQ0FBQ0csT0FBVCxFQUFrQixVQUFsQixDQUFiLEVBQTRDRCxLQUFLLEdBQUdQLE9BQU8sQ0FBQyxPQUFELENBQWYsQ0FBNUMsS0FFRSxNQUFNLElBQUlTLEtBQUosQ0FBVSw0REFBVixDQUFOO0FBRUYseUJBUUlGLEtBQUssQ0FBQ0csU0FSVjtBQUFBLE1BQ0VDLGlCQURGLG9CQUNFQSxpQkFERjtBQUFBLE1BRUVDLG1CQUZGLG9CQUVFQSxtQkFGRjtBQUFBLE1BR0VDLG1CQUhGLG9CQUdFQSxtQkFIRjtBQUFBLE1BSUVDLHNCQUpGLG9CQUlFQSxzQkFKRjtBQUFBLE1BS0VDLGlCQUxGLG9CQUtFQSxpQkFMRjtBQUFBLE1BTUVDLHVCQU5GLG9CQU1FQSx1QkFORjtBQUFBLE1BT0VDLGNBUEYsb0JBT0VBLGNBUEY7O0FBVUEsU0FBU0MsV0FBVCxDQUFxQkMsUUFBckIsRUFBK0I7RUFDN0IsT0FBTztJQUNMQyxPQUFPLENBQUNDLE9BQUQsRUFBVTtNQUNmLE9BQU8sSUFBSUMsT0FBSixDQUFZSCxRQUFaLEVBQXNCRSxPQUF0QixDQUFQO0lBQ0Q7O0VBSEksQ0FBUDtBQUtEOztBQUVELFNBQVNDLE9BQVQsQ0FBaUJILFFBQWpCLEVBQTJCRSxPQUEzQixFQUFvQztFQUNsQ3RCLE1BQU0sQ0FBQ3dCLElBQVAsQ0FBWSxJQUFaO0VBQ0EsTUFBTUMsV0FBVyxHQUFHTCxRQUFRLEtBQUssUUFBYixHQUF3QixHQUF4QixHQUE4QixFQUFsRDtFQUNBLE1BQU1NLFdBQVcsR0FBRyxXQUFwQjtFQUNBLE1BQU1DLElBQUksR0FBR0wsT0FBTyxDQUFDSyxJQUFSLElBQWdCRixXQUE3QjtFQUNBLE1BQU1HLElBQUksR0FBR04sT0FBTyxDQUFDTSxJQUFSLElBQWdCRixXQUE3QjtFQUVBLE9BQU9KLE9BQU8sQ0FBQ0ssSUFBZjtFQUNBLE9BQU9MLE9BQU8sQ0FBQ00sSUFBZjtFQUVBLEtBQUtDLE1BQUwsR0FBY1AsT0FBTyxDQUFDTyxNQUF0QjtFQUNBLEtBQUtDLElBQUwsR0FBWVIsT0FBTyxDQUFDUSxJQUFwQjtFQUNBLEtBQUtWLFFBQUwsR0FBZ0JBLFFBQWhCO0VBQ0EsS0FBS1EsSUFBTCxHQUFZQSxJQUFaO0VBRUEsT0FBT04sT0FBTyxDQUFDTyxNQUFmO0VBQ0EsT0FBT1AsT0FBTyxDQUFDUSxJQUFmOztFQUVBLE1BQU1DLGNBQWMscUJBQVFULE9BQVIsQ0FBcEI7O0VBQ0EsSUFBSUEsT0FBTyxDQUFDVSxVQUFaLEVBQXdCO0lBQ3RCRCxjQUFjLENBQUNDLFVBQWYsR0FBNEJWLE9BQU8sQ0FBQ1UsVUFBcEM7SUFDQUQsY0FBYyxDQUFDRSxnQkFBZixHQUFrQyxLQUFLQyxvQkFBTCxDQUEwQkMsSUFBMUIsQ0FBK0IsSUFBL0IsQ0FBbEM7RUFDRDs7RUFFRCxLQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0VBRUEsTUFBTUMsT0FBTyxHQUFHN0IsS0FBSyxDQUFDOEIsT0FBTixDQUFlLEdBQUVsQixRQUFTLEtBQUlRLElBQUssSUFBR0QsSUFBSyxFQUEzQyxFQUE4Q0ksY0FBOUMsQ0FBaEI7RUFDQSxLQUFLUSxTQUFMLENBQWUsTUFBZixFQUF3QixHQUFFWCxJQUFLLElBQUdELElBQUssRUFBdkM7RUFFQVUsT0FBTyxDQUFDRyxFQUFSLENBQVcsT0FBWCxFQUFxQkMsS0FBRCxJQUFXLEtBQUtDLElBQUwsQ0FBVSxPQUFWLEVBQW1CRCxLQUFuQixDQUEvQjtFQUVBLEtBQUtKLE9BQUwsR0FBZUEsT0FBZjtBQUNEO0FBRUQ7QUFDQTtBQUNBOzs7QUFDQW5DLElBQUksQ0FBQ3lDLFFBQUwsQ0FBY3BCLE9BQWQsRUFBdUJ2QixNQUF2Qjs7QUFFQXVCLE9BQU8sQ0FBQ3FCLFNBQVIsQ0FBa0JWLG9CQUFsQixHQUF5QyxVQUFVVyxTQUFWLEVBQXFCdkIsT0FBckIsRUFBOEI7RUFDckUsUUFBUSxLQUFLRixRQUFiO0lBQ0UsS0FBSyxPQUFMO01BQ0UsT0FBT2pCLEdBQUcsQ0FBQ21DLE9BQUosQ0FBWWhCLE9BQU8sQ0FBQ1UsVUFBcEIsQ0FBUDs7SUFDRixLQUFLLFFBQUw7TUFDRVYsT0FBTyxDQUFDd0IsYUFBUixHQUF3QixDQUFDLElBQUQsQ0FBeEI7TUFDQXhCLE9BQU8sQ0FBQ3lCLFVBQVIsR0FBcUIsS0FBS25CLElBQTFCO01BQ0FOLE9BQU8sQ0FBQzBCLGFBQVIsR0FBd0IsSUFBeEI7TUFDQSxPQUFPNUMsR0FBRyxDQUFDa0MsT0FBSixDQUFZaEIsT0FBTyxDQUFDVSxVQUFwQixFQUFnQ1YsT0FBaEMsQ0FBUDs7SUFDRjtNQUNFLE1BQU0sSUFBSVosS0FBSixDQUFVLHNCQUFWLEVBQWtDLEtBQUtVLFFBQXZDLENBQU47RUFUSjtBQVdELENBWkQ7O0FBY0FHLE9BQU8sQ0FBQ3FCLFNBQVIsQ0FBa0JLLFVBQWxCLEdBQStCLFVBQVVDLElBQVYsRUFBZ0IsQ0FDN0M7RUFDQTtFQUNBO0FBQ0QsQ0FKRDs7QUFNQTNCLE9BQU8sQ0FBQ3FCLFNBQVIsQ0FBa0JPLFFBQWxCLEdBQTZCLFlBQVk7RUFDdkMsSUFBSSxLQUFLQyxLQUFULEVBQWdCO0lBQ2QsT0FBTyxLQUFLQSxLQUFaO0VBQ0Q7O0VBRUQsTUFBTXZCLE1BQU0sR0FBRztJQUNiLENBQUNqQixpQkFBRCxHQUFxQixLQUFLa0IsSUFEYjtJQUViLENBQUNoQixtQkFBRCxHQUF1QixLQUFLZTtFQUZmLENBQWY7RUFLQSxJQUFJd0IsT0FBTyxHQUFHLEtBQUtDLGdCQUFMLENBQXNCLEtBQUtsQixRQUEzQixDQUFkO0VBRUFpQixPQUFPLEdBQUdFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxPQUFkLEVBQXVCeEIsTUFBdkIsQ0FBVjtFQUVBLE1BQU11QixLQUFLLEdBQUcsS0FBS2YsT0FBTCxDQUFhaEIsT0FBYixDQUFxQmdDLE9BQXJCLENBQWQ7RUFFQUQsS0FBSyxDQUFDSyxJQUFOLENBQVcsVUFBWCxFQUF1QixDQUFDSixPQUFELEVBQVVLLEtBQVYsS0FBb0I7SUFDekNMLE9BQU8sR0FBRyxLQUFLTSxlQUFMLENBQXFCTixPQUFyQixDQUFWO0lBQ0FELEtBQUssQ0FBQ0MsT0FBTixHQUFnQkEsT0FBaEI7SUFDQUQsS0FBSyxDQUFDUSxVQUFOLEdBQW1CUCxPQUFPLENBQUN4QyxtQkFBRCxDQUExQjtJQUNBdUMsS0FBSyxDQUFDUyxNQUFOLEdBQWVULEtBQUssQ0FBQ1EsVUFBckI7SUFDQSxLQUFLbEIsSUFBTCxDQUFVLFVBQVYsRUFBc0JVLEtBQXRCO0VBQ0QsQ0FORDtFQVFBLEtBQUtVLFdBQUwsR0FBbUIsSUFBbkI7RUFFQVYsS0FBSyxDQUFDSyxJQUFOLENBQVcsT0FBWCxFQUFvQixNQUFNLEtBQUtmLElBQUwsQ0FBVSxPQUFWLENBQTFCO0VBQ0FVLEtBQUssQ0FBQ1osRUFBTixDQUFTLE9BQVQsRUFBbUJDLEtBQUQsSUFBVyxLQUFLQyxJQUFMLENBQVUsT0FBVixFQUFtQkQsS0FBbkIsQ0FBN0I7RUFDQVcsS0FBSyxDQUFDWixFQUFOLENBQVMsT0FBVCxFQUFrQixNQUFNLEtBQUtILE9BQUwsQ0FBYTBCLEtBQWIsRUFBeEI7RUFFQSxLQUFLWCxLQUFMLEdBQWFBLEtBQWI7RUFDQSxPQUFPQSxLQUFQO0FBQ0QsQ0FoQ0Q7O0FBa0NBN0IsT0FBTyxDQUFDcUIsU0FBUixDQUFrQmUsZUFBbEIsR0FBb0MsVUFBVU4sT0FBVixFQUFtQjtFQUNyRCxNQUFNVyxJQUFJLEdBQUdULE1BQU0sQ0FBQ1MsSUFBUCxDQUFZWCxPQUFaLENBQWI7RUFDQSxNQUFNWSxZQUFZLEdBQUcsRUFBckI7O0VBQ0EseUJBQWdCRCxJQUFoQiwyQkFBc0I7SUFBakIsSUFBSUUsR0FBRyxZQUFQO0lBQ0gsSUFBSUMsS0FBSyxHQUFHZCxPQUFPLENBQUNhLEdBQUQsQ0FBbkI7SUFDQUEsR0FBRyxHQUFHQSxHQUFHLENBQUNFLFdBQUosRUFBTjs7SUFDQSxRQUFRRixHQUFSO01BQ0UsS0FBS2pELHVCQUFMO1FBQ0VrRCxLQUFLLEdBQUdFLEtBQUssQ0FBQ0MsT0FBTixDQUFjSCxLQUFkLElBQXVCQSxLQUF2QixHQUErQixDQUFDQSxLQUFELENBQXZDO1FBQ0E7O01BQ0Y7UUFDRTtJQUxKOztJQVFBRixZQUFZLENBQUNDLEdBQUQsQ0FBWixHQUFvQkMsS0FBcEI7RUFDRDs7RUFFRCxPQUFPRixZQUFQO0FBQ0QsQ0FsQkQ7O0FBb0JBMUMsT0FBTyxDQUFDcUIsU0FBUixDQUFrQlUsZ0JBQWxCLEdBQXFDLFVBQVVELE9BQVYsRUFBbUI7RUFDdEQsTUFBTVcsSUFBSSxHQUFHVCxNQUFNLENBQUNTLElBQVAsQ0FBWVgsT0FBWixDQUFiO0VBQ0EsTUFBTVksWUFBWSxHQUFHLEVBQXJCOztFQUNBLDJCQUFnQkQsSUFBaEIsOEJBQXNCO0lBQWpCLElBQUlFLEdBQUcsY0FBUDtJQUNILElBQUlDLEtBQUssR0FBR2QsT0FBTyxDQUFDYSxHQUFELENBQW5CO0lBQ0FBLEdBQUcsR0FBR0EsR0FBRyxDQUFDRSxXQUFKLEVBQU47O0lBQ0EsUUFBUUYsR0FBUjtNQUNFLEtBQUtsRCxpQkFBTDtRQUNFa0QsR0FBRyxHQUFHbkQsc0JBQU47UUFDQW9ELEtBQUssR0FBRyx5QkFBeUJJLElBQXpCLENBQThCSixLQUE5QixJQUNKOUQsS0FBSyxDQUFDOEQsS0FBRCxDQUFMLENBQWF2QyxJQURULEdBRUp1QyxLQUZKO1FBR0E7O01BQ0Y7UUFDRTtJQVJKOztJQVdBRixZQUFZLENBQUNDLEdBQUQsQ0FBWixHQUFvQkMsS0FBcEI7RUFDRDs7RUFFRCxPQUFPRixZQUFQO0FBQ0QsQ0FyQkQ7O0FBdUJBMUMsT0FBTyxDQUFDcUIsU0FBUixDQUFrQkwsU0FBbEIsR0FBOEIsVUFBVWlDLElBQVYsRUFBZ0JMLEtBQWhCLEVBQXVCO0VBQ25ELEtBQUsvQixRQUFMLENBQWNvQyxJQUFJLENBQUNKLFdBQUwsRUFBZCxJQUFvQ0QsS0FBcEM7QUFDRCxDQUZEOztBQUlBNUMsT0FBTyxDQUFDcUIsU0FBUixDQUFrQjZCLFNBQWxCLEdBQThCLFVBQVVELElBQVYsRUFBZ0I7RUFDNUMsT0FBTyxLQUFLcEMsUUFBTCxDQUFjb0MsSUFBSSxDQUFDSixXQUFMLEVBQWQsQ0FBUDtBQUNELENBRkQ7O0FBSUE3QyxPQUFPLENBQUNxQixTQUFSLENBQWtCOEIsS0FBbEIsR0FBMEIsVUFBVUMsSUFBVixFQUFnQkMsUUFBaEIsRUFBMEI7RUFDbEQsTUFBTXhCLEtBQUssR0FBRyxLQUFLRCxRQUFMLEVBQWQ7RUFDQSxPQUFPQyxLQUFLLENBQUNzQixLQUFOLENBQVlDLElBQVosRUFBa0JDLFFBQWxCLENBQVA7QUFDRCxDQUhEOztBQUtBckQsT0FBTyxDQUFDcUIsU0FBUixDQUFrQmlDLElBQWxCLEdBQXlCLFVBQVVDLE1BQVYsRUFBa0J4RCxPQUFsQixFQUEyQjtFQUNsRCxNQUFNOEIsS0FBSyxHQUFHLEtBQUtELFFBQUwsRUFBZDtFQUNBLE9BQU9DLEtBQUssQ0FBQ3lCLElBQU4sQ0FBV0MsTUFBWCxFQUFtQnhELE9BQW5CLENBQVA7QUFDRCxDQUhEOztBQUtBQyxPQUFPLENBQUNxQixTQUFSLENBQWtCbUMsR0FBbEIsR0FBd0IsVUFBVUosSUFBVixFQUFnQjtFQUN0QyxNQUFNdkIsS0FBSyxHQUFHLEtBQUtELFFBQUwsRUFBZDtFQUNBQyxLQUFLLENBQUMyQixHQUFOLENBQVVKLElBQVY7QUFDRCxDQUhEOztBQUtBcEQsT0FBTyxDQUFDcUIsU0FBUixDQUFrQm9DLEtBQWxCLEdBQTBCLFVBQVVMLElBQVYsRUFBZ0I7RUFDeEMsTUFBTXZCLEtBQUssR0FBRyxLQUFLRCxRQUFMLEVBQWQ7RUFDQUMsS0FBSyxDQUFDVyxLQUFOLENBQVk3QyxjQUFaO0VBQ0EsS0FBS21CLE9BQUwsQ0FBYTRDLE9BQWI7QUFDRCxDQUpEOztBQU1BQyxPQUFPLENBQUMvRCxXQUFSLEdBQXNCQSxXQUF0QiJ9
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJlYW0iLCJyZXF1aXJlIiwidXRpbCIsIm5ldCIsInRscyIsInBhcnNlIiwicHJvY2VzcyIsInNlbXZlckd0ZSIsImh0dHAyIiwidmVyc2lvbiIsIkVycm9yIiwiY29uc3RhbnRzIiwiSFRUUDJfSEVBREVSX1BBVEgiLCJIVFRQMl9IRUFERVJfU1RBVFVTIiwiSFRUUDJfSEVBREVSX01FVEhPRCIsIkhUVFAyX0hFQURFUl9BVVRIT1JJVFkiLCJIVFRQMl9IRUFERVJfSE9TVCIsIkhUVFAyX0hFQURFUl9TRVRfQ09PS0lFIiwiTkdIVFRQMl9DQU5DRUwiLCJzZXRQcm90b2NvbCIsInByb3RvY29sIiwicmVxdWVzdCIsIm9wdGlvbnMiLCJSZXF1ZXN0IiwiY2FsbCIsImRlZmF1bHRQb3J0IiwiZGVmYXVsdEhvc3QiLCJwb3J0IiwiaG9zdCIsIm1ldGhvZCIsInBhdGgiLCJzZXNzaW9uT3B0aW9ucyIsInNvY2tldFBhdGgiLCJjcmVhdGVDb25uZWN0aW9uIiwiY3JlYXRlVW5peENvbm5lY3Rpb24iLCJiaW5kIiwiX2hlYWRlcnMiLCJzZXNzaW9uIiwiY29ubmVjdCIsInNldEhlYWRlciIsIm9uIiwiZXJyb3IiLCJlbWl0IiwiaW5oZXJpdHMiLCJwcm90b3R5cGUiLCJhdXRob3JpdHkiLCJBTFBOUHJvdG9jb2xzIiwic2VydmVybmFtZSIsImFsbG93SGFsZk9wZW4iLCJzZXROb0RlbGF5IiwiYm9vbCIsImdldEZyYW1lIiwiZnJhbWUiLCJoZWFkZXJzIiwibWFwVG9IdHRwMkhlYWRlciIsIk9iamVjdCIsImFzc2lnbiIsIm9uY2UiLCJmbGFncyIsIm1hcFRvSHR0cEhlYWRlciIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJfaGVhZGVyU2VudCIsImNsb3NlIiwia2V5cyIsImh0dHAySGVhZGVycyIsImtleSIsInZhbHVlIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJ0ZXN0IiwibmFtZSIsImdldEhlYWRlciIsIndyaXRlIiwiZGF0YSIsImVuY29kaW5nIiwicGlwZSIsInN0cmVhbSIsImVuZCIsImFib3J0IiwiZGVzdHJveSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9odHRwMndyYXBwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG5jb25zdCB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpXG5jb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdwcm9jZXNzJyk7XG5jb25zdCBzZW12ZXJHdGUgPSByZXF1aXJlKCdzZW12ZXIvZnVuY3Rpb25zL2d0ZScpO1xuXG5sZXQgaHR0cDI7XG5cbmlmIChzZW12ZXJHdGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCdodHRwMicpO1xuZWxzZVxuICB0aHJvdyBuZXcgRXJyb3IoJ3N1cGVyYWdlbnQ6IHRoaXMgdmVyc2lvbiBvZiBOb2RlLmpzIGRvZXMgbm90IHN1cHBvcnQgaHR0cDInKTtcblxuY29uc3Qge1xuICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgSFRUUDJfSEVBREVSX1NUQVRVUyxcbiAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgSFRUUDJfSEVBREVSX0FVVEhPUklUWSxcbiAgSFRUUDJfSEVBREVSX0hPU1QsXG4gIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFLFxuICBOR0hUVFAyX0NBTkNFTFxufSA9IGh0dHAyLmNvbnN0YW50cztcblxuZnVuY3Rpb24gc2V0UHJvdG9jb2wocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgUmVxdWVzdChwcm90b2NvbCwgb3B0aW9ucyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBSZXF1ZXN0KHByb3RvY29sLCBvcHRpb25zKSB7XG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xuICBjb25zdCBkZWZhdWx0UG9ydCA9IHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwO1xuICBjb25zdCBkZWZhdWx0SG9zdCA9ICdsb2NhbGhvc3QnO1xuICBjb25zdCBwb3J0ID0gb3B0aW9ucy5wb3J0IHx8IGRlZmF1bHRQb3J0O1xuICBjb25zdCBob3N0ID0gb3B0aW9ucy5ob3N0IHx8IGRlZmF1bHRIb3N0O1xuXG4gIGRlbGV0ZSBvcHRpb25zLnBvcnQ7XG4gIGRlbGV0ZSBvcHRpb25zLmhvc3Q7XG5cbiAgdGhpcy5tZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgdGhpcy5wYXRoID0gb3B0aW9ucy5wYXRoO1xuICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7XG4gIHRoaXMuaG9zdCA9IGhvc3Q7XG5cbiAgZGVsZXRlIG9wdGlvbnMubWV0aG9kO1xuICBkZWxldGUgb3B0aW9ucy5wYXRoO1xuXG4gIGNvbnN0IHNlc3Npb25PcHRpb25zID0geyAuLi5vcHRpb25zIH07XG4gIGlmIChvcHRpb25zLnNvY2tldFBhdGgpIHtcbiAgICBzZXNzaW9uT3B0aW9ucy5zb2NrZXRQYXRoID0gb3B0aW9ucy5zb2NrZXRQYXRoO1xuICAgIHNlc3Npb25PcHRpb25zLmNyZWF0ZUNvbm5lY3Rpb24gPSB0aGlzLmNyZWF0ZVVuaXhDb25uZWN0aW9uLmJpbmQodGhpcyk7XG4gIH1cblxuICB0aGlzLl9oZWFkZXJzID0ge307XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoYCR7cHJvdG9jb2x9Ly8ke2hvc3R9OiR7cG9ydH1gLCBzZXNzaW9uT3B0aW9ucyk7XG4gIHRoaXMuc2V0SGVhZGVyKCdob3N0JywgYCR7aG9zdH06JHtwb3J0fWApO1xuXG4gIHNlc3Npb24ub24oJ2Vycm9yJywgKGVycm9yKSA9PiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xufVxuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYCAod2hpY2ggaW5oZXJpdHMgZnJvbSBgRXZlbnRFbWl0dGVyYCkuXG4gKi9cbnV0aWwuaW5oZXJpdHMoUmVxdWVzdCwgU3RyZWFtKTtcblxuUmVxdWVzdC5wcm90b3R5cGUuY3JlYXRlVW5peENvbm5lY3Rpb24gPSBmdW5jdGlvbiAoYXV0aG9yaXR5LCBvcHRpb25zKSB7XG4gIHN3aXRjaCAodGhpcy5wcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgIHJldHVybiBuZXQuY29ubmVjdChvcHRpb25zLnNvY2tldFBhdGgpO1xuICAgIGNhc2UgJ2h0dHBzOic6XG4gICAgICBvcHRpb25zLkFMUE5Qcm90b2NvbHMgPSBbJ2gyJ107XG4gICAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLmhvc3Q7XG4gICAgICBvcHRpb25zLmFsbG93SGFsZk9wZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRscy5jb25uZWN0KG9wdGlvbnMuc29ja2V0UGF0aCwgb3B0aW9ucyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wnLCB0aGlzLnByb3RvY29sKTtcbiAgfVxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuc2V0Tm9EZWxheSA9IGZ1bmN0aW9uIChib29sKSB7XG4gIC8vIFdlIGNhbiBub3QgdXNlIHNldE5vRGVsYXkgd2l0aCBIVFRQLzIuXG4gIC8vIE5vZGUgMTAgbGltaXRzIGh0dHAyc2Vzc2lvbi5zb2NrZXQgbWV0aG9kcyB0byBvbmVzIHNhZmUgdG8gdXNlIHdpdGggSFRUUC8yLlxuICAvLyBTZWUgYWxzbyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAyLmh0bWwjaHR0cDJfaHR0cDJzZXNzaW9uX3NvY2tldFxufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmZyYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSB7XG4gICAgW0hUVFAyX0hFQURFUl9QQVRIXTogdGhpcy5wYXRoLFxuICAgIFtIVFRQMl9IRUFERVJfTUVUSE9EXTogdGhpcy5tZXRob2RcbiAgfTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMubWFwVG9IdHRwMkhlYWRlcih0aGlzLl9oZWFkZXJzKTtcblxuICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBtZXRob2QpO1xuXG4gIGNvbnN0IGZyYW1lID0gdGhpcy5zZXNzaW9uLnJlcXVlc3QoaGVhZGVycyk7XG5cbiAgZnJhbWUub25jZSgncmVzcG9uc2UnLCAoaGVhZGVycywgZmxhZ3MpID0+IHtcbiAgICBoZWFkZXJzID0gdGhpcy5tYXBUb0h0dHBIZWFkZXIoaGVhZGVycyk7XG4gICAgZnJhbWUuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgZnJhbWUuc3RhdHVzQ29kZSA9IGhlYWRlcnNbSFRUUDJfSEVBREVSX1NUQVRVU107XG4gICAgZnJhbWUuc3RhdHVzID0gZnJhbWUuc3RhdHVzQ29kZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3BvbnNlJywgZnJhbWUpO1xuICB9KTtcblxuICB0aGlzLl9oZWFkZXJTZW50ID0gdHJ1ZTtcblxuICBmcmFtZS5vbmNlKCdkcmFpbicsICgpID0+IHRoaXMuZW1pdCgnZHJhaW4nKSk7XG4gIGZyYW1lLm9uKCdlcnJvcicsIChlcnJvcikgPT4gdGhpcy5lbWl0KCdlcnJvcicsIGVycm9yKSk7XG4gIGZyYW1lLm9uKCdjbG9zZScsICgpID0+IHRoaXMuc2Vzc2lvbi5jbG9zZSgpKTtcblxuICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gIHJldHVybiBmcmFtZTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLm1hcFRvSHR0cEhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlIEhUVFAyX0hFQURFUl9TRVRfQ09PS0lFOlxuICAgICAgICB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGh0dHAySGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gaHR0cDJIZWFkZXJzO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUubWFwVG9IdHRwMkhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKTtcbiAgY29uc3QgaHR0cDJIZWFkZXJzID0ge307XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgbGV0IHZhbHVlID0gaGVhZGVyc1trZXldO1xuICAgIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlIEhUVFAyX0hFQURFUl9IT1NUOlxuICAgICAgICBrZXkgPSBIVFRQMl9IRUFERVJfQVVUSE9SSVRZO1xuICAgICAgICB2YWx1ZSA9IC9eaHR0cDpcXC9cXC98Xmh0dHBzOlxcL1xcLy8udGVzdCh2YWx1ZSlcbiAgICAgICAgICA/IHBhcnNlKHZhbHVlKS5ob3N0XG4gICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBodHRwMkhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGh0dHAySGVhZGVycztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmdldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG59O1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZykge1xuICBjb25zdCBmcmFtZSA9IHRoaXMuZ2V0RnJhbWUoKTtcbiAgcmV0dXJuIGZyYW1lLndyaXRlKGRhdGEsIGVuY29kaW5nKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoc3RyZWFtLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZyYW1lID0gdGhpcy5nZXRGcmFtZSgpO1xuICByZXR1cm4gZnJhbWUucGlwZShzdHJlYW0sIG9wdGlvbnMpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIGZyYW1lLmVuZChkYXRhKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZnJhbWUgPSB0aGlzLmdldEZyYW1lKCk7XG4gIGZyYW1lLmNsb3NlKE5HSFRUUDJfQ0FOQ0VMKTtcbiAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTtcbn07XG5cbmV4cG9ydHMuc2V0UHJvdG9jb2wgPSBzZXRQcm90b2NvbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDaEMsTUFBTUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1FLEdBQUcsR0FBR0YsT0FBTyxD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
|