necessary 9.1.5 → 10.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 CHANGED
@@ -219,86 +219,96 @@ Finally, log files are rolled over every night. So `./log/example.log` would bec
219
219
 
220
220
  ## Request utilities
221
221
 
222
- - `get()`
223
- - `post()`
224
- - `request()`
222
+ - `createRequest()`
223
+ - `createGetRequest()`
224
+ - `createPostRequest()`
225
225
 
226
- Functions that leverage Node's [HTTP](https://nodejs.org/api/http.html) nad [HTTPS](https://nodejs.org/api/https.html) inbuilt modules in order to provide HTTP request functionality. These functions are deliberately low level. They will take away some of the pain of using the aforementioned modules but will not automatically set headers, parse responses, etc. For all but the most basic of requests you will likely need some knowledge of streams and Node's inbuilt request and response objects.
226
+ Functions that leverage Node's [HTTP](https://nodejs.org/api/http.html) nad [HTTPS](https://nodejs.org/api/https.html) inbuilt modules in order to provide HTTP request functionality. These functions are deliberately low level. They will take away some of the pain of using the aforementioned modules but will not automatically set headers, parse responses, etc. Specifically, methods have to be called on the instance of the [ClientRequest](https://nodejs.org/api/http.html#http_class_http_clientrequest) class that they each return in order to make the request and on the instance of the [IncomingMessage](https://nodejs.org/api/http.html#class-httpincomingmessage) passed to the callback function in order to parse the response.
227
227
 
