@dashkite/joy 0.3.16 → 0.5.0
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/build/browser/src/array.js +121 -121
- package/build/browser/src/function.js +332 -418
- package/build/browser/src/generic.js +103 -167
- package/build/browser/src/index.js +16 -13
- package/build/browser/src/iterable.js +353 -328
- package/build/browser/src/math.js +42 -39
- package/build/browser/src/metaclass.js +105 -72
- package/build/browser/src/object.js +154 -98
- package/build/browser/src/predicate.js +122 -164
- package/build/browser/src/promise.js +17 -22
- package/build/browser/src/set.js +53 -68
- package/build/browser/src/text.js +115 -124
- package/build/browser/src/time.js +99 -30
- package/build/browser/src/type.js +85 -70
- package/build/browser/src/value.js +233 -246
- package/build/node/src/array.js +283 -161
- package/build/node/src/function.js +439 -394
- package/build/node/src/generic.js +122 -151
- package/build/node/src/index.js +32 -174
- package/build/node/src/iterable.js +444 -383
- package/build/node/src/math.js +106 -66
- package/build/node/src/metaclass.js +144 -88
- package/build/node/src/object.js +215 -110
- package/build/node/src/predicate.js +150 -156
- package/build/node/src/promise.js +48 -33
- package/build/node/src/set.js +81 -80
- package/build/node/src/text.js +256 -174
- package/build/node/src/time.js +136 -40
- package/build/node/src/type.js +277 -141
- package/build/node/src/value.js +273 -267
- package/package.json +12 -6
package/build/node/src/time.js
CHANGED
|
@@ -1,48 +1,144 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
benchmark: function() {
|
|
13
|
+
return benchmark;
|
|
14
|
+
},
|
|
15
|
+
debounce: function() {
|
|
16
|
+
return debounce;
|
|
17
|
+
},
|
|
18
|
+
default: function() {
|
|
19
|
+
return _default //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL0BkYXNoa2l0ZS9qb3kvc3JjL3RpbWUuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUEsU0FBQSxFQUFBLFFBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsRUFBQSxZQUFBLEVBQUEsS0FBQSxFQUFBOztBQUFBLE9BQUE7RUFBUSxLQUFSO0NBQUEsTUFBQTs7QUFFQSxLQUFBLEdBQVEsS0FBQSxDQUFNLFFBQUEsQ0FBQyxRQUFELEVBQVcsTUFBWCxDQUFBO0FBQ2QsTUFBQTtFQUFFLEVBQUEsR0FBSyxVQUFBLENBQVcsTUFBWCxFQUFtQixRQUFuQjtTQUNMLFFBQUEsQ0FBQSxDQUFBO1dBQUcsWUFBQSxDQUFjLEVBQWQ7RUFBSDtBQUZZLENBQU47O0FBSVIsS0FBQSxHQUFRLFFBQUEsQ0FBQyxRQUFELENBQUE7U0FDTixJQUFJLE9BQUosQ0FBWSxRQUFBLENBQUMsT0FBRCxDQUFBO1dBQWEsVUFBQSxDQUFXLE9BQVgsRUFBb0IsUUFBcEI7RUFBYixDQUFaO0FBRE07O0FBR1IsWUFBQSxHQUNLLDBEQUFILEdBQ0UsUUFBQSxDQUFBLENBQUE7U0FBRyxXQUFXLENBQUMsR0FBWixDQUFBO0FBQUgsQ0FERixHQUdFLFFBQUEsQ0FBQSxDQUFBO1NBQUcsSUFBSSxDQUFDLEdBQUwsQ0FBQTtBQUFIOztBQUVKLFNBQUEsR0FBWSxNQUFBLFFBQUEsQ0FBRSxJQUFGLENBQUE7U0FDVixDQUFFLENBQUEsTUFBTSxPQUFBLENBQVEsV0FBUixFQUFxQixJQUFyQixDQUFOLENBQUYsQ0FDRSxDQUFDO0FBRk87O0FBSVosT0FBQSxHQUFVLFFBQUEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUFBO1NBQ0wsQ0FBQSxRQUFBLENBQUMsQ0FBRSxNQUFGLEVBQVUsT0FBVixFQUFtQixNQUFuQixDQUFELENBQUE7SUFDRCxXQUFXLENBQUMsSUFBWixDQUFpQixDQUFBLENBQUEsQ0FBSSxJQUFKLENBQUEsTUFBQSxDQUFqQjtJQUNBLE1BQUEsR0FBUyxRQUFBLENBQUEsQ0FBQTtNQUNQLFdBQVcsQ0FBQyxJQUFaLENBQWlCLENBQUEsQ0FBQSxDQUFJLElBQUosQ0FBQSxPQUFBLENBQWpCO01BQ0EsT0FBQSxHQUFVLFdBQVcsQ0FBQyxPQUFaLENBQW9CLENBQUEsQ0FBQSxDQUFJLElBQUosQ0FBQSxDQUFwQixFQUNSLENBQUEsQ0FBQSxDQUFJLElBQUosQ0FBQSxNQUFBLENBRFEsRUFDVyxDQUFBLENBQUEsQ0FBSSxJQUFKLENBQUEsT0FBQSxDQURYO2FBRVY7SUFKTztJQUtULE1BQUEsR0FBUyxJQUFBLENBQUE7SUFDVCxJQUFHLG1CQUFIO2FBQXVCLE1BQU0sQ0FBQyxJQUFQLENBQVksTUFBWixFQUF2QjtLQUFBLE1BQUE7YUFBaUQsTUFBQSxDQUFBLEVBQWpEOztFQVJDLENBQUEsRUFBK0IsQ0FBQTtBQUQxQjs7QUFXVixRQUFBLEdBQWMsQ0FBQSxRQUFBLENBQUUsSUFBRixDQUFBO1NBQ1osUUFBQSxDQUFFLFFBQUYsRUFBWSxDQUFaLENBQUE7V0FBbUIsUUFBQSxDQUFBLENBQUE7QUFDckIsVUFBQTtNQUFJLEdBQUEsR0FBTSxJQUFJLENBQUMsR0FBTCxDQUFBO01BQ04sSUFBRyxDQUFFLEdBQUEsR0FBTSxJQUFSLENBQUEsR0FBaUIsUUFBcEI7UUFDRSxJQUFBLEdBQU87ZUFDSixJQUZMOztJQUZpQjtFQUFuQjtBQURZLENBQUEsRUFBUyxHQTlCdkI7OztBQXdDQSxLQUFBLEdBQVEsUUFBQSxDQUFBLENBQUE7U0FDTixJQUFJLE9BQUosQ0FBWSxRQUFBLENBQUUsT0FBRixDQUFBO1dBQ1YsY0FBQSxDQUFlLE9BQWY7RUFEVSxDQUFaO0FBRE0sRUF4Q1I7Ozs7QUE4Q0EsTUFBQSxHQUFTLFFBQUEsQ0FBQSxDQUFBO0FBQ1QsTUFBQTtFQUFFLElBQUEsR0FBTztTQUNKLENBQUEsUUFBQSxDQUFDLENBQUUsT0FBRixFQUFXLFNBQVgsRUFBc0IsS0FBdEIsRUFBNkIsTUFBN0IsRUFBcUMsSUFBckMsQ0FBRCxDQUFBO0lBRUQsQ0FBRSxPQUFGLEVBQVcsU0FBWCxDQUFBO0FBQXlCLGNBQU8sSUFBSSxDQUFDLE1BQVo7QUFBQSxhQUNsQixDQURrQjtpQkFDWCxDQUFDLENBQUEsQ0FBRCxFQUFLLEdBQUEsSUFBTDtBQURXLGFBRWxCLENBRmtCO2lCQUVYO0FBRlc7VUFHbEIsTUFBTSxJQUFJLEtBQUosQ0FBVSwyQkFBVjtBQUhZOzs7TUFLekIsT0FBTyxDQUFDLFVBQVc7O0lBQ25CLEtBQUEsR0FBUSxJQUFJLENBQUMsR0FBTCxDQUFBO0lBRVIsSUFBQSxHQUFPLFFBQUEsQ0FBQSxDQUFBO2FBQ0wsQ0FBRSxNQUFBLEdBQVMsU0FBQSxDQUFBLENBQVgsQ0FBQSxJQUNFLENBQUMsQ0FBRSxJQUFJLENBQUMsR0FBTCxDQUFBLENBQUEsR0FBYSxLQUFmLENBQUEsR0FBeUIsT0FBTyxDQUFDLE9BQWxDO0lBRkc7SUFJUCxNQUFBLEdBQVM7V0FFVCxJQUFJLE9BQUosQ0FBWSxNQUFBLFFBQUEsQ0FBRSxPQUFGLENBQUE7QUFDVixhQUF1QixDQUFDLElBQUEsQ0FBQSxDQUF4QjtRQUFFLENBQUEsTUFBTSxLQUFBLENBQU0sQ0FBTixDQUFOO01BQUY7YUFDQSxPQUFBLENBQVEsTUFBUjtJQUZVLENBQVo7RUFoQkMsQ0FBQSxFQUErQyxDQUFBO0FBRjNDOztBQXNCVCxPQUFBO0VBQ0UsS0FERjtFQUVFLEtBRkY7RUFHRSxZQUhGO0VBSUUsU0FKRjtFQUtFLE9BTEY7RUFNRSxRQU5GO0VBT0UsS0FQRjtFQVFFLE1BUkY7OztBQVdBLE9BQUEsUUFBZSxDQUNiLEtBRGEsRUFFYixLQUZhLEVBR2IsWUFIYSxFQUliLFNBSmEsRUFLYixPQUxhLEVBTWIsUUFOYSxFQU9iLEtBUGEsRUFRYixNQVJhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjdXJyeX0gZnJvbSBcIi4vZnVuY3Rpb25cIlxuXG50aW1lciA9IGN1cnJ5IChpbnRlcnZhbCwgYWN0aW9uKSAtPlxuICBpZCA9IHNldFRpbWVvdXQoYWN0aW9uLCBpbnRlcnZhbClcbiAgLT4gY2xlYXJUaW1lb3V0KCBpZCApXG5cbnNsZWVwID0gKGludGVydmFsKSAtPlxuICBuZXcgUHJvbWlzZSAocmVzb2x2ZSkgLT4gc2V0VGltZW91dCByZXNvbHZlLCBpbnRlcnZhbFxuXG5taWxsaXNlY29uZHMgPVxuICBpZiBwZXJmb3JtYW5jZT9cbiAgICAtPiBwZXJmb3JtYW5jZS5ub3coKVxuICBlbHNlXG4gICAgLT4gRGF0ZS5ub3coKVxuXG5iZW5jaG1hcmsgPSAoIHRhc2sgKSAtPlxuICAoIGF3YWl0IG1lYXN1cmUgXCJhbm9ueW1vdXNcIiwgdGFzayApXG4gICAgLmR1cmF0aW9uXG5cbm1lYXN1cmUgPSAoIG5hbWUsIHRhc2sgKSAtPlxuICBkbyAoeyBmaW5pc2gsIG1lYXN1cmUsIHJlc3VsdCB9ID0ge30pIC0+XG4gICAgcGVyZm9ybWFuY2UubWFyayBcIiN7IG5hbWUgfS1zdGFydFwiXG4gICAgZmluaXNoID0gLT5cbiAgICAgIHBlcmZvcm1hbmNlLm1hcmsgXCIjeyBuYW1lIH0tZmluaXNoXCJcbiAgICAgIG1lYXN1cmUgPSBwZXJmb3JtYW5jZS5tZWFzdXJlIFwiI3sgbmFtZSB9XCIsIFxuICAgICAgICBcIiN7IG5hbWUgfS1zdGFydFwiLCBcIiN7IG5hbWUgfS1maW5pc2hcIlxuICAgICAgbWVhc3VyZVxuICAgIHJlc3VsdCA9IHRhc2soKVxuICAgIGlmIHJlc3VsdC50aGVuPyB0aGVuICggcmVzdWx0LnRoZW4gZmluaXNoICkgZWxzZSBmaW5pc2goKVxuXG5kZWJvdW5jZSA9IGRvICggbGFzdCA9IDAgKSAtPlxuICAoIGludGVydmFsLCBmICkgLT4gLT5cbiAgICBub3cgPSBEYXRlLm5vdygpXG4gICAgaWYgKCBub3cgLSBsYXN0ICkgPiBpbnRlcnZhbFxuICAgICAgbGFzdCA9IG5vd1xuICAgICAgZG8gZlxuXG5cbiMgZnJvbSBXYXlsYW5kXG5cbmZyYW1lID0gLT5cbiAgbmV3IFByb21pc2UgKCByZXNvbHZlICkgLT5cbiAgICBxdWV1ZU1pY3JvdGFzayByZXNvbHZlXG5cbiMgd2UncmUgZm9yY2VkIHRvIHVzZSBEYXRlLm5vdyBiZWxvd1xuIyBiZWNhdXNlIE5vZGUgZG9lc24ndCBpbmNsdWRlIGl0IGFzIGEgZ2xvYmFsXG5leHBlY3QgPSAtPlxuICBhcmdzID0gYXJndW1lbnRzXG4gIGRvICh7IG9wdGlvbnMsIHByZWRpY2F0ZSwgc3RhcnQsIHJlc3VsdCwgZG9uZSB9ID0ge30pIC0+XG5cbiAgICBbIG9wdGlvbnMsIHByZWRpY2F0ZSBdID0gc3dpdGNoIGFyZ3MubGVuZ3RoXG4gICAgICB3aGVuIDEgdGhlbiBbe30sIGFyZ3MuLi4gXVxuICAgICAgd2hlbiAyIHRoZW4gYXJnc1xuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IgXCJleHBlY3Q6IGludmFsaWQgYXJndW1lbnRzXCJcblxuICAgIG9wdGlvbnMudGltZW91dCA/PSAxMDAwXG4gICAgc3RhcnQgPSBEYXRlLm5vdygpXG5cbiAgICBkb25lID0gLT5cbiAgICAgICggcmVzdWx0ID0gcHJlZGljYXRlKCkpIHx8XG4gICAgICAgICgoIERhdGUubm93KCkgLSBzdGFydCApID4gb3B0aW9ucy50aW1lb3V0IClcblxuICAgIHJlc3VsdCA9IGZhbHNlXG5cbiAgICBuZXcgUHJvbWlzZSAoIHJlc29sdmUgKSAtPlxuICAgICAgKCBhd2FpdCBzbGVlcCAxKSB3aGlsZSAhZG9uZSgpXG4gICAgICByZXNvbHZlIHJlc3VsdFxuXG5leHBvcnQge1xuICBzbGVlcFxuICB0aW1lclxuICBtaWxsaXNlY29uZHNcbiAgYmVuY2htYXJrXG4gIG1lYXN1cmVcbiAgZGVib3VuY2VcbiAgZnJhbWVcbiAgZXhwZWN0XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2xlZXBcbiAgdGltZXJcbiAgbWlsbGlzZWNvbmRzXG4gIGJlbmNobWFya1xuICBtZWFzdXJlXG4gIGRlYm91bmNlXG4gIGZyYW1lXG4gIGV4cGVjdFxufVxuIl19
|
|
20
|
+
//# sourceURL=/@dashkite/joy/src/time.coffee
|
|
21
|
+
;
|
|
22
|
+
},
|
|
23
|
+
expect: function() {
|
|
24
|
+
return expect;
|
|
25
|
+
},
|
|
26
|
+
frame: function() {
|
|
27
|
+
return frame;
|
|
28
|
+
},
|
|
29
|
+
measure: function() {
|
|
30
|
+
return measure;
|
|
31
|
+
},
|
|
32
|
+
milliseconds: function() {
|
|
33
|
+
return milliseconds;
|
|
34
|
+
},
|
|
35
|
+
sleep: function() {
|
|
36
|
+
return sleep;
|
|
37
|
+
},
|
|
38
|
+
timer: function() {
|
|
39
|
+
return timer;
|
|
40
|
+
}
|
|
21
41
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
const _function = require("./function");
|
|
43
|
+
var benchmark, debounce, expect, frame, measure, milliseconds, sleep, timer;
|
|
44
|
+
timer = (0, _function.curry)(function(interval, action) {
|
|
45
|
+
var id;
|
|
46
|
+
id = setTimeout(action, interval);
|
|
47
|
+
return function() {
|
|
48
|
+
return clearTimeout(id);
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
sleep = function(interval) {
|
|
52
|
+
return new Promise(function(resolve) {
|
|
53
|
+
return setTimeout(resolve, interval);
|
|
54
|
+
});
|
|
27
55
|
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return Date.now();
|
|
56
|
+
milliseconds = typeof performance !== "undefined" && performance !== null ? function() {
|
|
57
|
+
return performance.now();
|
|
58
|
+
} : function() {
|
|
59
|
+
return Date.now();
|
|
33
60
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
61
|
+
benchmark = async function(task) {
|
|
62
|
+
return (await measure("anonymous", task)).duration;
|
|
63
|
+
};
|
|
64
|
+
measure = function(name, task) {
|
|
65
|
+
return function({ finish, measure, result }) {
|
|
66
|
+
performance.mark(`${name}-start`);
|
|
67
|
+
finish = function() {
|
|
68
|
+
performance.mark(`${name}-finish`);
|
|
69
|
+
measure = performance.measure(`${name}`, `${name}-start`, `${name}-finish`);
|
|
70
|
+
return measure;
|
|
71
|
+
};
|
|
72
|
+
result = task();
|
|
73
|
+
if (result.then != null) {
|
|
74
|
+
return result.then(finish);
|
|
75
|
+
} else {
|
|
76
|
+
return finish();
|
|
77
|
+
}
|
|
78
|
+
}({});
|
|
79
|
+
};
|
|
80
|
+
debounce = function(last) {
|
|
81
|
+
return function(interval, f) {
|
|
82
|
+
return function() {
|
|
83
|
+
var now;
|
|
84
|
+
now = Date.now();
|
|
85
|
+
if (now - last > interval) {
|
|
86
|
+
last = now;
|
|
87
|
+
return f();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
}(0);
|
|
92
|
+
// from Wayland
|
|
93
|
+
frame = function() {
|
|
94
|
+
return new Promise(function(resolve) {
|
|
95
|
+
return queueMicrotask(resolve);
|
|
42
96
|
});
|
|
43
|
-
} else {
|
|
44
|
-
return milliseconds() - start;
|
|
45
|
-
}
|
|
46
97
|
};
|
|
47
|
-
|
|
48
|
-
|
|
98
|
+
// we're forced to use Date.now below
|
|
99
|
+
// because Node doesn't include it as a global
|
|
100
|
+
expect = function() {
|
|
101
|
+
var args;
|
|
102
|
+
args = arguments;
|
|
103
|
+
return function({ options, predicate, start, result, done }) {
|
|
104
|
+
[options, predicate] = function() {
|
|
105
|
+
switch(args.length){
|
|
106
|
+
case 1:
|
|
107
|
+
return [
|
|
108
|
+
{},
|
|
109
|
+
...args
|
|
110
|
+
];
|
|
111
|
+
case 2:
|
|
112
|
+
return args;
|
|
113
|
+
default:
|
|
114
|
+
throw new Error("expect: invalid arguments");
|
|
115
|
+
}
|
|
116
|
+
}();
|
|
117
|
+
if (options.timeout == null) {
|
|
118
|
+
options.timeout = 1000;
|
|
119
|
+
}
|
|
120
|
+
start = Date.now();
|
|
121
|
+
done = function() {
|
|
122
|
+
return (result = predicate()) || Date.now() - start > options.timeout;
|
|
123
|
+
};
|
|
124
|
+
result = false;
|
|
125
|
+
return new Promise(async function(resolve) {
|
|
126
|
+
while(!done()){
|
|
127
|
+
await sleep(1);
|
|
128
|
+
}
|
|
129
|
+
return resolve(result);
|
|
130
|
+
});
|
|
131
|
+
}({});
|
|
132
|
+
};
|
|
133
|
+
const _default = {
|
|
134
|
+
sleep,
|
|
135
|
+
timer,
|
|
136
|
+
milliseconds,
|
|
137
|
+
benchmark,
|
|
138
|
+
measure,
|
|
139
|
+
debounce,
|
|
140
|
+
frame,
|
|
141
|
+
expect
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyIvQGRhc2hraXRlL2pveS9zcmMvdGltZS5jb2ZmZWUiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3Vycnl9IGZyb20gXCIuL2Z1bmN0aW9uXCJcblxudGltZXIgPSBjdXJyeSAoaW50ZXJ2YWwsIGFjdGlvbikgLT5cbiAgaWQgPSBzZXRUaW1lb3V0KGFjdGlvbiwgaW50ZXJ2YWwpXG4gIC0+IGNsZWFyVGltZW91dCggaWQgKVxuXG5zbGVlcCA9IChpbnRlcnZhbCkgLT5cbiAgbmV3IFByb21pc2UgKHJlc29sdmUpIC0+IHNldFRpbWVvdXQgcmVzb2x2ZSwgaW50ZXJ2YWxcblxubWlsbGlzZWNvbmRzID1cbiAgaWYgcGVyZm9ybWFuY2U/XG4gICAgLT4gcGVyZm9ybWFuY2Uubm93KClcbiAgZWxzZVxuICAgIC0+IERhdGUubm93KClcblxuYmVuY2htYXJrID0gKCB0YXNrICkgLT5cbiAgKCBhd2FpdCBtZWFzdXJlIFwiYW5vbnltb3VzXCIsIHRhc2sgKVxuICAgIC5kdXJhdGlvblxuXG5tZWFzdXJlID0gKCBuYW1lLCB0YXNrICkgLT5cbiAgZG8gKHsgZmluaXNoLCBtZWFzdXJlLCByZXN1bHQgfSA9IHt9KSAtPlxuICAgIHBlcmZvcm1hbmNlLm1hcmsgXCIjeyBuYW1lIH0tc3RhcnRcIlxuICAgIGZpbmlzaCA9IC0+XG4gICAgICBwZXJmb3JtYW5jZS5tYXJrIFwiI3sgbmFtZSB9LWZpbmlzaFwiXG4gICAgICBtZWFzdXJlID0gcGVyZm9ybWFuY2UubWVhc3VyZSBcIiN7IG5hbWUgfVwiLCBcbiAgICAgICAgXCIjeyBuYW1lIH0tc3RhcnRcIiwgXCIjeyBuYW1lIH0tZmluaXNoXCJcbiAgICAgIG1lYXN1cmVcbiAgICByZXN1bHQgPSB0YXNrKClcbiAgICBpZiByZXN1bHQudGhlbj8gdGhlbiAoIHJlc3VsdC50aGVuIGZpbmlzaCApIGVsc2UgZmluaXNoKClcblxuZGVib3VuY2UgPSBkbyAoIGxhc3QgPSAwICkgLT5cbiAgKCBpbnRlcnZhbCwgZiApIC0+IC0+XG4gICAgbm93ID0gRGF0ZS5ub3coKVxuICAgIGlmICggbm93IC0gbGFzdCApID4gaW50ZXJ2YWxcbiAgICAgIGxhc3QgPSBub3dcbiAgICAgIGRvIGZcblxuXG4jIGZyb20gV2F5bGFuZFxuXG5mcmFtZSA9IC0+XG4gIG5ldyBQcm9taXNlICggcmVzb2x2ZSApIC0+XG4gICAgcXVldWVNaWNyb3Rhc2sgcmVzb2x2ZVxuXG4jIHdlJ3JlIGZvcmNlZCB0byB1c2UgRGF0ZS5ub3cgYmVsb3dcbiMgYmVjYXVzZSBOb2RlIGRvZXNuJ3QgaW5jbHVkZSBpdCBhcyBhIGdsb2JhbFxuZXhwZWN0ID0gLT5cbiAgYXJncyA9IGFyZ3VtZW50c1xuICBkbyAoeyBvcHRpb25zLCBwcmVkaWNhdGUsIHN0YXJ0LCByZXN1bHQsIGRvbmUgfSA9IHt9KSAtPlxuXG4gICAgWyBvcHRpb25zLCBwcmVkaWNhdGUgXSA9IHN3aXRjaCBhcmdzLmxlbmd0aFxuICAgICAgd2hlbiAxIHRoZW4gW3t9LCBhcmdzLi4uIF1cbiAgICAgIHdoZW4gMiB0aGVuIGFyZ3NcbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yIFwiZXhwZWN0OiBpbnZhbGlkIGFyZ3VtZW50c1wiXG5cbiAgICBvcHRpb25zLnRpbWVvdXQgPz0gMTAwMFxuICAgIHN0YXJ0ID0gRGF0ZS5ub3coKVxuXG4gICAgZG9uZSA9IC0+XG4gICAgICAoIHJlc3VsdCA9IHByZWRpY2F0ZSgpKSB8fFxuICAgICAgICAoKCBEYXRlLm5vdygpIC0gc3RhcnQgKSA+IG9wdGlvbnMudGltZW91dCApXG5cbiAgICByZXN1bHQgPSBmYWxzZVxuXG4gICAgbmV3IFByb21pc2UgKCByZXNvbHZlICkgLT5cbiAgICAgICggYXdhaXQgc2xlZXAgMSkgd2hpbGUgIWRvbmUoKVxuICAgICAgcmVzb2x2ZSByZXN1bHRcblxuZXhwb3J0IHtcbiAgc2xlZXBcbiAgdGltZXJcbiAgbWlsbGlzZWNvbmRzXG4gIGJlbmNobWFya1xuICBtZWFzdXJlXG4gIGRlYm91bmNlXG4gIGZyYW1lXG4gIGV4cGVjdFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNsZWVwXG4gIHRpbWVyXG4gIG1pbGxpc2Vjb25kc1xuICBiZW5jaG1hcmtcbiAgbWVhc3VyZVxuICBkZWJvdW5jZVxuICBmcmFtZVxuICBleHBlY3Rcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQXdFRSxTQUpGOzs7WUFBQTtlQU1FOztXQUthOzs7OztVQVhmO2VBUUU7O1NBUkY7ZUFPRTs7V0FQRjtlQUtFOztnQkFMRjtlQUdFOztTQUhGO2VBQ0U7O1NBREY7ZUFFRTs7OzBCQXRFRjtBQUFBLElBQUEsU0FBQSxFQUFBLFFBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsRUFBQSxZQUFBLEVBQUEsS0FBQSxFQUFBO0FBRUEsS0FBQSxPQUFRLGVBQUEsRUFBTSxRQUFBLENBQUMsUUFBRCxFQUFXLE1BQVgsQ0FBQTtJQUNkLElBQUE7SUFBRSxFQUFBLEdBQUssVUFBQSxDQUFXLE1BQVgsRUFBbUIsUUFBbkI7V0FDTCxRQUFBLENBQUEsQ0FBQTtlQUFHLFlBQUEsQ0FBYyxFQUFkO0lBQUg7QUFGWSxDQUFOO0FBSVIsS0FBQSxHQUFRLFFBQUEsQ0FBQyxRQUFELENBQUE7V0FDTixJQUFJLE9BQUosQ0FBWSxRQUFBLENBQUMsT0FBRCxDQUFBO2VBQWEsVUFBQSxDQUFXLE9BQVgsRUFBb0IsUUFBcEI7SUFBYixDQUFaO0FBRE07QUFHUixZQUFBLEdBQ0ssT0FBQSxnQkFBQSxlQUFBLGdCQUFBLElBQUgsR0FDRSxRQUFBLENBQUEsQ0FBQTtXQUFHLFdBQVcsQ0FBQyxHQUFaLENBQUE7QUFBSCxDQURGLEdBR0UsUUFBQSxDQUFBLENBQUE7V0FBRyxJQUFJLENBQUMsR0FBTCxDQUFBO0FBQUg7QUFFSixTQUFBLEdBQVksTUFBQSxRQUFBLENBQUUsSUFBRixDQUFBO1dBQ1YsQ0FBRSxNQUFNLE9BQUEsQ0FBUSxXQUFSLEVBQXFCLEtBQXJCLENBQU4sQ0FDQyxBQURILENBQ0UsT0FBQztBQUZPO0FBSVosT0FBQSxHQUFVLFFBQUEsQ0FBRSxJQUFGLEVBQVEsSUFBUixDQUFBO1dBQ0wsUUFBQSxDQUFDLEVBQUUsTUFBRixFQUFVLE9BQVYsRUFBbUIsTUFBbkIsRUFBRCxDQUFBO1FBQ0QsV0FBVyxDQUFDLElBQVosQ0FBaUIsQ0FBQSxDQUFBLENBQUksSUFBSixDQUFBLE1BQUEsQ0FBakI7UUFDQSxNQUFBLEdBQVMsUUFBQSxDQUFBLENBQUE7WUFDUCxXQUFXLENBQUMsSUFBWixDQUFpQixDQUFBLENBQUEsQ0FBSSxJQUFKLENBQUEsT0FBQSxDQUFqQjtZQUNBLE9BQUEsR0FBVSxXQUFXLENBQUMsT0FBWixDQUFvQixDQUFBLENBQUEsQ0FBSSxJQUFKLENBQUEsQ0FBcEIsRUFDUixDQUFBLENBQUEsQ0FBSSxJQUFKLENBQUEsTUFBQSxDQURRLEVBQ1csQ0FBQSxDQUFBLENBQUksSUFBSixDQUFBLE9BQUEsQ0FEWDttQkFFVjtRQUpPO1FBS1QsTUFBQSxHQUFTLElBQUEsQ0FBQTtRQUNULElBQUcsT0FBQSxJQUFBLElBQUEsSUFBSCxFQUFBO21CQUF1QixNQUFNLENBQUMsSUFBUCxDQUFZLE1BQVosRUFBdkI7U0FBQSxNQUFBO21CQUFpRCxNQUFBLENBQUEsRUFBakQ7O0lBUkMsQ0FBQSxDQUErQixDQUFBO0FBRDFCO0FBV1YsUUFBQSxHQUFjLFFBQUEsQ0FBRSxJQUFGLENBQUE7V0FDWixRQUFBLENBQUUsUUFBRixFQUFZLENBQVosQ0FBQTtlQUFtQixRQUFBLENBQUEsQ0FBQTtZQUNyQixJQUFBO1lBQUksR0FBQSxHQUFNLElBQUksQ0FBQyxHQUFMLENBQUE7WUFDTixJQUFHLEFBQUUsR0FBQSxHQUFNLElBQVIsQ0FBQSxFQUFpQixRQUFwQixFQUFBO2dCQUNFLElBQUEsR0FBTzt1QkFDSixJQUZMOztRQUZpQjtJQUFuQjtBQURZLENBQUEsQ0FBUyxHQTlCdkI7O0FBd0NBLEtBQUEsR0FBUSxRQUFBLENBQUEsQ0FBQTtXQUNOLElBQUksT0FBSixDQUFZLFFBQUEsQ0FBRSxPQUFGLENBQUE7ZUFDVixjQUFBLENBQWUsT0FBZjtJQURVLENBQVo7QUFETSxFQXhDUjs7O0FBOENBLE1BQUEsR0FBUyxRQUFBLENBQUEsQ0FBQTtJQUNULElBQUE7SUFBRSxJQUFBLEdBQU87V0FDSixRQUFBLENBQUMsRUFBRSxPQUFGLEVBQVcsU0FBWCxFQUFzQixLQUF0QixFQUE2QixNQUE3QixFQUFxQyxJQUFyQyxFQUFELENBQUE7UUFFRCxDQUFFLE9BQUYsRUFBVyxTQUFYLENBQUEsR0FBQTtZQUF5QixPQUFPLElBQUksQ0FBQyxNQUFaO2dCQUFBLEtBQ2xCLENBRGtCOzJCQUNYO3dCQUFDLENBQUEsQ0FBRCxFQUFLOzJCQUFBLElBQUw7cUJBQUE7Z0JBRFcsS0FFbEIsQ0FGa0I7MkJBRVg7Z0JBRlc7b0JBR2xCLE1BQU0sSUFBSSxLQUFKLENBQVUsMkJBQVY7WUFIWTs7O1lBS3pCLE9BQU8sQ0FBQyxPQUFBLEdBQVc7O1FBQ25CLEtBQUEsR0FBUSxJQUFJLENBQUMsR0FBTCxDQUFBO1FBRVIsSUFBQSxHQUFPLFFBQUEsQ0FBQSxDQUFBO21CQUNMLENBQUUsTUFBQSxHQUFTLFNBQUEsRUFBQSxDQUFYLENBQUEsR0FDRyxBQUFFLENBQUgsR0FBTyxDQUFDLEdBQUwsQ0FBQSxDQUFBLEdBQWEsS0FBZixDQUFBLEVBQXlCLE9BQU8sQ0FBQyxPQUFsQztRQUZHO1FBSVAsTUFBQSxHQUFTO2VBRVQsSUFBSSxPQUFKLENBQVksTUFBQSxRQUFBLENBQUUsT0FBRixDQUFBO1lBQ1YsTUFBdUIsQ0FBQyxJQUFBLENBQUEsQ0FBeEIsQ0FBQTtnQkFBRSxNQUFNLEtBQUEsQ0FBTSxDQUFOLENBQU47WUFBRjttQkFDQSxPQUFBLENBQVEsTUFBUjtRQUZVLENBQVo7SUFoQkMsQ0FBQSxDQUErQyxDQUFBO0FBRjNDO01BaUNULE9BQUEsSUFBZTtJQUNiLEtBRGE7SUFFYixLQUZhO0lBR2IsWUFIYTtJQUliLFNBSmE7SUFLYixPQUxhO0lBTWIsUUFOYTtJQU9iLEtBUGE7SUFRYjtBQVJhIn0=
|