clientnode 4.0.1491 → 4.0.1492

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.
Files changed (113) hide show
  1. package/dist/Lock.js +83 -68
  2. package/dist/Logger.js +163 -693
  3. package/dist/Semaphore.js +46 -55
  4. package/dist/array.js +337 -545
  5. package/dist/cli.js +37 -44
  6. package/dist/constants.js +110 -184
  7. package/dist/context.js +25 -209
  8. package/dist/cookie.js +48 -204
  9. package/dist/data-transfer.js +166 -701
  10. package/dist/datetime.js +245 -1042
  11. package/dist/domNode.js +277 -427
  12. package/dist/expression/evaluators.js +234 -1108
  13. package/dist/expression/helper.js +82 -100
  14. package/dist/expression/index.js +10 -1253
  15. package/dist/expression/indicator-functions.js +21 -208
  16. package/dist/expression/type.js +5 -1
  17. package/dist/filesystem.js +324 -286
  18. package/dist/function.js +51 -90
  19. package/dist/index.js +26 -3059
  20. package/dist/indicators.js +79 -418
  21. package/dist/module.js +109 -154
  22. package/dist/number.js +25 -397
  23. package/dist/object.js +803 -849
  24. package/dist/process.js +38 -200
  25. package/dist/property-types.js +96 -17
  26. package/dist/scope.js +56 -1982
  27. package/dist/string.js +626 -924
  28. package/dist/test-helper.js +289 -514
  29. package/dist/type.js +9 -4
  30. package/dist/utility.js +91 -310
  31. package/package.json +2 -2
  32. package/dist/Lock.d.ts +0 -39
  33. package/dist/Logger.d.ts +0 -102
  34. package/dist/Semaphore.d.ts +0 -29
  35. package/dist/array.d.ts +0 -150
  36. package/dist/bundle/index.js +0 -4507
  37. package/dist/cli.d.ts +0 -31
  38. package/dist/compatible/Lock.js +0 -85
  39. package/dist/compatible/Logger.js +0 -715
  40. package/dist/compatible/Semaphore.js +0 -74
  41. package/dist/compatible/array.js +0 -660
  42. package/dist/compatible/cli.js +0 -58
  43. package/dist/compatible/constants.js +0 -200
  44. package/dist/compatible/context.js +0 -224
  45. package/dist/compatible/cookie.js +0 -240
  46. package/dist/compatible/data-transfer.js +0 -751
  47. package/dist/compatible/datetime.js +0 -1083
  48. package/dist/compatible/domNode.js +0 -481
  49. package/dist/compatible/expression/evaluators.js +0 -1147
  50. package/dist/compatible/expression/helper.js +0 -115
  51. package/dist/compatible/expression/index.js +0 -1269
  52. package/dist/compatible/expression/indicator-functions.js +0 -224
  53. package/dist/compatible/expression/type.js +0 -16
  54. package/dist/compatible/filesystem.js +0 -373
  55. package/dist/compatible/function.js +0 -114
  56. package/dist/compatible/index.js +0 -3076
  57. package/dist/compatible/indicators.js +0 -471
  58. package/dist/compatible/module.js +0 -168
  59. package/dist/compatible/number.js +0 -433
  60. package/dist/compatible/object.js +0 -1037
  61. package/dist/compatible/process.js +0 -230
  62. package/dist/compatible/property-types.js +0 -36
  63. package/dist/compatible/scope.js +0 -2011
  64. package/dist/compatible/string.js +0 -1151
  65. package/dist/compatible/test-helper.js +0 -837
  66. package/dist/compatible/type.js +0 -16
  67. package/dist/compatible/utility.js +0 -358
  68. package/dist/constants.d.ts +0 -99
  69. package/dist/context.d.ts +0 -8
  70. package/dist/cookie.d.ts +0 -31
  71. package/dist/data-transfer.d.ts +0 -45
  72. package/dist/datetime.d.ts +0 -37
  73. package/dist/domNode.d.ts +0 -82
  74. package/dist/expression/evaluators.d.ts +0 -55
  75. package/dist/expression/helper.d.ts +0 -4
  76. package/dist/expression/index.d.ts +0 -7
  77. package/dist/expression/indicator-functions.d.ts +0 -14
  78. package/dist/expression/type.d.ts +0 -70
  79. package/dist/filesystem.d.ts +0 -143
  80. package/dist/function.d.ts +0 -20
  81. package/dist/index.d.ts +0 -23
  82. package/dist/indicators.d.ts +0 -68
  83. package/dist/module.d.ts +0 -10
  84. package/dist/number.d.ts +0 -35
  85. package/dist/object.d.ts +0 -231
  86. package/dist/process.d.ts +0 -22
  87. package/dist/property-types.d.ts +0 -460
  88. package/dist/scope.d.ts +0 -44
  89. package/dist/string.d.ts +0 -319
  90. package/dist/test/Lock.d.ts +0 -1
  91. package/dist/test/Logger.d.ts +0 -1
  92. package/dist/test/Semaphore.d.ts +0 -1
  93. package/dist/test/array.d.ts +0 -1
  94. package/dist/test/cookie.d.ts +0 -1
  95. package/dist/test/data-transfer.d.ts +0 -1
  96. package/dist/test/datetime.d.ts +0 -1
  97. package/dist/test/domNode.d.ts +0 -1
  98. package/dist/test/expression/evaluators.d.ts +0 -1
  99. package/dist/test/expression/helper.d.ts +0 -1
  100. package/dist/test/expression/indicator-functions.d.ts +0 -1
  101. package/dist/test/filesystem.d.ts +0 -1
  102. package/dist/test/function.d.ts +0 -1
  103. package/dist/test/indicators.d.ts +0 -1
  104. package/dist/test/number.d.ts +0 -1
  105. package/dist/test/object.d.ts +0 -1
  106. package/dist/test/process.d.ts +0 -1
  107. package/dist/test/property-types.d.ts +0 -1
  108. package/dist/test/scope.d.ts +0 -1
  109. package/dist/test/string.d.ts +0 -1
  110. package/dist/test/utility.d.ts +0 -1
  111. package/dist/test-helper.d.ts +0 -245
  112. package/dist/type.d.ts +0 -248
  113. package/dist/utility.d.ts +0 -44