228
- * The `get()` function provides a means to make GET requests. It takes `host`, `uri` and `query` arguments, an optional `headers` argument and a `callback` argument. It returns an instance of Node's [ClientRequest](https://nodejs.org/api/http.html#http_class_http_clientrequest) class and the callback function should have an `error` argument, which will be `null` if the request is successful, and a `response` argument, which will be an instance of Node's [IncomingMessage](https://nodejs.org/api/http.html#class-httpincomingmessage) class.
228
+ * The `createRequest()` function provides a means to make arbitrary requests. It takes `host`, `uri`, `query`, `method`, `headers` and `callback` arguments. It returns an instance of Node's ClientRequest class. The callback function must have an `error` argument, which will be `null` if the request is successful, and a `response` argument, which will be an instance of Node's IncomingMessage class. The `query` and `headers` arguments should be plain old JavaScript objects, with the former being converted into a query string. The other arguments bar the last callback argument should be strings.
229
229
 
230
- As mentioned above, the `get()` method will not parse the response. In the following example there is a `contentFromResponse()` function that will do this for simple cases when the body of the response is Unicode:
230
+ In the following example a GET request is made. Note that because the request body is empty, it is enough to call the request object's `end()` method in order to make the request. Note also that the response is piped directly to a file.
231
231
 
232
232
  ```
233
- get(host, uri, query, (error, response) => {
234
- // Check for an error
235
-
236
- const { status } = response;
237
-
238
- // Check the status code
233
+ const { createWriteStream } = require("fs");
239
234
 
240
- contentFromResponse(response, (content) => {
241
- console.log(content)
242
- });
243
- });
235
+ const host = ...,
236
+ uri = ...,
237
+ query = {
238
+ ...
239
+ },
240
+ method = "GET",
241
+ headers = {
242
+ ...
243
+ },
244
+ request = createRequest(host, uri, query, method, headers, (error, response) => {
245
+ ...
244
246
 
245
- function contentFromResponse(response, callback) {
246
- let content = "";
247
+ const writeStream = createWriteStream(...);
247
248
 
248
- response.on("data", (data) => {
249
- content += data;
250
- });
249
+ response.pipe(writeStream);
250
+ });
251
251
 
252
- response.on("end", () => {
253
- callback(content);
254
- });
255
- }
252
+ request.end();
256
253
  ```
257
254
 
258
- Note that the data returned when the "data" event is handled will be a byte array. It is coerced to string by the "+=" operator which, as already mentioned, will only work in the cases that Unicode data has been returned.
259
-
260
- In the following example, the response is assumed to be binary data, an image say, and is piped straight to a file:
255
+ In the following example the `queryStringFromQuery()` function from the HTTP utilities is used to encode the body of the request. Note that the `content-type` header is set explicitly. Note that the request body is piped directly from a file:
261
256
 
262
257
  ```
263
- const { createWriteStream } = require("fs");
264
-
265
- get(host, uri, query, (error, response) => {
266
- // Check for an error
267
-
268
- const { statusCode } = response;
258
+ const { createReadStream } = require("fs");
269
259
 
270
- const writeStream = createWriteStream("...");
260
+ const host = ...,
261
+ uri = ...,
262
+ query = {},
263
+ method = "POST",
264
+ headers = {
265
+ "content-type": "image/png"
266
+ },
267
+ request = createRequest(host, uri, query, method, headers, (error, response) => {
268
+ ...
269
+ }),
270
+ readStream = createReadStream(...);
271
271
 
272
- response.pipe(writeStream);
273
- });
272
+ readStream.pipe(request);
274
273
  ```
275
274
 
276
- * The `post()` function provides a means to make POST requests. Its arguments are identical to the `get()` function.
277
-
278
- In the following example the `queryStringFromQuery()` function from the HTTP utilities is used to encode the content. Note that the `content-type` and `content-length` headers must be set explicitly. Also note that there is no argument provided for the content itself, instead an instance of Node's [`Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable) class is created and piped to the request:
275
+ Finally, in the following example a `contentFromResponse()` function has been written in order to parse the response to a string in preference to piping it to a file, say:
279
276
 
280
277
  ```
281
- const { Readable } = require("stream");
282
-
283
- const content = queryStringFromQuery({
284
- "name": "John Doe"
285
- }),
278
+ const host = ...,
279
+ uri = ...,
280
+ query = {
281
+ ...
282
+ },
283
+ method = "GET",
286
284
  headers = {
287
- "content-type": "application/x-www-form-urlencoded",
288
- "content-length": content.length
285
+ ...
289
286
  },
290
- request = post(host, uri, query, headers, (error, response) => {
291
- // Check for an error
287
+ request = createRequest(host, uri, query, method, headers, (error, response) => {
288
+ contentFromResponse(response, (content) => {
289
+ console.log(content)
290
+ });
291
+ });
292
292
 
293
- const { statusCode } = response;
293
+ request.end();
294
294
 
295
- ...
296
- }),
297
- readable = Readable.from(content);
295
+ function contentFromResponse(response, callback) {
296
+ let content = "";
297
+
298
+ response.on("data", (data) => {
299
+ content += data;
300
+ });
298
301
 
299
- readable.pope(request);
302
+ response.on("end", () => {
303
+ callback(content);
304
+ });
305
+ }
300
306
  ```
301
307
 
308
+ * The `createGetRequest()` function is identical to the `createRequest()` function except that the `method` argument is omitted and the `headers` argument is optional.
309
+
310
+ * The `createPostRequest()` function is identical to the `createRequest()` function except that the `method` argument is omitted and the `headers` argument is optional.
311
+
302
312
  ## Template utilities
303
313
 
304
314
  - `parseFile()`
@@ -612,6 +622,7 @@ pathWithoutTopmostDirectoryNameFromPath("root/etc/init.conf"); // returns 'etc/i
612
622
  - `fourthLast()`
613
623
  - `thirdLast()`
614
624
  - `secondLast()`
625
+ - `firstLast()`
615
626
  - `last()`
616
627
  - `head()`
617
628
  - `tail()`
@@ -11,6 +11,7 @@ exports.fifthLast = fifthLast;
11
11
  exports.fourthLast = fourthLast;
12
12
  exports.thirdLast = thirdLast;
13
13
  exports.secondLast = secondLast;
14
+ exports.firstLast = firstLast;
14
15
  exports.last = last;
15
16
  exports.head = head;
16
17
  exports.tail = tail;
@@ -90,6 +91,9 @@ function thirdLast(array) {
90
91
  function secondLast(array) {
91
92
  return array[array.length - 2];
92
93
  }
94
+ function firstLast(array) {
95
+ return array[array.length - 1];
96
+ }
93
97
  function last(array) {
94
98
  return array[array.length - 1];
95
99
  }
@@ -288,6 +292,7 @@ var _default = {
288
292
  fourthLast: fourthLast,
289
293
  thirdLast: thirdLast,
290
294
  secondLast: secondLast,
295
+ firstLast: firstLast,
291
296
  last: last,
292
297
  head: head,
293
298
  tail: tail,
@@ -318,4 +323,4 @@ var _default = {
318
323
  };
319
324
  exports.default = _default;
320
325
 
321
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGxhc3QsXG4gIGhlYWQsXG4gIHRhaWwsXG4gIGJhY2ssXG4gIGZyb250LFxuICBwdXNoLFxuICB1bnNoaWZ0LFxuICBjb25jYXQsXG4gIGNsZWFyLFxuICBjb3B5LFxuICBtZXJnZSxcbiAgc3BsaWNlLFxuICByZXBsYWNlLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBwYXRjaCxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiJdLCJuYW1lcyI6WyJmaXJzdCIsInNlY29uZCIsInRoaXJkIiwiZm91cnRoIiwiZmlmdGgiLCJmaWZ0aExhc3QiLCJmb3VydGhMYXN0IiwidGhpcmRMYXN0Iiwic2Vjb25kTGFzdCIsImxhc3QiLCJoZWFkIiwidGFpbCIsImJhY2siLCJmcm9udCIsInB1c2giLCJ1bnNoaWZ0IiwiY29uY2F0IiwiY2xlYXIiLCJjb3B5IiwibWVyZ2UiLCJzcGxpY2UiLCJyZXBsYWNlIiwiZmlsdGVyIiwiZmluZCIsInBydW5lIiwicGF0Y2giLCJhdWdtZW50Iiwic2VwYXJhdGUiLCJmb3J3YXJkc1NvbWUiLCJiYWNrd2FyZHNTb21lIiwiZm9yd2FyZHNFdmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiZm9yd2FyZHNSZWR1Y2UiLCJiYWNrd2FyZHNSZWR1Y2UiLCJmb3J3YXJkc0ZvckVhY2giLCJiYWNrd2FyZHNGb3JFYWNoIiwiYXJyYXkiLCJsZW5ndGgiLCJzbGljZSIsImFycmF5MSIsImFycmF5MiIsIkFycmF5IiwicHJvdG90eXBlIiwiYXBwbHkiLCJlbGVtZW50T3JBcnJheTIiLCJzdGFydCIsImRlbGV0ZUNvdW50IiwiSW5maW5pdHkiLCJhcmdzIiwiZGVsZXRlZEl0ZW1zQXJyYXkiLCJlbGVtZW50IiwidGVzdCIsImZvdW5kIiwic29tZSIsImluZGV4IiwicGFzc2VkIiwiZmlsdGVyZWRFbGVtZW50cyIsImRlbGV0ZWRFbGVtZW50cyIsImZpcnN0RGVsZXRlZEVsZW1lbnQiLCJlbGVtZW50cyIsInBydW5lZEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwiY2FsbGJhY2siLCJhcnJheUxlbmd0aCIsInJlc3VsdCIsImluaXRpYWxWYWx1ZSIsInZhbHVlIl0sIm1hcHBpbmdzIjoiQUFBQSxDQUFZOzs7O1FBRUlBLEtBQUssR0FBTEEsS0FBSztRQUVMQyxNQUFNLEdBQU5BLE1BQU07UUFFTkMsS0FBSyxHQUFMQSxLQUFLO1FBRUxDLE1BQU0sR0FBTkEsTUFBTTtRQUVOQyxLQUFLLEdBQUxBLEtBQUs7UUFFTEMsU0FBUyxHQUFUQSxTQUFTO1FBRVRDLFVBQVUsR0FBVkEsVUFBVTtRQUVWQyxTQUFTLEdBQVRBLFNBQVM7UUFFVEMsVUFBVSxHQUFWQSxVQUFVO1FBRVZDLElBQUksR0FBSkEsSUFBSTtRQUVKQyxJQUFJLEdBQUpBLElBQUk7UUFFSkMsSUFBSSxHQUFKQSxJQUFJO1FBRUpDLElBQUksR0FBSkEsSUFBSTtRQUVKQyxLQUFLLEdBQUxBLEtBQUs7UUFFTEMsSUFBSSxHQUFKQSxJQUFJO1FBRUpDLE9BQU8sR0FBUEEsT0FBTztRQUVQQyxNQUFNLEdBQU5BLE1BQU07UUFRTkMsS0FBSyxHQUFMQSxLQUFLO1FBTUxDLElBQUksR0FBSkEsSUFBSTtRQU9KQyxLQUFLLEdBQUxBLEtBQUs7UUFFTEMsTUFBTSxHQUFOQSxNQUFNO1FBT05DLE9BQU8sR0FBUEEsT0FBTztRQXNCUEMsTUFBTSxHQUFOQSxNQUFNO1FBbUJOQyxJQUFJLEdBQUpBLElBQUk7UUFjSkMsS0FBSyxHQUFMQSxLQUFLO1FBcUJMQyxLQUFLLEdBQUxBLEtBQUs7UUFpQkxDLE9BQU8sR0FBUEEsT0FBTztRQVVQQyxRQUFRLEdBQVJBLFFBQVE7UUFVUkMsWUFBWSxHQUFaQSxZQUFZO1FBZVpDLGFBQWEsR0FBYkEsYUFBYTtRQWViQyxhQUFhLEdBQWJBLGFBQWE7UUFlYkMsY0FBYyxHQUFkQSxjQUFjO1FBZWRDLGNBQWMsR0FBZEEsY0FBYztRQVVkQyxlQUFlLEdBQWZBLGVBQWU7UUFVZkMsZUFBZSxHQUFmQSxlQUFlO1FBVWZDLGdCQUFnQixHQUFoQkEsZ0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQXpRaEJuQyxLQUFLLENBQUNvQyxLQUFLLEVBQUUsQ0FBQztJQUFDLE1BQU0sQ0FBQ0EsS0FBSyxDQUFDLENBQUM7QUFBRSxDQUFDO1NBRWhDbkMsTUFBTSxDQUFDbUMsS0FBSyxFQUFFLENBQUM7SUFBQyxNQUFNLENBQUNBLEtBQUssQ0FBQyxDQUFDO0FBQUcsQ0FBQztTQUVsQ2xDLEtBQUssQ0FBQ2tDLEtBQUssRUFBRSxDQUFDO0lBQUMsTUFBTSxDQUFDQSxLQUFLLENBQUMsQ0FBQztBQUFHLENBQUM7U0FFakNqQyxNQUFNLENBQUNpQyxLQUFLLEVBQUUsQ0FBQztJQUFDLE1BQU0sQ0FBQ0EsS0FBSyxDQUFDLENBQUM7QUFBRyxDQUFDO1NBRWxDaEMsS0FBSyxDQUFDZ0MsS0FBSyxFQUFFLENBQUM7SUFBQyxNQUFNLENBQUNBLEtBQUssQ0FBQyxDQUFDO0FBQUcsQ0FBQztTQUVqQy9CLFNBQVMsQ0FBQytCLEtBQUssRUFBRSxDQUFDO0lBQUMsTUFBTSxDQUFDQSxLQUFLLENBQUNBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUM7QUFBRyxDQUFDO1NBRXBEL0IsVUFBVSxDQUFDOEIsS0FBSyxFQUFFLENBQUM7SUFBQyxNQUFNLENBQUNBLEtBQUssQ0FBQ0EsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBQztBQUFHLENBQUM7U0FFckQ5QixTQUFTLENBQUM2QixLQUFLLEVBQUUsQ0FBQztJQUFDLE1BQU0sQ0FBQ0EsS0FBSyxDQUFDQSxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDO0FBQUcsQ0FBQztTQUVwRDdCLFVBQVUsQ0FBQzRCLEtBQUssRUFBRSxDQUFDO0lBQUMsTUFBTSxDQUFDQSxLQUFLLENBQUNBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUM7QUFBRyxDQUFDO1NBRXJENUIsSUFBSSxDQUFDMkIsS0FBSyxFQUFFLENBQUM7SUFBQyxNQUFNLENBQUNBLEtBQUssQ0FBQ0EsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBQztBQUFHLENBQUM7U0FFL0MzQixJQUFJLENBQUMwQixLQUFLLEVBQUUsQ0FBQztJQUFDLE1BQU0sQ0FBQ0EsS0FBSyxDQUFDRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFBRyxDQUFDO1NBRXpDM0IsSUFBSSxDQUFDeUIsS0FBSyxFQUFFLENBQUM7SUFBQyxNQUFNLENBQUNBLEtBQUssQ0FBQ0UsS0FBSyxDQUFDLENBQUM7QUFBRyxDQUFDO1NBRXRDMUIsSUFBSSxDQUFDd0IsS0FBSyxFQUFFLENBQUM7SUFBQyxNQUFNLENBQUNBLEtBQUssQ0FBQ0UsS0FBSyxDQUFDRixLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDO0FBQUcsQ0FBQztTQUVyRHhCLEtBQUssQ0FBQ3VCLEtBQUssRUFBRSxDQUFDO0lBQUMsTUFBTSxDQUFDQSxLQUFLLENBQUNFLEtBQUssQ0FBQyxDQUFDLEVBQUVGLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUM7QUFBRyxDQUFDO1NBRXpEdkIsSUFBSSxDQUFDeUIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsQ0FBQztJQUFDQyxLQUFLLENBQUNDLFNBQVMsQ0FBQzVCLElBQUksQ0FBQzZCLEtBQUssQ0FBQ0osTUFBTSxFQUFFQyxNQUFNO0FBQUcsQ0FBQztTQUVwRXpCLE9BQU8sQ0FBQ3dCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLENBQUM7SUFBQ0MsS0FBSyxDQUFDQyxTQUFTLENBQUMzQixPQUFPLENBQUM0QixLQUFLLENBQUNKLE1BQU0sRUFBRUMsTUFBTTtBQUFHLENBQUM7U0FFMUV4QixNQUFNLENBQUN1QixNQUFNLEVBQUVLLGVBQWUsRUFBRSxDQUFDO0lBQy9DLEdBQUssQ0FBQ0osTUFBTSxHQUFJSSxXQUFnQyxDQUFoQ0EsZUFBZSxFQUFZSCxLQUFLLElBQzlCRyxlQUFlLEdBQ2QsQ0FBQ0E7UUFBQUEsZUFBZTtJQUFBLENBQUM7SUFFcEM5QixJQUFJLENBQUN5QixNQUFNLEVBQUVDLE1BQU07QUFDckIsQ0FBQztTQUVldkIsS0FBSyxDQUFDbUIsS0FBSyxFQUFFLENBQUM7SUFDNUIsR0FBSyxDQUFDUyxLQUFLLEdBQUcsQ0FBQztJQUVmLE1BQU0sQ0FBQ1QsS0FBSyxDQUFDaEIsTUFBTSxDQUFDeUIsS0FBSztBQUMzQixDQUFDO1NBRWUzQixJQUFJLENBQUNxQixNQUFNLEVBQUVDLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLEdBQUssQ0FBQ0ssS0FBSyxHQUFHLENBQUMsRUFDVEMsV0FBVyxHQUFHTixNQUFNLENBQUNILE1BQU0sQ0FBRyxDQUFHLEFBQUgsRUFBRyxBQUFILENBQUc7SUFFdkNqQixNQUFNLENBQUNtQixNQUFNLEVBQUVNLEtBQUssRUFBRUMsV0FBVyxFQUFFTixNQUFNO0FBQzNDLENBQUM7U0FFZXJCLEtBQUssQ0FBQ29CLE1BQU0sRUFBRUMsTUFBTSxFQUFFLENBQUM7SUFBQ0MsS0FBSyxDQUFDQyxTQUFTLENBQUM1QixJQUFJLENBQUM2QixLQUFLLENBQUNKLE1BQU0sRUFBRUMsTUFBTTtBQUFHLENBQUM7U0FFckVwQixNQUFNLENBQUNtQixNQUFNLEVBQUVNLEtBQUssRUFBRUMsS0FBc0IsRUFBRU4sTUFBVyxFQUFFLENBQUM7UUFBdENNLFdBQVcsR0FBWEEsS0FBc0IsY0FBUkMsUUFBUSxHQUF0QkQsS0FBc0IsRUFBRU4sTUFBTSxHQUFOQSxNQUFXLGNBQUYsQ0FBQyxDQUFDLEdBQVhBLE1BQVc7SUFDdkUsR0FBSyxDQUFDUSxJQUFJLEdBQUcsQ0FBQ0g7UUFBQUEsS0FBSztRQUFFQyxXQUFXO0lBQVcsQ0FBQyxDQUEvQixNQUErQixvQkFBUE4sTUFBTSxJQUNyQ1MsaUJBQWlCLEdBQUdSLEtBQUssQ0FBQ0MsU0FBUyxDQUFDdEIsTUFBTSxDQUFDdUIsS0FBSyxDQUFDSixNQUFNLEVBQUVTLElBQUk7SUFFbkUsTUFBTSxDQUFDQyxpQkFBaUI7QUFDMUIsQ0FBQztTQUVlNUIsT0FBTyxDQUFDZSxLQUFLLEVBQUVjLFFBQU8sRUFBRUMsSUFBSSxFQUFFLENBQUM7SUFDN0MsR0FBRyxDQUFDTixLQUFLO0lBRVQsR0FBSyxDQUFDTyxLQUFLLEdBQUdoQixLQUFLLENBQUNpQixJQUFJLENBQUMsUUFBUSxDQUFQSCxPQUFPLEVBQUVJLEtBQUssRUFBSyxDQUFDO1FBQzVDLEdBQUssQ0FBQ0MsTUFBTSxHQUFHSixJQUFJLENBQUNELE9BQU8sRUFBRUksS0FBSztRQUVsQyxFQUFFLEVBQUVDLE1BQU0sRUFBRSxDQUFDO1lBQ1hWLEtBQUssR0FBR1MsS0FBSyxDQUFHLENBQUcsQUFBSCxFQUFHLEFBQUgsQ0FBRztZQUVuQixNQUFNLENBQUMsSUFBSTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQsRUFBRSxFQUFFRixLQUFLLEVBQUUsQ0FBQztRQUNWLEdBQUssQ0FBQ04sV0FBVyxHQUFHLENBQUM7UUFFckJWLEtBQUssQ0FBQ2hCLE1BQU0sQ0FBQ3lCLEtBQUssRUFBRUMsV0FBVyxFQUFFSSxRQUFPO0lBQzFDLENBQUM7SUFFRCxNQUFNLENBQUNFLEtBQUs7QUFDZCxDQUFDO1NBRWU5QixNQUFNLENBQUNjLEtBQUssRUFBRWUsSUFBSSxFQUFFLENBQUM7SUFDbkMsR0FBSyxDQUFDSyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFM0JyQixnQkFBZ0IsQ0FBQ0MsS0FBSyxFQUFFLFFBQVEsQ0FBUGMsT0FBTyxFQUFFSSxLQUFLLEVBQUssQ0FBQztRQUMzQyxHQUFLLENBQUNDLE1BQU0sR0FBR0osSUFBSSxDQUFDRCxPQUFPLEVBQUVJLEtBQUs7UUFFbEMsRUFBRSxHQUFHQyxNQUFNLEVBQUUsQ0FBQztZQUNaLEdBQUssQ0FBQ1YsS0FBSyxHQUFHUyxLQUFLLEVBQ2JSLFdBQVcsR0FBRyxDQUFDLEVBQ2ZXLGVBQWUsR0FBR3JCLEtBQUssQ0FBQ2hCLE1BQU0sQ0FBQ3lCLEtBQUssRUFBRUMsV0FBVyxHQUNqRFksbUJBQW1CLEdBQUcxRCxLQUFLLENBQUN5RCxlQUFlO1lBRWpERCxnQkFBZ0IsQ0FBQ3pDLE9BQU8sQ0FBQzJDLG1CQUFtQixFQUFJLENBQUcsQUFBSCxFQUFHLEFBQUgsQ0FBRztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQ0YsZ0JBQWdCO0FBQ3pCLENBQUM7U0FFZWpDLElBQUksQ0FBQ2EsS0FBSyxFQUFFZSxJQUFJLEVBQUUsQ0FBQztJQUNqQyxHQUFLLENBQUNRLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFbkJ6QixlQUFlLENBQUNFLEtBQUssRUFBRSxRQUFRLENBQVBjLE9BQU8sRUFBRUksS0FBSyxFQUFLLENBQUM7UUFDMUMsR0FBSyxDQUFDQyxNQUFNLEdBQUdKLElBQUksQ0FBQ0QsT0FBTyxFQUFFSSxLQUFLO1FBRWxDLEVBQUUsRUFBRUMsTUFBTSxFQUFFLENBQUM7WUFDWEksUUFBUSxDQUFDN0MsSUFBSSxDQUFDb0MsT0FBTztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQ1MsUUFBUTtBQUNqQixDQUFDO1NBRWVuQyxLQUFLLENBQUNZLEtBQUssRUFBRWUsSUFBSSxFQUFFLENBQUM7SUFDbEMsR0FBRyxDQUFDUyxhQUFhLEdBQUdDLFNBQVM7SUFFN0J6QixLQUFLLENBQUNpQixJQUFJLENBQUMsUUFBUSxDQUFQSCxPQUFPLEVBQUVJLEtBQUssRUFBSyxDQUFDO1FBQzlCLEdBQUssQ0FBQ0MsTUFBTSxHQUFHSixJQUFJLENBQUNELE9BQU8sRUFBRUksS0FBSztRQUVsQyxFQUFFLEdBQUdDLE1BQU0sRUFBRSxDQUFDO1lBQ1osR0FBSyxDQUFDVixLQUFLLEdBQUdTLEtBQUssRUFDYlIsV0FBVyxHQUFHLENBQUMsRUFDZlcsZUFBZSxHQUFHckIsS0FBSyxDQUFDaEIsTUFBTSxDQUFDeUIsS0FBSyxFQUFFQyxXQUFXLEdBQ2pEWSxtQkFBbUIsR0FBRzFELEtBQUssQ0FBQ3lELGVBQWU7WUFFakRHLGFBQWEsR0FBR0YsbUJBQW1CLENBQUcsQ0FBRyxBQUFILEVBQUcsQUFBSCxDQUFHO1lBRXpDLE1BQU0sQ0FBQyxJQUFJO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUNFLGFBQWE7QUFDdEIsQ0FBQztTQUVlbkMsS0FBSyxDQUFDVyxLQUFLLEVBQUVjLFFBQU8sRUFBRUMsSUFBSSxFQUFFLENBQUM7SUFDM0MsR0FBSyxDQUFDQyxLQUFLLEdBQUdoQixLQUFLLENBQUNpQixJQUFJLENBQUMsUUFBUSxDQUFQSCxPQUFPLEVBQUVJLEtBQUssRUFBSyxDQUFDO1FBQzVDLEdBQUssQ0FBQ0MsTUFBTSxHQUFHSixJQUFJLENBQUNELE9BQU8sRUFBRUksS0FBSztRQUVsQyxFQUFFLEVBQUVDLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUk7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUdELEVBQUUsRUFBRUgsS0FBSyxFQUFFLENBQUM7UUFDVmhCLEtBQUssQ0FBQ3RCLElBQUksQ0FBQ29DLFFBQU87SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQ0UsS0FBSztBQUNkLENBQUM7U0FFZTFCLE9BQU8sQ0FBQ2EsTUFBTSxFQUFFQyxNQUFNLEVBQUVXLElBQUksRUFBRSxDQUFDO0lBQzdDWCxNQUFNLENBQUNzQixPQUFPLENBQUMsUUFBUSxDQUFQWixPQUFPLEVBQUVJLEtBQUssRUFBSyxDQUFDO1FBQ2xDLEdBQUssQ0FBQ0MsTUFBTSxHQUFHSixJQUFJLENBQUNELE9BQU8sRUFBRUksS0FBSztRQUVsQyxFQUFFLEVBQUVDLE1BQU0sRUFBRSxDQUFDO1lBQ1hoQixNQUFNLENBQUN6QixJQUFJLENBQUNvQyxPQUFPO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztTQUVldkIsUUFBUSxDQUFDUyxLQUFLLEVBQUVHLE1BQU0sRUFBRUMsTUFBTSxFQUFFVyxJQUFJLEVBQUUsQ0FBQztJQUNyRGYsS0FBSyxDQUFDMEIsT0FBTyxDQUFDLFFBQVEsQ0FBUFosT0FBTyxFQUFFSSxLQUFLLEVBQUssQ0FBQztRQUNqQyxHQUFLLENBQUNDLE1BQU0sR0FBR0osSUFBSSxDQUFDRCxPQUFPLEVBQUVJLEtBQUs7UUFFbENDLE1BQU0sR0FDSmhCLE1BQU0sQ0FBQ3pCLElBQUksQ0FBQ29DLE9BQU8sSUFDakJWLE1BQU0sQ0FBQzFCLElBQUksQ0FBQ29DLE9BQU87SUFDekIsQ0FBQztBQUNILENBQUM7U0FFZXRCLFlBQVksQ0FBQ1EsS0FBSyxFQUFFMkIsUUFBUSxFQUFFLENBQUM7SUFDN0MsR0FBSyxDQUFDQyxXQUFXLEdBQUc1QixLQUFLLENBQUNDLE1BQU07SUFFaEMsR0FBRyxDQUFFLEdBQUcsQ0FBQ2lCLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBR1UsV0FBVyxFQUFFVixLQUFLLEdBQUksQ0FBQztRQUNqRCxHQUFLLENBQUNKLE9BQU8sR0FBR2QsS0FBSyxDQUFDa0IsS0FBSyxHQUNyQlcsTUFBTSxHQUFHRixRQUFRLENBQUNiLE9BQU8sRUFBRUksS0FBSztRQUV0QyxFQUFFLEVBQUVXLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUk7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO0FBQ2QsQ0FBQztTQUVlcEMsYUFBYSxDQUFDTyxLQUFLLEVBQUUyQixRQUFRLEVBQUUsQ0FBQztJQUM5QyxHQUFLLENBQUNDLFdBQVcsR0FBRzVCLEtBQUssQ0FBQ0MsTUFBTTtJQUVoQyxHQUFHLENBQUUsR0FBRyxDQUFDaUIsS0FBSyxHQUFHVSxXQUFXLEdBQUcsQ0FBQyxFQUFFVixLQUFLLElBQUksQ0FBQyxFQUFFQSxLQUFLLEdBQUksQ0FBQztRQUN0RCxHQUFLLENBQUNKLE9BQU8sR0FBR2QsS0FBSyxDQUFDa0IsS0FBSyxHQUNyQlcsTUFBTSxHQUFHRixRQUFRLENBQUNiLE9BQU8sRUFBRUksS0FBSztRQUV0QyxFQUFFLEVBQUVXLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUk7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO0FBQ2QsQ0FBQztTQUVlbkMsYUFBYSxDQUFDTSxLQUFLLEVBQUUyQixRQUFRLEVBQUUsQ0FBQztJQUM5QyxHQUFLLENBQUNDLFdBQVcsR0FBRzVCLEtBQUssQ0FBQ0MsTUFBTTtJQUVoQyxHQUFHLENBQUUsR0FBRyxDQUFDaUIsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHVSxXQUFXLEVBQUVWLEtBQUssR0FBSSxDQUFDO1FBQ2pELEdBQUssQ0FBQ0osT0FBTyxHQUFHZCxLQUFLLENBQUNrQixLQUFLLEdBQ3JCVyxNQUFNLEdBQUdGLFFBQVEsQ0FBQ2IsT0FBTyxFQUFFSSxLQUFLO1FBRXRDLEVBQUUsR0FBR1csTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsS0FBSztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUk7QUFDYixDQUFDO1NBRWVsQyxjQUFjLENBQUNLLEtBQUssRUFBRTJCLFFBQVEsRUFBRSxDQUFDO0lBQy9DLEdBQUssQ0FBQ0MsV0FBVyxHQUFHNUIsS0FBSyxDQUFDQyxNQUFNO0lBRWhDLEdBQUcsQ0FBRSxHQUFHLENBQUNpQixLQUFLLEdBQUdVLFdBQVcsR0FBRyxDQUFDLEVBQUVWLEtBQUssSUFBSSxDQUFDLEVBQUVBLEtBQUssR0FBSSxDQUFDO1FBQ3RELEdBQUssQ0FBQ0osT0FBTyxHQUFHZCxLQUFLLENBQUNrQixLQUFLLEdBQ3JCVyxNQUFNLEdBQUdGLFFBQVEsQ0FBQ2IsT0FBTyxFQUFFSSxLQUFLO1FBRXRDLEVBQUUsR0FBR1csTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsS0FBSztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUk7QUFDYixDQUFDO1NBRWVqQyxjQUFjLENBQUNJLEtBQUssRUFBRTJCLFFBQVEsRUFBRUcsWUFBWSxFQUFFLENBQUM7SUFDN0QsR0FBRyxDQUFDQyxLQUFLLEdBQUdELFlBQVk7SUFFeEJoQyxlQUFlLENBQUNFLEtBQUssRUFBRSxRQUFRLENBQVBjLE9BQU8sRUFBRUksS0FBSyxFQUFLLENBQUM7UUFDMUNhLEtBQUssR0FBR0osUUFBUSxDQUFDSSxLQUFLLEVBQUVqQixPQUFPLEVBQUVJLEtBQUs7SUFDeEMsQ0FBQztJQUVELE1BQU0sQ0FBQ2EsS0FBSztBQUNkLENBQUM7U0FFZWxDLGVBQWUsQ0FBQ0csS0FBSyxFQUFFMkIsUUFBUSxFQUFFRyxZQUFZLEVBQUUsQ0FBQztJQUM5RCxHQUFHLENBQUNDLEtBQUssR0FBR0QsWUFBWTtJQUV4Qi9CLGdCQUFnQixDQUFDQyxLQUFLLEVBQUUsUUFBUSxDQUFQYyxPQUFPLEVBQUVJLEtBQUssRUFBSyxDQUFDO1FBQzNDYSxLQUFLLEdBQUdKLFFBQVEsQ0FBQ0ksS0FBSyxFQUFFakIsT0FBTyxFQUFFSSxLQUFLO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUNhLEtBQUs7QUFDZCxDQUFDO1NBRWVqQyxlQUFlLENBQUNFLEtBQUssRUFBRTJCLFFBQVEsRUFBRSxDQUFDO0lBQ2hELEdBQUssQ0FBQ0MsV0FBVyxHQUFHNUIsS0FBSyxDQUFDQyxNQUFNO0lBRWhDLEdBQUcsQ0FBRSxHQUFHLENBQUNpQixLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEdBQUdVLFdBQVcsRUFBRVYsS0FBSyxHQUFJLENBQUM7UUFDakQsR0FBSyxDQUFDSixPQUFPLEdBQUdkLEtBQUssQ0FBQ2tCLEtBQUs7UUFFM0JTLFFBQVEsQ0FBQ2IsT0FBTyxFQUFFSSxLQUFLO0lBQ3pCLENBQUM7QUFDSCxDQUFDO1NBRWVuQixnQkFBZ0IsQ0FBQ0MsS0FBSyxFQUFFMkIsUUFBUSxFQUFFLENBQUM7SUFDakQsR0FBSyxDQUFDQyxXQUFXLEdBQUc1QixLQUFLLENBQUNDLE1BQU07SUFFaEMsR0FBRyxDQUFFLEdBQUcsQ0FBQ2lCLEtBQUssR0FBR1UsV0FBVyxHQUFHLENBQUMsRUFBRVYsS0FBSyxJQUFJLENBQUMsRUFBRUEsS0FBSyxHQUFJLENBQUM7UUFDdEQsR0FBSyxDQUFDSixPQUFPLEdBQUdkLEtBQUssQ0FBQ2tCLEtBQUs7UUFFM0JTLFFBQVEsQ0FBQ2IsT0FBTyxFQUFFSSxLQUFLO0lBQ3pCLENBQUM7QUFDSCxDQUFDO2VBRWMsQ0FBQztJQUNkdEQsS0FBSyxFQUFMQSxLQUFLO0lBQ0xDLE1BQU0sRUFBTkEsTUFBTTtJQUNOQyxLQUFLLEVBQUxBLEtBQUs7SUFDTEMsTUFBTSxFQUFOQSxNQUFNO0lBQ05DLEtBQUssRUFBTEEsS0FBSztJQUNMQyxTQUFTLEVBQVRBLFNBQVM7SUFDVEMsVUFBVSxFQUFWQSxVQUFVO0lBQ1ZDLFNBQVMsRUFBVEEsU0FBUztJQUNUQyxVQUFVLEVBQVZBLFVBQVU7SUFDVkMsSUFBSSxFQUFKQSxJQUFJO0lBQ0pDLElBQUksRUFBSkEsSUFBSTtJQUNKQyxJQUFJLEVBQUpBLElBQUk7SUFDSkMsSUFBSSxFQUFKQSxJQUFJO0lBQ0pDLEtBQUssRUFBTEEsS0FBSztJQUNMQyxJQUFJLEVBQUpBLElBQUk7SUFDSkMsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLE1BQU0sRUFBTkEsTUFBTTtJQUNOQyxLQUFLLEVBQUxBLEtBQUs7SUFDTEMsSUFBSSxFQUFKQSxJQUFJO0lBQ0pDLEtBQUssRUFBTEEsS0FBSztJQUNMQyxNQUFNLEVBQU5BLE1BQU07SUFDTkMsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLE1BQU0sRUFBTkEsTUFBTTtJQUNOQyxJQUFJLEVBQUpBLElBQUk7SUFDSkMsS0FBSyxFQUFMQSxLQUFLO0lBQ0xDLEtBQUssRUFBTEEsS0FBSztJQUNMQyxPQUFPLEVBQVBBLE9BQU87SUFDUEMsUUFBUSxFQUFSQSxRQUFRO0lBQ1JDLFlBQVksRUFBWkEsWUFBWTtJQUNaQyxhQUFhLEVBQWJBLGFBQWE7SUFDYkMsYUFBYSxFQUFiQSxhQUFhO0lBQ2JDLGNBQWMsRUFBZEEsY0FBYztJQUNkQyxjQUFjLEVBQWRBLGNBQWM7SUFDZEMsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZDLGVBQWUsRUFBZkEsZUFBZTtJQUNmQyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtBQUNsQixDQUFDIn0=
326
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIl0sIm5hbWVzIjpbImZpcnN0Iiwic2Vjb25kIiwidGhpcmQiLCJmb3VydGgiLCJmaWZ0aCIsImZpZnRoTGFzdCIsImZvdXJ0aExhc3QiLCJ0aGlyZExhc3QiLCJzZWNvbmRMYXN0IiwiZmlyc3RMYXN0IiwibGFzdCIsImhlYWQiLCJ0YWlsIiwiYmFjayIsImZyb250IiwicHVzaCIsInVuc2hpZnQiLCJjb25jYXQiLCJjbGVhciIsImNvcHkiLCJtZXJnZSIsInNwbGljZSIsInJlcGxhY2UiLCJmaWx0ZXIiLCJmaW5kIiwicHJ1bmUiLCJwYXRjaCIsImF1Z21lbnQiLCJzZXBhcmF0ZSIsImZvcndhcmRzU29tZSIsImJhY2t3YXJkc1NvbWUiLCJmb3J3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRXZlcnkiLCJmb3J3YXJkc1JlZHVjZSIsImJhY2t3YXJkc1JlZHVjZSIsImZvcndhcmRzRm9yRWFjaCIsImJhY2t3YXJkc0ZvckVhY2giLCJhcnJheSIsImxlbmd0aCIsInNsaWNlIiwiYXJyYXkxIiwiYXJyYXkyIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJhcHBseSIsImVsZW1lbnRPckFycmF5MiIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJJbmZpbml0eSIsImFyZ3MiLCJkZWxldGVkSXRlbXNBcnJheSIsImVsZW1lbnQiLCJ0ZXN0IiwiZm91bmQiLCJzb21lIiwiaW5kZXgiLCJwYXNzZWQiLCJmaWx0ZXJlZEVsZW1lbnRzIiwiZGVsZXRlZEVsZW1lbnRzIiwiZmlyc3REZWxldGVkRWxlbWVudCIsImVsZW1lbnRzIiwicHJ1bmVkRWxlbWVudCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJjYWxsYmFjayIsImFycmF5TGVuZ3RoIiwicmVzdWx0IiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiXSwibWFwcGluZ3MiOiJBQUFBLENBQVk7Ozs7UUFFSUEsS0FBSyxHQUFMQSxLQUFLO1FBRUxDLE1BQU0sR0FBTkEsTUFBTTtRQUVOQyxLQUFLLEdBQUxBLEtBQUs7UUFFTEMsTUFBTSxHQUFOQSxNQUFNO1FBRU5DLEtBQUssR0FBTEEsS0FBSztRQUVMQyxTQUFTLEdBQVRBLFNBQVM7UUFFVEMsVUFBVSxHQUFWQSxVQUFVO1FBRVZDLFNBQVMsR0FBVEEsU0FBUztRQUVUQyxVQUFVLEdBQVZBLFVBQVU7UUFFVkMsU0FBUyxHQUFUQSxTQUFTO1FBRVRDLElBQUksR0FBSkEsSUFBSTtRQUVKQyxJQUFJLEdBQUpBLElBQUk7UUFFSkMsSUFBSSxHQUFKQSxJQUFJO1FBRUpDLElBQUksR0FBSkEsSUFBSTtRQUVKQyxLQUFLLEdBQUxBLEtBQUs7UUFFTEMsSUFBSSxHQUFKQSxJQUFJ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
@@ -7,48 +7,47 @@ var _constants = require("../constants");
7
7
  var _methods = require("../methods");
8
8
  var _http = require("../utilities/http");
9
9
  var http = require("http"), https = require("https");
10
- function get(host, uri, query, headers, callback) {
11
- if (callback === undefined) {
12
- callback = headers; ///
13
- headers = {
14
- };
15
- }
16
- var method = _methods.GET_METHOD, _request = request1(host, uri, query, method, headers, callback);
17
- _request.end();
18
- return _request;
19
- }
20
- function post(host, uri, query, headers, callback) {
21
- if (callback === undefined) {
22
- callback = headers; ///
23
- headers = {
24
- };
25
- }
26
- var method = _methods.POST_METHOD, _request = request1(host, uri, query, method, headers, callback);
27
- return _request;
28
- }
29
- function request1(host, uri, query, method, headers, callback) {
10
+ function createRequest1(host, uri, query, method, headers, callback) {
30
11
  var port = (0, _http).portFromHost(host), secure = (0, _http).secureFromHost(host), hostname = (0, _http).hostnameFromHost(host), queryString = (0, _http).queryStringFromQuery(query), path = queryString === _constants.EMPTY_STRING ? uri : "".concat(uri, "?").concat(queryString), options = {
31
12
  hostname: hostname,
32
13
  headers: headers,
33
14
  method: method,
34
15
  port: port,
35
16
  path: path
36
- }, request = secure ? https.request : http.request; ///
37
- var _request = request(options, function(response) {
17
+ }, createRequest = secure ? https.request : http.request; ///
18
+ var request = createRequest(options, function(response) {
38
19
  var error = null;
39
20
  callback(error, response);
40
21
  });
41
- _request.on(_constants.ERROR, function(error) {
22
+ request.on(_constants.ERROR, function(error) {
42
23
  var response = null;
43
24
  callback(error, response);
44
25
  });
45
- return _request;
26
+ return request;
27
+ }
28
+ function createGetRequest(host, uri, query, headers, callback) {
29
+ if (callback === undefined) {
30
+ callback = headers; ///
31
+ headers = {
32
+ };
33
+ }
34
+ var method = _methods.GET_METHOD, getRequest = createRequest1(host, uri, query, method, headers, callback);
35
+ return getRequest;
36
+ }
37
+ function createPostRequest(host, uri, query, headers, callback) {
38
+ if (callback === undefined) {
39
+ callback = headers; ///
40
+ headers = {
41
+ };
42
+ }
43
+ var method = _methods.POST_METHOD, postRequest = createRequest1(host, uri, query, method, headers, callback);
44
+ return postRequest;
46
45
  }
47
46
  var _default = {
48
- get: get,
49
- post: post,
50
- request: request1
47
+ createRequest: createRequest1,
48
+ createGetRequest: createGetRequest,
49
+ createPostRequest: createPostRequest
51
50
  };
52
51
  exports.default = _default;
53
52
 
54
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVxdWVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpLFxuICAgICAgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5cbmltcG9ydCB7IEVSUk9SLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBwb3J0RnJvbUhvc3QsIHNlY3VyZUZyb21Ib3N0LCBob3N0bmFtZUZyb21Ib3N0LCBxdWVyeVN0cmluZ0Zyb21RdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5mdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIF9yZXF1ZXN0ID0gcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNhbGxiYWNrKTtcblxuICBfcmVxdWVzdC5lbmQoKTtcblxuICByZXR1cm4gX3JlcXVlc3Q7XG59XG5cbmZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IFBPU1RfTUVUSE9ELFxuICAgICAgICBfcmVxdWVzdCA9IHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIF9yZXF1ZXN0O1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgY29uc3QgcG9ydCA9IHBvcnRGcm9tSG9zdChob3N0KSxcbiAgICAgICAgc2VjdXJlID0gc2VjdXJlRnJvbUhvc3QoaG9zdCksXG4gICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWVGcm9tSG9zdChob3N0KSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHBhdGggPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgICB1cmkgOlxuICAgICAgICAgICAgICAgICAgYCR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3QgPSBzZWN1cmUgP1xuICAgICAgICAgICAgICAgICAgICBodHRwcy5yZXF1ZXN0IDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgaHR0cC5yZXF1ZXN0OyAvLy9cblxuICBjb25zdCBfcmVxdWVzdCA9IHJlcXVlc3Qob3B0aW9ucywgKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBudWxsO1xuXG4gICAgY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKTtcbiAgfSk7XG5cbiAgX3JlcXVlc3Qub24oRVJST1IsIChlcnJvcikgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbnVsbDtcblxuICAgIGNhbGxiYWNrKGVycm9yLCByZXNwb25zZSk7XG4gIH0pO1xuXG4gIHJldHVybiBfcmVxdWVzdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXQsXG4gIHBvc3QsXG4gIHJlcXVlc3Rcbn07XG4iXSwibmFtZXMiOlsiaHR0cCIsInJlcXVpcmUiLCJodHRwcyIsImdldCIsImhvc3QiLCJ1cmkiLCJxdWVyeSIsImhlYWRlcnMiLCJjYWxsYmFjayIsInVuZGVmaW5lZCIsIm1ldGhvZCIsIl9yZXF1ZXN0IiwicmVxdWVzdCIsImVuZCIsInBvc3QiLCJwb3J0Iiwic2VjdXJlIiwiaG9zdG5hbWUiLCJxdWVyeVN0cmluZyIsInBhdGgiLCJvcHRpb25zIiwicmVzcG9uc2UiLCJlcnJvciIsIm9uIl0sIm1hcHBpbmdzIjoiQUFBQSxDQUFZOzs7OztBQUt3QixHQUFjLENBQWQsVUFBYztBQUNWLEdBQVksQ0FBWixRQUFZO0FBQ2lDLEdBQW1CLENBQW5CLEtBQW1CO0FBTHhHLEdBQUssQ0FBQ0EsSUFBSSxHQUFHQyxPQUFPLENBQUMsQ0FBTSxRQUNyQkMsS0FBSyxHQUFHRCxPQUFPLENBQUMsQ0FBTztTQU1wQkUsR0FBRyxDQUFDQyxJQUFJLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRSxDQUFDO0lBQ2pELEVBQUUsRUFBRUEsUUFBUSxLQUFLQyxTQUFTLEVBQUUsQ0FBQztRQUMzQkQsUUFBUSxHQUFHRCxPQUFPLENBQUUsQ0FBRyxBQUFILEVBQUcsQUFBSCxDQUFHO1FBQ3ZCQSxPQUFPLEdBQUcsQ0FBQztRQUFBLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBSyxDQUFDRyxNQUFNLEdBVDBCLFFBQVksYUFVNUNDLFFBQVEsR0FBR0MsUUFBTyxDQUFDUixJQUFJLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFSSxNQUFNLEVBQUVILE9BQU8sRUFBRUMsUUFBUTtJQUVwRUcsUUFBUSxDQUFDRSxHQUFHO0lBRVosTUFBTSxDQUFDRixRQUFRO0FBQ2pCLENBQUM7U0FFUUcsSUFBSSxDQUFDVixJQUFJLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRSxDQUFDO0lBQ2xELEVBQUUsRUFBRUEsUUFBUSxLQUFLQyxTQUFTLEVBQUUsQ0FBQztRQUMzQkQsUUFBUSxHQUFHRCxPQUFPLENBQUUsQ0FBRyxBQUFILEVBQUcsQUFBSCxDQUFHO1FBQ3ZCQSxPQUFPLEdBQUcsQ0FBQztRQUFBLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBSyxDQUFDRyxNQUFNLEdBdkIwQixRQUFZLGNBd0I1Q0MsUUFBUSxHQUFHQyxRQUFPLENBQUNSLElBQUksRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUVJLE1BQU0sRUFBRUgsT0FBTyxFQUFFQyxRQUFRO0lBRXBFLE1BQU0sQ0FBQ0csUUFBUTtBQUNqQixDQUFDO1NBRVFDLFFBQU8sQ0FBQ1IsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUksTUFBTSxFQUFFSCxPQUFPLEVBQUVDLFFBQVEsRUFBRSxDQUFDO0lBQzdELEdBQUssQ0FBQ08sSUFBSSxPQTdCeUUsS0FBbUIsZUE2QjVFWCxJQUFJLEdBQ3hCWSxNQUFNLE9BOUJ1RSxLQUFtQixpQkE4QnhFWixJQUFJLEdBQzVCYSxRQUFRLE9BL0JxRSxLQUFtQixtQkErQnBFYixJQUFJLEdBQ2hDYyxXQUFXLE9BaENrRSxLQUFtQix1QkFnQzdEWixLQUFLLEdBQ3hDYSxJQUFJLEdBQUlELFdBQVcsS0FuQ1MsVUFBYyxnQkFvQ2pDYixHQUFHLEdBQ0QsQ0FBQSxFQUFTYSxNQUFXLENBQWxCYixHQUFHLEVBQUMsQ0FBQyxJQUFjLE1BQUEsQ0FBWmEsV0FBVyxHQUMvQkUsT0FBTyxHQUFHLENBQUM7UUFDVEgsUUFBUSxFQUFSQSxRQUFRO1FBQ1JWLE9BQU8sRUFBUEEsT0FBTztRQUNQRyxNQUFNLEVBQU5BLE1BQU07UUFDTkssSUFBSSxFQUFKQSxJQUFJO1FBQ0pJLElBQUksRUFBSkEsSUFBSTtJQUNOLENBQUMsRUFDRFAsT0FBTyxHQUFHSSxNQUFNLEdBQ0pkLEtBQUssQ0FBQ1UsT0FBTyxHQUNYWixJQUFJLENBQUNZLE9BQU8sQ0FBRSxDQUFHLEFBQUgsRUFBRyxBQUFILENBQUc7SUFFckMsR0FBSyxDQUFDRCxRQUFRLEdBQUdDLE9BQU8sQ0FBQ1EsT0FBTyxFQUFFLFFBQVEsQ0FBUEMsUUFBUSxFQUFLLENBQUM7UUFDL0MsR0FBSyxDQUFDQyxLQUFLLEdBQUcsSUFBSTtRQUVsQmQsUUFBUSxDQUFDYyxLQUFLLEVBQUVELFFBQVE7SUFDMUIsQ0FBQztJQUVEVixRQUFRLENBQUNZLEVBQUUsQ0F2RHVCLFVBQWMsUUF1RDdCLFFBQVEsQ0FBUEQsS0FBSyxFQUFLLENBQUM7UUFDN0IsR0FBSyxDQUFDRCxRQUFRLEdBQUcsSUFBSTtRQUVyQmIsUUFBUSxDQUFDYyxLQUFLLEVBQUVELFFBQVE7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQ1YsUUFBUTtBQUNqQixDQUFDO2VBRWMsQ0FBQztJQUNkUixHQUFHLEVBQUhBLEdBQUc7SUFDSFcsSUFBSSxFQUFKQSxJQUFJO0lBQ0pGLE9BQU8sRUFBUEEsUUFBTztBQUNULENBQUMifQ==
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVxdWVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpLFxuICAgICAgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5cbmltcG9ydCB7IEVSUk9SLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHRVRfTUVUSE9ELCBQT1NUX01FVEhPRCB9IGZyb20gXCIuLi9tZXRob2RzXCI7XG5pbXBvcnQgeyBwb3J0RnJvbUhvc3QsIHNlY3VyZUZyb21Ib3N0LCBob3N0bmFtZUZyb21Ib3N0LCBxdWVyeVN0cmluZ0Zyb21RdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvaHR0cFwiO1xuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgY29uc3QgcG9ydCA9IHBvcnRGcm9tSG9zdChob3N0KSxcbiAgICAgICAgc2VjdXJlID0gc2VjdXJlRnJvbUhvc3QoaG9zdCksXG4gICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWVGcm9tSG9zdChob3N0KSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHBhdGggPSAocXVlcnlTdHJpbmcgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgICB1cmkgOlxuICAgICAgICAgICAgICAgICAgYCR7dXJpfT8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBwYXRoXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZVJlcXVlc3QgPSBzZWN1cmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwcy5yZXF1ZXN0IDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC5yZXF1ZXN0OyAvLy9cblxuICBjb25zdCByZXF1ZXN0ID0gY3JlYXRlUmVxdWVzdChvcHRpb25zLCAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IG51bGw7XG5cbiAgICBjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpO1xuICB9KTtcblxuICByZXF1ZXN0Lm9uKEVSUk9SLCAoZXJyb3IpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IG51bGw7XG5cbiAgICBjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpO1xuICB9KTtcblxuICByZXR1cm4gcmVxdWVzdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR2V0UmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgZ2V0UmVxdWVzdCA9IGNyZWF0ZVJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIGdldFJlcXVlc3Q7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvc3RSZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIGhlYWRlcnMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FsbGJhY2sgPSBoZWFkZXJzOyAvLy9cbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBQT1NUX01FVEhPRCxcbiAgICAgICAgcG9zdFJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY2FsbGJhY2spO1xuXG4gIHJldHVybiBwb3N0UmVxdWVzdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVSZXF1ZXN0LFxuICBjcmVhdGVHZXRSZXF1ZXN0LFxuICBjcmVhdGVQb3N0UmVxdWVzdFxufTtcbiJdLCJuYW1lcyI6WyJodHRwIiwicmVxdWlyZSIsImh0dHBzIiwiY3JlYXRlUmVxdWVzdCIsImhvc3QiLCJ1cmkiLCJxdWVyeSIsIm1ldGhvZCIsImhlYWRlcnMiLCJjYWxsYmFjayIsInBvcnQiLCJzZWN1cmUiLCJob3N0bmFtZSIsInF1ZXJ5U3RyaW5nIiwicGF0aCIsIm9wdGlvbnMiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJlcnJvciIsIm9uIiwiY3JlYXRlR2V0UmVxdWVzdCIsInVuZGVmaW5lZCIsImdldFJlcXVlc3QiLCJjcmVhdGVQb3N0UmVxdWVzdCIsInBvc3RSZXF1ZXN0Il0sIm1hcHBpbmdzIjoiQUFBQSxDQUFZOzs7OztBQUt3QixHQUFjLENBQWQsVUFBYztBQUNWLEdBQVksQ0FBWixRQUFZO0FBQ2lDLEdBQW1CLENBQW5CLEtBQW1CO0FBTHhHLEdBQUssQ0FBQ0EsSUFBSSxHQUFHQyxPQUFPLENBQUMsQ0FBTSxRQUNyQkMsS0FBSyxHQUFHRCxPQUFPLENBQUMsQ0FBTztTQU1wQkUsY0FBYSxDQUFDQyxJQUFJLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFLENBQUM7SUFDbkUsR0FBSyxDQUFDQyxJQUFJLE9BSHlFLEtBQW1CLGVBRzVFTixJQUFJLEdBQ3hCTyxNQUFNLE9BSnVFLEtBQW1CLGlCQUl4RVAsSUFBSSxHQUM1QlEsUUFBUSxPQUxxRSxLQUFtQixtQkFLcEVSLElBQUksR0FDaENTLFdBQVcsT0FOa0UsS0FBbUIsdUJBTTdEUCxLQUFLLEdBQ3hDUSxJQUFJLEdBQUlELFdBQVcsS0FUUyxVQUFjLGdCQVVqQ1IsR0FBRyxHQUNELENBQUEsRUFBU1EsTUFBVyxDQUFsQlIsR0FBRyxFQUFDLENBQUMsSUFBYyxNQUFBLENBQVpRLFdBQVcsR0FDL0JFLE9BQU8sR0FBRyxDQUFDO1FBQ1RILFFBQVEsRUFBUkEsUUFBUTtRQUNSSixPQUFPLEVBQVBBLE9BQU87UUFDUEQsTUFBTSxFQUFOQSxNQUFNO1FBQ05HLElBQUksRUFBSkEsSUFBSTtRQUNKSSxJQUFJLEVBQUpBLElBQUk7SUFDTixDQUFDLEVBQ0RYLGFBQWEsR0FBR1EsTUFBTSxHQUNKVCxLQUFLLENBQUNjLE9BQU8sR0FDWGhCLElBQUksQ0FBQ2dCLE9BQU8sQ0FBRSxDQUFHLEFBQUgsRUFBRyxBQUFILENBQUc7SUFFM0MsR0FBSyxDQUFDQSxPQUFPLEdBQUdiLGFBQWEsQ0FBQ1ksT0FBTyxFQUFFLFFBQVEsQ0FBUEUsUUFBUSxFQUFLLENBQUM7UUFDcEQsR0FBSyxDQUFDQyxLQUFLLEdBQUcsSUFBSTtRQUVsQlQsUUFBUSxDQUFDUyxLQUFLLEVBQUVELFFBQVE7SUFDMUIsQ0FBQztJQUVERCxPQUFPLENBQUNHLEVBQUUsQ0E3QndCLFVBQWMsUUE2QjlCLFFBQVEsQ0FBUEQsS0FBSyxFQUFLLENBQUM7UUFDNUIsR0FBSyxDQUFDRCxRQUFRLEdBQUcsSUFBSTtRQUVyQlIsUUFBUSxDQUFDUyxLQUFLLEVBQUVELFFBQVE7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQ0QsT0FBTztBQUNoQixDQUFDO1NBRVFJLGdCQUFnQixDQUFDaEIsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUUsT0FBTyxFQUFFQyxRQUFRLEVBQUUsQ0FBQztJQUM5RCxFQUFFLEVBQUVBLFFBQVEsS0FBS1ksU0FBUyxFQUFFLENBQUM7UUFDM0JaLFFBQVEsR0FBR0QsT0FBTyxDQUFFLENBQUcsQUFBSCxFQUFHLEFBQUgsQ0FBRztRQUN2QkEsT0FBTyxHQUFHLENBQUM7UUFBQSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUssQ0FBQ0QsTUFBTSxHQTNDMEIsUUFBWSxhQTRDNUNlLFVBQVUsR0FBR25CLGNBQWEsQ0FBQ0MsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVDLFFBQVE7SUFFNUUsTUFBTSxDQUFDYSxVQUFVO0FBQ25CLENBQUM7U0FFUUMsaUJBQWlCLENBQUNuQixJQUFJLEVBQUVDLEdBQUcsRUFBRUMsS0FBSyxFQUFFRSxPQUFPLEVBQUVDLFFBQVEsRUFBRSxDQUFDO0lBQy9ELEVBQUUsRUFBRUEsUUFBUSxLQUFLWSxTQUFTLEVBQUUsQ0FBQztRQUMzQlosUUFBUSxHQUFHRCxPQUFPLENBQUUsQ0FBRyxBQUFILEVBQUcsQUFBSCxDQUFHO1FBQ3ZCQSxPQUFPLEdBQUcsQ0FBQztRQUFBLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBSyxDQUFDRCxNQUFNLEdBdkQwQixRQUFZLGNBd0Q1Q2lCLFdBQVcsR0FBR3JCLGNBQWEsQ0FBQ0MsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVDLFFBQVE7SUFFN0UsTUFBTSxDQUFDZSxXQUFXO0FBQ3BCLENBQUM7ZUFFYyxDQUFDO0lBQ2RyQixhQUFhLEVBQWJBLGNBQWE7SUFDYmlCLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCRyxpQkFBaUIsRUFBakJBLGlCQUFpQjtBQUNuQixDQUFDIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "necessary",
3
3
  "author": "James Smith",
4
- "version": "9.1.5",
4
+ "version": "10.0.3",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/necessary",
7
7
  "description": "A collection of utility functions.",
@@ -18,6 +18,8 @@ export function thirdLast(array) { return array[array.length - 3]; }
18
18
 
19
19
  export function secondLast(array) { return array[array.length - 2]; }
20
20
 
21
+ export function firstLast(array) { return array[array.length - 1]; }
22
+
21
23
  export function last(array) { return array[array.length - 1]; }
22
24
 
23
25
  export function head(array) { return array.slice(0, 1); }
@@ -285,6 +287,7 @@ export default {
285
287
  fourthLast,
286
288
  thirdLast,
287
289
  secondLast,
290
+ firstLast,
288
291
  last,
289
292
  head,
290
293
  tail,
@@ -7,33 +7,7 @@ import { ERROR, EMPTY_STRING } from "../constants";
7
7
  import { GET_METHOD, POST_METHOD } from "../methods";
8
8
  import { portFromHost, secureFromHost, hostnameFromHost, queryStringFromQuery } from "../utilities/http";
9
9
 
10
- function get(host, uri, query, headers, callback) {
11
- if (callback === undefined) {
12
- callback = headers; ///
13
- headers = {};
14
- }
15
-
16
- const method = GET_METHOD,
17
- _request = request(host, uri, query, method, headers, callback);
18
-
19
- _request.end();
20
-
21
- return _request;
22
- }
23
-
24
- function post(host, uri, query, headers, callback) {
25
- if (callback === undefined) {
26
- callback = headers; ///
27
- headers = {};
28
- }
29
-
30
- const method = POST_METHOD,
31
- _request = request(host, uri, query, method, headers, callback);
32
-
33
- return _request;
34
- }
35
-
36
- function request(host, uri, query, method, headers, callback) {
10
+ function createRequest(host, uri, query, method, headers, callback) {
37
11
  const port = portFromHost(host),
38
12
  secure = secureFromHost(host),
39
13
  hostname = hostnameFromHost(host),
@@ -48,27 +22,51 @@ function request(host, uri, query, method, headers, callback) {
48
22
  port,
49
23
  path
50
24
  },
51
- request = secure ?
52
- https.request : ///
53
- http.request; ///
25
+ createRequest = secure ?
26
+ https.request : ///
27
+ http.request; ///
54
28
 
55
- const _request = request(options, (response) => {
29
+ const request = createRequest(options, (response) => {
56
30
  const error = null;
57
31
 
58
32
  callback(error, response);
59
33
  });
60
34
 
61
- _request.on(ERROR, (error) => {
35
+ request.on(ERROR, (error) => {
62
36
  const response = null;
63
37
 
64
38
  callback(error, response);
65
39
  });
66
40
 
67
- return _request;
41
+ return request;
42
+ }
43
+
44
+ function createGetRequest(host, uri, query, headers, callback) {
45
+ if (callback === undefined) {
46
+ callback = headers; ///
47
+ headers = {};
48
+ }
49
+
50
+ const method = GET_METHOD,
51
+ getRequest = createRequest(host, uri, query, method, headers, callback);
52
+
53
+ return getRequest;
54
+ }
55
+
56
+ function createPostRequest(host, uri, query, headers, callback) {
57
+ if (callback === undefined) {
58
+ callback = headers; ///
59
+ headers = {};
60
+ }
61
+
62
+ const method = POST_METHOD,
63
+ postRequest = createRequest(host, uri, query, method, headers, callback);
64
+
65
+ return postRequest;
68
66
  }
69
67
 
70
68
  export default {
71
- get,
72
- post,
73
- request
69
+ createRequest,
70
+ createGetRequest,
71
+ createPostRequest
74
72
  };