@pie-lib/plot 3.2.0-next.2 → 3.2.0-next.4

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.
@@ -1,296 +0,0 @@
1
- "use strict";
2
-
3
- var _typeof = require("@babel/runtime/helpers/typeof");
4
- var utils = _interopRequireWildcard(require("../utils"));
5
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
6
- var xy = utils.xy;
7
- var tick = function tick(isMajor, v) {
8
- return {
9
- major: isMajor,
10
- value: v,
11
- x: v
12
- };
13
- };
14
- var major = tick.bind(null, true);
15
- var minor = tick.bind(null, false);
16
- describe('utils', function () {
17
- describe('getDelta', function () {
18
- var assertDelta = function assertDelta(from, to, delta) {
19
- it("returns a delta of: ".concat(delta, " for ").concat(from, " -> ").concat(to), function () {
20
- var d = utils.getDelta(from, to);
21
- expect(d.x).toEqual(delta.x);
22
- expect(d.y).toEqual(delta.y);
23
- });
24
- };
25
- assertDelta(xy(0, 0), xy(0, 1), xy(0, 1));
26
- assertDelta(xy(0, 1), xy(0, 0), xy(0, -1));
27
- assertDelta(xy(1, 1), xy(3, 3), xy(2, 2));
28
- assertDelta(xy(-1, -1), xy(3, 3), xy(4, 4));
29
- assertDelta(xy(-1, -1), xy(-2, -5), xy(-1, -4));
30
- });
31
- describe('polygonToArea', function () {
32
- var assertPolygon = function assertPolygon(points, area) {
33
- it("converts ".concat(points, " -> ").concat(area), function () {
34
- var result = utils.polygonToArea(points);
35
- expect(result).toEqual(area);
36
- });
37
- };
38
- assertPolygon([xy(0, 0), xy(1, 1), xy(1, -1)], {
39
- left: 0,
40
- top: 1,
41
- bottom: -1,
42
- right: 1
43
- });
44
- assertPolygon([xy(0, 0), xy(3, 0), xy(2, -1), xy(4, -3), xy(1, -4), xy(2, -2)], {
45
- left: 0,
46
- top: 0,
47
- bottom: -4,
48
- right: 4
49
- });
50
- });
51
- describe('buildTickModel', function () {
52
- var scaleFn;
53
- beforeEach(function () {
54
- scaleFn = jest.fn(function (v) {
55
- return v;
56
- });
57
- });
58
- it('builds major only ticks', function () {
59
- var result = utils.buildTickModel({
60
- min: 0,
61
- max: 2
62
- }, {
63
- minor: 0
64
- }, 1, scaleFn);
65
- expect(result).toEqual([major(0), major(1), major(2)]);
66
- });
67
- it('builds minor + major ticks', function () {
68
- var result = utils.buildTickModel({
69
- min: 0,
70
- max: 2
71
- }, {
72
- minor: 1
73
- }, 0.5, scaleFn);
74
- expect(result).toEqual([major(0), minor(0.5), major(1), minor(1.5), major(2)]);
75
- });
76
- });
77
- describe('snapTo', function () {
78
- var assertSnapTo = function assertSnapTo(min, max, interval, value, expected) {
79
- it("snaps ".concat(value, " to ").concat(expected, " with domain ").concat(min, "<->").concat(max, " with interval: ").concat(interval, " "), function () {
80
- var result = utils.snapTo(min, max, interval, value);
81
- expect(result).toEqual(expected);
82
- });
83
- };
84
- describe('with 0, 10, 0.25', function () {
85
- var a = assertSnapTo.bind(null, 0, 10, 0.25);
86
- a(1, 1);
87
- a(1.2, 1.25);
88
- a(0.2, 0.25);
89
- a(5.2, 5.25);
90
- a(5.125, 5.25);
91
- a(5.124, 5);
92
- });
93
- describe('with 0, 10, 1', function () {
94
- var a = assertSnapTo.bind(null, 0, 10, 1);
95
- a(0, 0);
96
- a(10, 10);
97
- a(100, 10);
98
- a(1, 1);
99
- a(1.2, 1);
100
- a(0.2, 0);
101
- a(5.2, 5);
102
- a(5.001, 5);
103
- });
104
- });
105
- describe('getInterval', function () {
106
- var assertGetInterval = function assertGetInterval(min, max, ticks, expected) {
107
- var paramsDescription = JSON.stringify(ticks);
108
- it("converts: ".concat(paramsDescription, " to ").concat(JSON.stringify(expected)), function () {
109
- var result = utils.getInterval({
110
- min: min,
111
- max: max
112
- }, ticks);
113
- expect(result).toEqual(expected);
114
- });
115
- };
116
- describe('with bad params', function () {
117
- it('throws an error if min > max', function () {
118
- expect(function () {
119
- var result = utils.convertFrequencyToInterval({
120
- min: 11,
121
- max: 10,
122
- tickFrequency: 1,
123
- betweenTickCount: 0
124
- }, {
125
- interval: 10,
126
- major: 10
127
- });
128
- }).toThrow(Error);
129
- });
130
- it('throws an error if min = max', function () {
131
- expect(function () {
132
- var result = utils.convertFrequencyToInterval({
133
- min: 10,
134
- max: 10,
135
- tickFrequency: 1,
136
- betweenTickCount: 0
137
- }, {
138
- interval: 10,
139
- major: 10
140
- });
141
- }).toThrow(Error);
142
- });
143
- });
144
- describe('with domain 0 -> 1', function () {
145
- var a = assertGetInterval.bind(null, 0, 1);
146
- a({
147
- major: 2,
148
- minor: 0
149
- }, 1);
150
- a({
151
- major: 2,
152
- minor: 1
153
- }, 0.5);
154
- });
155
- describe('with domain 0 -> 10', function () {
156
- var a = assertGetInterval.bind(null, 0, 10);
157
- it('throws an error if the tick frequency is less than 2', function () {
158
- expect(function () {
159
- var result = utils.convertFrequencyToInterval({
160
- min: 0,
161
- max: 10,
162
- tickFrequency: 1,
163
- betweenTickCount: 0
164
- }, {
165
- interval: 10,
166
- major: 10
167
- });
168
- }).toThrow(Error);
169
- });
170
- a({
171
- major: 2,
172
- minor: 9
173
- }, 1);
174
- a({
175
- major: 2,
176
- minor: 0
177
- }, 10);
178
- a({
179
- major: 3,
180
- minor: 0
181
- }, 5);
182
- a({
183
- major: 3,
184
- minor: 1
185
- }, 2.5);
186
- a({
187
- major: 4,
188
- minor: 0
189
- }, 3.3333);
190
- a({
191
- major: 5,
192
- minor: 0
193
- }, 2.5);
194
- a({
195
- major: 6,
196
- minor: 0
197
- }, 2);
198
- a({
199
- major: 7,
200
- minor: 0
201
- }, 1.6667);
202
- a({
203
- major: 8,
204
- minor: 0
205
- }, 1.4286);
206
- a({
207
- major: 9,
208
- minor: 0
209
- }, 1.25);
210
- a({
211
- major: 10,
212
- minor: 0
213
- }, 1.1111);
214
- a({
215
- major: 11,
216
- minor: 0
217
- }, 1);
218
- a({
219
- major: 11,
220
- minor: 1
221
- }, 0.5);
222
- a({
223
- major: 11,
224
- minor: 2
225
- }, 0.3333);
226
- });
227
- describe('with domain 0 -> 100', function () {
228
- var a = assertGetInterval.bind(null, 0, 100);
229
- a({
230
- major: 11,
231
- minor: 1
232
- }, 5);
233
- a({
234
- major: 101,
235
- minor: 0
236
- }, 1);
237
- });
238
- describe('with domain -5 - 5', function () {
239
- var a = assertGetInterval.bind(null, -5, 5);
240
- a({
241
- major: 11,
242
- minor: 0
243
- }, 1);
244
- });
245
- describe('with domain 0 - 5', function () {
246
- var a = assertGetInterval.bind(null, 0, 5);
247
- a({
248
- major: 11,
249
- minor: 0
250
- }, 0.5);
251
- a({
252
- major: 11,
253
- minor: 2
254
- }, 0.1667);
255
- a({
256
- major: 11,
257
- minor: 1
258
- }, 0.25);
259
- });
260
- });
261
- describe('findLongestWord', function () {
262
- it('should return 0 if label is undefined', function () {
263
- var label = undefined;
264
- var result = utils.findLongestWord(label);
265
- expect(result).toEqual(0);
266
- });
267
- it('should return 0 if label is null', function () {
268
- var label = null;
269
- var result = utils.findLongestWord(label);
270
- expect(result).toEqual(0);
271
- });
272
- it('should return 6 if the longest word from label has 6 letters', function () {
273
- var label = 'Number of months';
274
- var result = utils.findLongestWord(label);
275
- expect(result).toEqual(6);
276
- });
277
- });
278
- describe('amountToIncreaseWidth', function () {
279
- it('should return 0 if longestWord is undefined', function () {
280
- var longestWord = undefined;
281
- var result = utils.amountToIncreaseWidth(longestWord);
282
- expect(result).toEqual(0);
283
- });
284
- it('should return 0 if longestWord is null', function () {
285
- var longestWord = null;
286
- var result = utils.amountToIncreaseWidth(longestWord);
287
- expect(result).toEqual(0);
288
- });
289
- it('should return 150 if longestWord is 10', function () {
290
- var longestWord = 10;
291
- var result = utils.amountToIncreaseWidth(longestWord);
292
- expect(result).toEqual(200);
293
- });
294
- });
295
- });
296
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlscyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwieHkiLCJ0aWNrIiwiaXNNYWpvciIsInYiLCJtYWpvciIsInZhbHVlIiwieCIsImJpbmQiLCJtaW5vciIsImRlc2NyaWJlIiwiYXNzZXJ0RGVsdGEiLCJmcm9tIiwidG8iLCJkZWx0YSIsIml0IiwiY29uY2F0IiwiZCIsImdldERlbHRhIiwiZXhwZWN0IiwidG9FcXVhbCIsInkiLCJhc3NlcnRQb2x5Z29uIiwicG9pbnRzIiwiYXJlYSIsInJlc3VsdCIsInBvbHlnb25Ub0FyZWEiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJzY2FsZUZuIiwiYmVmb3JlRWFjaCIsImplc3QiLCJmbiIsImJ1aWxkVGlja01vZGVsIiwibWluIiwibWF4IiwiYXNzZXJ0U25hcFRvIiwiaW50ZXJ2YWwiLCJleHBlY3RlZCIsInNuYXBUbyIsImEiLCJhc3NlcnRHZXRJbnRlcnZhbCIsInRpY2tzIiwicGFyYW1zRGVzY3JpcHRpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0SW50ZXJ2YWwiLCJjb252ZXJ0RnJlcXVlbmN5VG9JbnRlcnZhbCIsInRpY2tGcmVxdWVuY3kiLCJiZXR3ZWVuVGlja0NvdW50IiwidG9UaHJvdyIsIkVycm9yIiwibGFiZWwiLCJ1bmRlZmluZWQiLCJmaW5kTG9uZ2VzdFdvcmQiLCJsb25nZXN0V29yZCIsImFtb3VudFRvSW5jcmVhc2VXaWR0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IHh5ID0gdXRpbHMueHk7XG5cbmNvbnN0IHRpY2sgPSAoaXNNYWpvciwgdikgPT4gKHtcbiAgbWFqb3I6IGlzTWFqb3IsXG4gIHZhbHVlOiB2LFxuICB4OiB2LFxufSk7XG5cbmNvbnN0IG1ham9yID0gdGljay5iaW5kKG51bGwsIHRydWUpO1xuY29uc3QgbWlub3IgPSB0aWNrLmJpbmQobnVsbCwgZmFsc2UpO1xuXG5kZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdnZXREZWx0YScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnREZWx0YSA9IChmcm9tLCB0bywgZGVsdGEpID0+IHtcbiAgICAgIGl0KGByZXR1cm5zIGEgZGVsdGEgb2Y6ICR7ZGVsdGF9IGZvciAke2Zyb219IC0+ICR7dG99YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBkID0gdXRpbHMuZ2V0RGVsdGEoZnJvbSwgdG8pO1xuICAgICAgICBleHBlY3QoZC54KS50b0VxdWFsKGRlbHRhLngpO1xuICAgICAgICBleHBlY3QoZC55KS50b0VxdWFsKGRlbHRhLnkpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3NlcnREZWx0YSh4eSgwLCAwKSwgeHkoMCwgMSksIHh5KDAsIDEpKTtcbiAgICBhc3NlcnREZWx0YSh4eSgwLCAxKSwgeHkoMCwgMCksIHh5KDAsIC0xKSk7XG4gICAgYXNzZXJ0RGVsdGEoeHkoMSwgMSksIHh5KDMsIDMpLCB4eSgyLCAyKSk7XG4gICAgYXNzZXJ0RGVsdGEoeHkoLTEsIC0xKSwgeHkoMywgMyksIHh5KDQsIDQpKTtcbiAgICBhc3NlcnREZWx0YSh4eSgtMSwgLTEpLCB4eSgtMiwgLTUpLCB4eSgtMSwgLTQpKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3BvbHlnb25Ub0FyZWEnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0UG9seWdvbiA9IChwb2ludHMsIGFyZWEpID0+IHtcbiAgICAgIGl0KGBjb252ZXJ0cyAke3BvaW50c30gLT4gJHthcmVhfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMucG9seWdvblRvQXJlYShwb2ludHMpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGFyZWEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3NlcnRQb2x5Z29uKFt4eSgwLCAwKSwgeHkoMSwgMSksIHh5KDEsIC0xKV0sIHtcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDEsXG4gICAgICBib3R0b206IC0xLFxuICAgICAgcmlnaHQ6IDEsXG4gICAgfSk7XG4gICAgYXNzZXJ0UG9seWdvbihbeHkoMCwgMCksIHh5KDMsIDApLCB4eSgyLCAtMSksIHh5KDQsIC0zKSwgeHkoMSwgLTQpLCB4eSgyLCAtMildLCB7XG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgYm90dG9tOiAtNCxcbiAgICAgIHJpZ2h0OiA0LFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRUaWNrTW9kZWwnLCAoKSA9PiB7XG4gICAgbGV0IHNjYWxlRm47XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHNjYWxlRm4gPSBqZXN0LmZuKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIG1ham9yIG9ubHkgdGlja3MnLCAoKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gdXRpbHMuYnVpbGRUaWNrTW9kZWwoeyBtaW46IDAsIG1heDogMiB9LCB7IG1pbm9yOiAwIH0sIDEsIHNjYWxlRm4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbWFqb3IoMCksIG1ham9yKDEpLCBtYWpvcigyKV0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBtaW5vciArIG1ham9yIHRpY2tzJywgKCkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHV0aWxzLmJ1aWxkVGlja01vZGVsKHsgbWluOiAwLCBtYXg6IDIgfSwgeyBtaW5vcjogMSB9LCAwLjUsIHNjYWxlRm4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbWFqb3IoMCksIG1pbm9yKDAuNSksIG1ham9yKDEpLCBtaW5vcigxLjUpLCBtYWpvcigyKV0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc25hcFRvJywgKCkgPT4ge1xuICAgIGxldCBhc3NlcnRTbmFwVG8gPSAobWluLCBtYXgsIGludGVydmFsLCB2YWx1ZSwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGBzbmFwcyAke3ZhbHVlfSB0byAke2V4cGVjdGVkfSB3aXRoIGRvbWFpbiAke21pbn08LT4ke21heH0gd2l0aCBpbnRlcnZhbDogJHtpbnRlcnZhbH0gYCwgKCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdXRpbHMuc25hcFRvKG1pbiwgbWF4LCBpbnRlcnZhbCwgdmFsdWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZXNjcmliZSgnd2l0aCAwLCAxMCwgMC4yNScsICgpID0+IHtcbiAgICAgIGxldCBhID0gYXNzZXJ0U25hcFRvLmJpbmQobnVsbCwgMCwgMTAsIDAuMjUpO1xuICAgICAgYSgxLCAxKTtcbiAgICAgIGEoMS4yLCAxLjI1KTtcbiAgICAgIGEoMC4yLCAwLjI1KTtcbiAgICAgIGEoNS4yLCA1LjI1KTtcbiAgICAgIGEoNS4xMjUsIDUuMjUpO1xuICAgICAgYSg1LjEyNCwgNSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCAwLCAxMCwgMScsICgpID0+IHtcbiAgICAgIGxldCBhID0gYXNzZXJ0U25hcFRvLmJpbmQobnVsbCwgMCwgMTAsIDEpO1xuICAgICAgYSgwLCAwKTtcbiAgICAgIGEoMTAsIDEwKTtcbiAgICAgIGEoMTAwLCAxMCk7XG4gICAgICBhKDEsIDEpO1xuICAgICAgYSgxLjIsIDEpO1xuICAgICAgYSgwLjIsIDApO1xuICAgICAgYSg1LjIsIDUpO1xuICAgICAgYSg1LjAwMSwgNSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRJbnRlcnZhbCcsICgpID0+IHtcbiAgICBsZXQgYXNzZXJ0R2V0SW50ZXJ2YWwgPSAobWluLCBtYXgsIHRpY2tzLCBleHBlY3RlZCkgPT4ge1xuICAgICAgbGV0IHBhcmFtc0Rlc2NyaXB0aW9uID0gSlNPTi5zdHJpbmdpZnkodGlja3MpO1xuICAgICAgaXQoYGNvbnZlcnRzOiAke3BhcmFtc0Rlc2NyaXB0aW9ufSB0byAke0pTT04uc3RyaW5naWZ5KGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSB1dGlscy5nZXRJbnRlcnZhbCh7IG1pbjogbWluLCBtYXg6IG1heCB9LCB0aWNrcyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIGJhZCBwYXJhbXMnLCAoKSA9PiB7XG4gICAgICBpdCgndGhyb3dzIGFuIGVycm9yIGlmIG1pbiA+IG1heCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gdXRpbHMuY29udmVydEZyZXF1ZW5jeVRvSW50ZXJ2YWwoXG4gICAgICAgICAgICB7IG1pbjogMTEsIG1heDogMTAsIHRpY2tGcmVxdWVuY3k6IDEsIGJldHdlZW5UaWNrQ291bnQ6IDAgfSxcbiAgICAgICAgICAgIHsgaW50ZXJ2YWw6IDEwLCBtYWpvcjogMTAgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KS50b1Rocm93KEVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndGhyb3dzIGFuIGVycm9yIGlmIG1pbiA9IG1heCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gdXRpbHMuY29udmVydEZyZXF1ZW5jeVRvSW50ZXJ2YWwoXG4gICAgICAgICAgICB7IG1pbjogMTAsIG1heDogMTAsIHRpY2tGcmVxdWVuY3k6IDEsIGJldHdlZW5UaWNrQ291bnQ6IDAgfSxcbiAgICAgICAgICAgIHsgaW50ZXJ2YWw6IDEwLCBtYWpvcjogMTAgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KS50b1Rocm93KEVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggZG9tYWluIDAgLT4gMScsICgpID0+IHtcbiAgICAgIGxldCBhID0gYXNzZXJ0R2V0SW50ZXJ2YWwuYmluZChudWxsLCAwLCAxKTtcbiAgICAgIGEoeyBtYWpvcjogMiwgbWlub3I6IDAgfSwgMSk7XG4gICAgICBhKHsgbWFqb3I6IDIsIG1pbm9yOiAxIH0sIDAuNSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBkb21haW4gMCAtPiAxMCcsICgpID0+IHtcbiAgICAgIGxldCBhID0gYXNzZXJ0R2V0SW50ZXJ2YWwuYmluZChudWxsLCAwLCAxMCk7XG5cbiAgICAgIGl0KCd0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHRpY2sgZnJlcXVlbmN5IGlzIGxlc3MgdGhhbiAyJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgIGxldCByZXN1bHQgPSB1dGlscy5jb252ZXJ0RnJlcXVlbmN5VG9JbnRlcnZhbChcbiAgICAgICAgICAgIHsgbWluOiAwLCBtYXg6IDEwLCB0aWNrRnJlcXVlbmN5OiAxLCBiZXR3ZWVuVGlja0NvdW50OiAwIH0sXG4gICAgICAgICAgICB7IGludGVydmFsOiAxMCwgbWFqb3I6IDEwIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkudG9UaHJvdyhFcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgYSh7IG1ham9yOiAyLCBtaW5vcjogOSB9LCAxKTtcbiAgICAgIGEoeyBtYWpvcjogMiwgbWlub3I6IDAgfSwgMTApO1xuICAgICAgYSh7IG1ham9yOiAzLCBtaW5vcjogMCB9LCA1KTtcbiAgICAgIGEoeyBtYWpvcjogMywgbWlub3I6IDEgfSwgMi41KTtcbiAgICAgIGEoeyBtYWpvcjogNCwgbWlub3I6IDAgfSwgMy4zMzMzKTtcbiAgICAgIGEoeyBtYWpvcjogNSwgbWlub3I6IDAgfSwgMi41KTtcbiAgICAgIGEoeyBtYWpvcjogNiwgbWlub3I6IDAgfSwgMik7XG4gICAgICBhKHsgbWFqb3I6IDcsIG1pbm9yOiAwIH0sIDEuNjY2Nyk7XG4gICAgICBhKHsgbWFqb3I6IDgsIG1pbm9yOiAwIH0sIDEuNDI4Nik7XG4gICAgICBhKHsgbWFqb3I6IDksIG1pbm9yOiAwIH0sIDEuMjUpO1xuICAgICAgYSh7IG1ham9yOiAxMCwgbWlub3I6IDAgfSwgMS4xMTExKTtcbiAgICAgIGEoeyBtYWpvcjogMTEsIG1pbm9yOiAwIH0sIDEpO1xuICAgICAgYSh7IG1ham9yOiAxMSwgbWlub3I6IDEgfSwgMC41KTtcbiAgICAgIGEoeyBtYWpvcjogMTEsIG1pbm9yOiAyIH0sIDAuMzMzMyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBkb21haW4gMCAtPiAxMDAnLCAoKSA9PiB7XG4gICAgICBsZXQgYSA9IGFzc2VydEdldEludGVydmFsLmJpbmQobnVsbCwgMCwgMTAwKTtcbiAgICAgIGEoeyBtYWpvcjogMTEsIG1pbm9yOiAxIH0sIDUpO1xuICAgICAgYSh7IG1ham9yOiAxMDEsIG1pbm9yOiAwIH0sIDEpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggZG9tYWluIC01IC0gNScsICgpID0+IHtcbiAgICAgIGxldCBhID0gYXNzZXJ0R2V0SW50ZXJ2YWwuYmluZChudWxsLCAtNSwgNSk7XG4gICAgICBhKHsgbWFqb3I6IDExLCBtaW5vcjogMCB9LCAxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIGRvbWFpbiAwIC0gNScsICgpID0+IHtcbiAgICAgIGxldCBhID0gYXNzZXJ0R2V0SW50ZXJ2YWwuYmluZChudWxsLCAwLCA1KTtcbiAgICAgIGEoeyBtYWpvcjogMTEsIG1pbm9yOiAwIH0sIDAuNSk7XG4gICAgICBhKHsgbWFqb3I6IDExLCBtaW5vcjogMiB9LCAwLjE2NjcpO1xuICAgICAgYSh7IG1ham9yOiAxMSwgbWlub3I6IDEgfSwgMC4yNSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmaW5kTG9uZ2VzdFdvcmQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBpZiBsYWJlbCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmZpbmRMb25nZXN0V29yZChsYWJlbCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGlmIGxhYmVsIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5maW5kTG9uZ2VzdFdvcmQobGFiZWwpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gNiBpZiB0aGUgbG9uZ2VzdCB3b3JkIGZyb20gbGFiZWwgaGFzIDYgbGV0dGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gJ051bWJlciBvZiBtb250aHMnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZmluZExvbmdlc3RXb3JkKGxhYmVsKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCg2KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Ftb3VudFRvSW5jcmVhc2VXaWR0aCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGlmIGxvbmdlc3RXb3JkIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvbmdlc3RXb3JkID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuYW1vdW50VG9JbmNyZWFzZVdpZHRoKGxvbmdlc3RXb3JkKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIDAgaWYgbG9uZ2VzdFdvcmQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGxvbmdlc3RXb3JkID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmFtb3VudFRvSW5jcmVhc2VXaWR0aChsb25nZXN0V29yZCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiAxNTAgaWYgbG9uZ2VzdFdvcmQgaXMgMTAnLCAoKSA9PiB7XG4gICAgICBjb25zdCBsb25nZXN0V29yZCA9IDEwO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuYW1vdW50VG9JbmNyZWFzZVdpZHRoKGxvbmdlc3RXb3JkKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgyMDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFBa0MsU0FBQUQsd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFKLHVCQUFBLFlBQUFBLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFB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LEdBQUcsQ0FBQztNQUM5QmlDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLENBQUM7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztNQUNqQ2lDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLENBQUM7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztNQUM5QmlDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLENBQUM7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM1QmlDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLENBQUM7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztNQUNqQ2lDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLENBQUM7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztNQUNqQ2lDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLENBQUM7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztNQUMvQmlDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLEVBQUU7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztNQUNsQ2lDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLEVBQUU7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM3QmlDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLEVBQUU7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztNQUMvQmlDLENBQUMsQ0FBQztRQUFFckMsS0FBSyxFQUFFLEVBQUU7UUFBRUksS0FBSyxFQUFFO01BQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwQyxDQUFDLENBQUM7SUFFRkMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLFlBQU07TUFDckMsSUFBSWdDLENBQUMsR0FBR0MsaUJBQWlCLENBQUNuQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7TUFDNUNrQyxDQUFDLENBQUM7UUFBRXJDLEtBQUssRUFBRSxFQUFFO1FBQUVJLEtBQUssRUFBRTtNQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDN0JpQyxDQUFDLENBQUM7UUFBRXJDLEtBQUssRUFBRSxHQUFHO1FBQUVJLEtBQUssRUFBRTtNQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRUZDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxZQUFNO01BQ25DLElBQUlnQyxDQUFDLEdBQUdDLGlCQUFpQixDQUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDM0NrQyxDQUFDLENBQUM7UUFBRXJDLEtBQUssRUFBRSxFQUFFO1FBQUVJLEtBQUssRUFBRTtNQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBRUZDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO01BQ2xDLElBQUlnQyxDQUFDLEdBQUdDLGlCQUFpQixDQUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO01BQzFDa0MsQ0FBQyxDQUFDO1FBQUVyQyxLQUFLLEVBQUUsRUFBRTtRQUFFSSxLQUFLLEVBQUU7TUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO01BQy9CaUMsQ0FBQyxDQUFDO1FBQUVyQyxLQUFLLEVBQUUsRUFBRTtRQUFFSSxLQUFLLEVBQUU7TUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO01BQ2xDaUMsQ0FBQyxDQUFDO1FBQUVyQyxLQUFLLEVBQUUsRUFBRTtRQUFFSSxLQUFLLEVBQUU7TUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ2xDLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsWUFBTTtJQUNoQ0ssRUFBRSxDQUFDLHVDQUF1QyxFQUFFLFlBQU07TUFDaEQsSUFBTXVDLEtBQUssR0FBR0MsU0FBUztNQUN2QixJQUFNOUIsTUFBTSxHQUFHL0MsS0FBSyxDQUFDOEUsZUFBZSxDQUFDRixLQUFLLENBQUM7TUFFM0NuQyxNQUFNLENBQUNNLE1BQU0sQ0FBQyxDQUFDTCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGTCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsWUFBTTtNQUMzQyxJQUFNdUMsS0FBSyxHQUFHLElBQUk7TUFDbEIsSUFBTTdCLE1BQU0sR0FBRy9DLEtBQUssQ0FBQzhFLGVBQWUsQ0FBQ0YsS0FBSyxDQUFDO01BRTNDbkMsTUFBTSxDQUFDTSxNQUFNLENBQUMsQ0FBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFFRkwsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLFlBQU07TUFDdkUsSUFBTXVDLEtBQUssR0FBRyxrQkFBa0I7TUFDaEMsSUFBTTdCLE1BQU0sR0FBRy9DLEtBQUssQ0FBQzhFLGVBQWUsQ0FBQ0YsS0FBSyxDQUFDO01BRTNDbkMsTUFBTSxDQUFDTSxNQUFNLENBQUMsQ0FBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRlYsUUFBUSxDQUFDLHVCQUF1QixFQUFFLFlBQU07SUFDdENLLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxZQUFNO01BQ3RELElBQU0wQyxXQUFXLEdBQUdGLFNBQVM7TUFDN0IsSUFBTTlCLE1BQU0sR0FBRy9DLEtBQUssQ0FBQ2dGLHFCQUFxQixDQUFDRCxXQUFXLENBQUM7TUFFdkR0QyxNQUFNLENBQUNNLE1BQU0sQ0FBQyxDQUFDTCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGTCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsWUFBTTtNQUNqRCxJQUFNMEMsV0FBVyxHQUFHLElBQUk7TUFDeEIsSUFBTWhDLE1BQU0sR0FBRy9DLEtBQUssQ0FBQ2dGLHFCQUFxQixDQUFDRCxXQUFXLENBQUM7TUFFdkR0QyxNQUFNLENBQUNNLE1BQU0sQ0FBQyxDQUFDTCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGTCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsWUFBTTtNQUNqRCxJQUFNMEMsV0FBVyxHQUFHLEVBQUU7TUFDdEIsSUFBTWhDLE1BQU0sR0FBRy9DLEtBQUssQ0FBQ2dGLHFCQUFxQixDQUFDRCxXQUFXLENBQUM7TUFFdkR0QyxNQUFNLENBQUNNLE1BQU0sQ0FBQyxDQUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzdCLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==