package/dist/function.js CHANGED
@@ -1,85 +1,9 @@
1
- if(typeof window==='undefined'||window===null)var window=(typeof globalThis==='undefined'||globalThis===null)?{}:globalThis;import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_array_includes_js_66c3fd7d__ from "core-js/modules/es.array.includes.js";
2
- /******/ var __webpack_modules__ = ([
3
- /* 0 */
4
- /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
5
-
6
- var x = function(y) {
7
- var x = {}; __webpack_require__.d(x, y); return x
8
- }
9
- var y = function(x) { return function() { return x; }; }
10
- module.exports = x({ });
11
-
12
- /***/ })
13
- /******/ ]);
14
- /************************************************************************/
15
- /******/ // The module cache
16
- /******/ var __webpack_module_cache__ = {};
17
- /******/
18
- /******/ // The require function
19
- /******/ function __webpack_require__(moduleId) {
20
- /******/ // Check if module is in cache
21
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
22
- /******/ if (cachedModule !== undefined) {
23
- /******/ return cachedModule.exports;
24
- /******/ }
25
- /******/ // Create a new module (and put it into the cache)
26
- /******/ var module = __webpack_module_cache__[moduleId] = {
27
- /******/ // no module.id needed
28
- /******/ // no module.loaded needed
29
- /******/ exports: {}
30
- /******/ };
31
- /******/
32
- /******/ // Execute the module function
33
- /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
34
- /******/
35
- /******/ // Return the exports of the module
36
- /******/ return module.exports;
37
- /******/ }
38
- /******/
39
- /************************************************************************/
40
- /******/ /* webpack/runtime/define property getters */
41
- /******/ !function() {
42
- /******/ // define getter/value functions for harmony exports
43
- /******/ __webpack_require__.d = function(exports, definition) {
44
- /******/ if(Array.isArray(definition)) {
45
- /******/ var i = 0;
46
- /******/ while(i < definition.length) {
47
- /******/ var key = definition[i++];
48
- /******/ var binding = definition[i++];
49
- /******/ if(!__webpack_require__.o(exports, key)) {
50
- /******/ if(binding === 0) {
51
- /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
52
- /******/ } else {
53
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
54
- /******/ }
55
- /******/ } else if(binding === 0) { i++; }
56
- /******/ }
57
- /******/ } else {
58
- /******/ for(var key in definition) {
59
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
60
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
61
- /******/ }
62
- /******/ }
63
- /******/ }
64
- /******/ };
65
- /******/ }();
66
- /******/
67
- /******/ /* webpack/runtime/hasOwnProperty shorthand */
68
- /******/ !function() {
69
- /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
70
- /******/ }();
71
- /******/
72
- /************************************************************************/
73
- var __webpack_exports__ = {};
74
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
75
- /* harmony export */ D_: function() { return /* binding */ identity; },
76
- /* harmony export */ Gj: function() { return /* binding */ _getParameterNames; },
77
- /* harmony export */ gH: function() { return /* binding */ invertArrayFilter; }
78
- /* harmony export */ });
79
- /* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
80
1
  // #!/usr/bin/env babel-node
81
2
  // -*- coding: utf-8 -*-
82
- /** @module function *//* !
3
+ /** @module function */
4
+ 'use strict';
5
+
6
+ /* !
83
7
  region header
84
8
  [Project page](https://torben.website/clientnode)
85
9
 
@@ -92,23 +16,60 @@ var __webpack_exports__ = {};
92
16
  naming 3.0 unported license.
93
17
  See https://creativecommons.org/licenses/by/3.0/deed.de
94
18
  endregion
95
- */function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},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 o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}/**
19
+ */
20
+ import "core-js/modules/es.array.includes.js";
21
+ import "core-js/modules/es.array.push.js";
22
+ /**
96
23
  * Determines all parameter names from given callable (function or class,
97
24
  * ...).
98
25
  * @param callable - Function or function code to inspect.
99
26
  * @returns List of parameter names.
100
- */var _getParameterNames=function getParameterNames(callable){var functionCode=(typeof callable==="string"?callable:// Strip comments.
101
- callable.toString()).replace(/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,"");if(functionCode.startsWith("class"))return _getParameterNames("function "+functionCode.replace(/.*(constructor\([^)]+\))/m,"$1"));// Try classic function declaration.
102
- var parameter=/^function\s*[^(]*\(\s*([^)]*)\)/m.exec(functionCode);if(parameter===null)// Try arrow function declaration.
103
- parameter=/^[^(]*\(\s*([^)]*)\) *=>.*/m.exec(functionCode);if(parameter===null)// Try one argument and without brackets arrow function declaration.
104
- parameter=/([^= ]+) *=>.*/m.exec(functionCode);var names=[];if(parameter&&parameter.length>1&&parameter[1].trim().length){var _iterator=_createForOfIteratorHelper(parameter[1].split(",")),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;)// Remove default parameter values.
105
- {var name=_step.value;names.push(name.replace(/=.+$/g,"").trim())}}catch(err){_iterator.e(err)}finally{_iterator.f()}return names}return names};/**
27
+ */
28
+ export const getParameterNames = callable => {
29
+ const functionCode = (typeof callable === 'string' ? callable :
30
+ // Strip comments.
31
+ callable.toString()).replace(/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg, '');
32
+ if (functionCode.startsWith('class')) return getParameterNames('function ' + functionCode.replace(/.*(constructor\([^)]+\))/m, '$1'));
33
+
34
+ // Try classic function declaration.
35
+ let parameter = /^function\s*[^(]*\(\s*([^)]*)\)/m.exec(functionCode);
36
+ if (parameter === null)
37
+ // Try arrow function declaration.
38
+ parameter = /^[^(]*\(\s*([^)]*)\) *=>.*/m.exec(functionCode);
39
+ if (parameter === null)
40
+ // Try one argument and without brackets arrow function declaration.
41
+ parameter = /([^= ]+) *=>.*/m.exec(functionCode);
42
+ const names = [];
43
+ if (parameter && parameter.length > 1 && parameter[1].trim().length) {
44
+ for (const name of parameter[1].split(','))
45
+ // Remove default parameter values.
46
+ names.push(name.replace(/=.+$/g, '').trim());
47
+ return names;
48
+ }
49
+ return names;
50
+ };
51
+ /**
106
52
  * Implements the identity function.
107
53
  * @param value - A value to return.
108
54
  * @returns Returns the given value.
109
- */var identity=function identity(value){return value};/**
55
+ */
56
+ export const identity = value => value;
57
+ /**
110
58
  * Inverted filter helper to inverse each given filter.
111
59
  * @param filter - A function that filters an array.
112
60
  * @returns The inverted filter.
113
- */var invertArrayFilter=function invertArrayFilter(filter){return function(data){if(Array.isArray(data)){for(var _len=arguments.length,additionalParameter=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){additionalParameter[_key-1]=arguments[_key]}var filteredData=filter.apply(void 0,[data].concat(additionalParameter));var result=[];if(filteredData.length){var _iterator2=_createForOfIteratorHelper(data),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var date=_step2.value;if(!filteredData.includes(date))result.push(date)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else result=data;return result}return data}};
114
- export { _getParameterNames as getParameterNames, identity, invertArrayFilter };
61
+ */
62
+ export const invertArrayFilter = filter => {
63
+ return (data, ...additionalParameter) => {
64
+ if (Array.isArray(data)) {
65
+ const filteredData = filter(data, ...additionalParameter);
66
+ let result = [];
67
+ if (filteredData.length) {
68
+ for (const date of data) if (!filteredData.includes(date)) result.push(date);
69
+ } else result = data;
70
+ return result;
71
+ }
72
+ return data;
73
+ };
74
+ };
75
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2Z1bmN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICMhL3Vzci9iaW4vZW52IGJhYmVsLW5vZGVcbi8vIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuLyoqIEBtb2R1bGUgZnVuY3Rpb24gKi9cbid1c2Ugc3RyaWN0J1xuLyogIVxuICAgIHJlZ2lvbiBoZWFkZXJcbiAgICBbUHJvamVjdCBwYWdlXShodHRwczovL3RvcmJlbi53ZWJzaXRlL2NsaWVudG5vZGUpXG5cbiAgICBDb3B5cmlnaHQgVG9yYmVuIFNpY2tlcnQgKGluZm9bXCJ+YXR+XCJddG9yYmVuLndlYnNpdGUpIDE2LjEyLjIwMTJcblxuICAgIExpY2Vuc2VcbiAgICAtLS0tLS0tXG5cbiAgICBUaGlzIGxpYnJhcnkgd3JpdHRlbiBieSBUb3JiZW4gU2lja2VydCBzdGFuZHMgdW5kZXIgYSBjcmVhdGl2ZSBjb21tb25zXG4gICAgbmFtaW5nIDMuMCB1bnBvcnRlZCBsaWNlbnNlLlxuICAgIFNlZSBodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wL2RlZWQuZGVcbiAgICBlbmRyZWdpb25cbiovXG5pbXBvcnQgdHlwZSB7QW55RnVuY3Rpb24sIEFycmF5VHJhbnNmb3JtZXJ9IGZyb20gJy4vdHlwZSdcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGFsbCBwYXJhbWV0ZXIgbmFtZXMgZnJvbSBnaXZlbiBjYWxsYWJsZSAoZnVuY3Rpb24gb3IgY2xhc3MsXG4gKiAuLi4pLlxuICogQHBhcmFtIGNhbGxhYmxlIC0gRnVuY3Rpb24gb3IgZnVuY3Rpb24gY29kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgTGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQYXJhbWV0ZXJOYW1lcyA9IChcbiAgICBjYWxsYWJsZTogQW55RnVuY3Rpb24gfCBzdHJpbmdcbik6IEFycmF5PHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uQ29kZTogc3RyaW5nID0gKFxuICAgICAgICAodHlwZW9mIGNhbGxhYmxlID09PSAnc3RyaW5nJykgP1xuICAgICAgICAgICAgY2FsbGFibGUgOlxuICAgICAgICAgICAgLy8gU3RyaXAgY29tbWVudHMuXG4gICAgICAgICAgICBjYWxsYWJsZS50b1N0cmluZygpXG4gICAgKS5yZXBsYWNlKC8oKFxcL1xcLy4qJCl8KFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKS9tZywgJycpXG5cbiAgICBpZiAoZnVuY3Rpb25Db2RlLnN0YXJ0c1dpdGgoJ2NsYXNzJykpXG4gICAgICAgIHJldHVybiBnZXRQYXJhbWV0ZXJOYW1lcyhcbiAgICAgICAgICAgICdmdW5jdGlvbiAnICtcbiAgICAgICAgICAgIGZ1bmN0aW9uQ29kZS5yZXBsYWNlKC8uKihjb25zdHJ1Y3RvclxcKFteKV0rXFwpKS9tLCAnJDEnKVxuICAgICAgICApXG5cbiAgICAvLyBUcnkgY2xhc3NpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyOiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9XG4gICAgICAgIC9eZnVuY3Rpb25cXHMqW14oXSpcXChcXHMqKFteKV0qKVxcKS9tLmV4ZWMoZnVuY3Rpb25Db2RlKVxuICAgIGlmIChwYXJhbWV0ZXIgPT09IG51bGwpXG4gICAgICAgIC8vIFRyeSBhcnJvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICAgICAgcGFyYW1ldGVyID0gL15bXihdKlxcKFxccyooW14pXSopXFwpICo9Pi4qL20uZXhlYyhmdW5jdGlvbkNvZGUpXG4gICAgaWYgKHBhcmFtZXRlciA9PT0gbnVsbClcbiAgICAgICAgLy8gVHJ5IG9uZSBhcmd1bWVudCBhbmQgd2l0aG91dCBicmFja2V0cyBhcnJvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICAgICAgcGFyYW1ldGVyID0gLyhbXj0gXSspICo9Pi4qL20uZXhlYyhmdW5jdGlvbkNvZGUpXG5cbiAgICBjb25zdCBuYW1lczogQXJyYXk8c3RyaW5nPiA9IFtdXG4gICAgaWYgKHBhcmFtZXRlciAmJiBwYXJhbWV0ZXIubGVuZ3RoID4gMSAmJiBwYXJhbWV0ZXJbMV0udHJpbSgpLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcGFyYW1ldGVyWzFdLnNwbGl0KCcsJykpXG4gICAgICAgICAgICAvLyBSZW1vdmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLlxuICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lLnJlcGxhY2UoLz0uKyQvZywgJycpLnRyaW0oKSlcbiAgICAgICAgcmV0dXJuIG5hbWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVzXG59XG4vKipcbiAqIEltcGxlbWVudHMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlkZW50aXR5ID0gPFQ+KHZhbHVlOiBUKTogVCA9PiB2YWx1ZVxuLyoqXG4gKiBJbnZlcnRlZCBmaWx0ZXIgaGVscGVyIHRvIGludmVyc2UgZWFjaCBnaXZlbiBmaWx0ZXIuXG4gKiBAcGFyYW0gZmlsdGVyIC0gQSBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgYW4gYXJyYXkuXG4gKiBAcmV0dXJucyBUaGUgaW52ZXJ0ZWQgZmlsdGVyLlxuICovXG5leHBvcnQgY29uc3QgaW52ZXJ0QXJyYXlGaWx0ZXIgPSA8VCwgRCA9IEFycmF5PHVua25vd24+PihmaWx0ZXI6IFQpOiBUID0+IHtcbiAgICByZXR1cm4gKChkYXRhOiBELCAuLi5hZGRpdGlvbmFsUGFyYW1ldGVyOiBBcnJheTx1bmtub3duPik6IEQgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhOiBBcnJheTx1bmtub3duPiA9IChcbiAgICAgICAgICAgICAgICBmaWx0ZXIgYXMgdW5rbm93biBhcyBBcnJheVRyYW5zZm9ybWVyXG4gICAgICAgICAgICApKGRhdGEsIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXIpXG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXSBhcyBEXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiBkYXRhKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcmVkRGF0YS5pbmNsdWRlcyhkYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgYXMgQXJyYXk8dW5rbm93bj4pLnB1c2goZGF0ZSlcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KSBhcyB1bmtub3duIGFzIFRcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFBQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0saUJBQWlCLEdBQzFCLFFBQThCLElBQ2Q7RUFDaEIsTUFBTSxZQUFvQixHQUFHLENBQ3hCLE9BQU8sUUFBUSxLQUFLLFFBQVEsR0FDekIsUUFBUTtFQUNSO0VBQ0EsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ3pCLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLENBQUM7RUFFakQsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUNoQyxPQUFPLGlCQUFpQixDQUNwQixXQUFXLEdBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQzFELENBQUM7O0VBRUw7RUFDQSxJQUFJLFNBQStCLEdBQy9CLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7RUFDekQsSUFBSSxTQUFTLEtBQUssSUFBSTtJQUNsQjtJQUNBLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0VBQ2hFLElBQUksU0FBUyxLQUFLLElBQUk7SUFDbEI7SUFDQSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztFQUVwRCxNQUFNLEtBQW9CLEdBQUcsRUFBRTtFQUMvQixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakUsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN0QztJQUNBLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUs7RUFDaEI7RUFFQSxPQUFPLEtBQUs7QUFDaEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sUUFBUSxHQUFPLEtBQVEsSUFBUSxLQUFLO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0saUJBQWlCLEdBQTJCLE1BQVMsSUFBUTtFQUN0RSxPQUFRLENBQUMsSUFBTyxFQUFFLEdBQUcsbUJBQW1DLEtBQVE7SUFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO01BQ3JCLE1BQU0sWUFBNEIsR0FDOUIsTUFBTSxDQUNSLElBQUksRUFBRSxHQUFHLG1CQUFtQixDQUFDO01BRS9CLElBQUksTUFBTSxHQUFHLEVBQU87TUFDcEIsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDM0IsTUFBTSxDQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2pELENBQUMsTUFDRyxNQUFNLEdBQUcsSUFBSTtNQUVqQixPQUFPLE1BQU07SUFDakI7SUFFQSxPQUFPLElBQUk7RUFDZixDQUFDO0FBQ0wsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==