@pie-lib/graphing-solution-set 2.16.0-beta.0 → 2.16.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +165 -1
  2. package/package.json +14 -9
  3. package/src/axis/axes.jsx +1 -1
  4. package/src/coordinates-label.jsx +1 -1
  5. package/src/graph-with-controls.jsx +1 -1
  6. package/src/grid-setup.jsx +5 -8
  7. package/src/labels.jsx +1 -1
  8. package/src/mark-label.jsx +1 -1
  9. package/src/toggle-bar.jsx +1 -1
  10. package/src/tools/polygon/line.jsx +1 -1
  11. package/src/tools/polygon/polygon.jsx +1 -1
  12. package/src/tools/shared/arrow-head.jsx +1 -1
  13. package/src/tools/shared/line/index.jsx +1 -1
  14. package/src/tools/shared/line/line-path.jsx +1 -1
  15. package/src/tools/shared/point/base-point.jsx +1 -1
  16. package/src/tools/shared/point/index.jsx +1 -1
  17. package/src/tools/shared/styles.js +1 -1
  18. package/src/undo-redo.jsx +1 -1
  19. package/lib/__tests__/graph-with-controls.test.js +0 -191
  20. package/lib/__tests__/graph.test.js +0 -290
  21. package/lib/__tests__/grid.test.js +0 -40
  22. package/lib/__tests__/labels.test.js +0 -59
  23. package/lib/__tests__/mark-label.test.js +0 -154
  24. package/lib/__tests__/toggle-bar.test.js +0 -54
  25. package/lib/__tests__/tool-menu.test.js +0 -43
  26. package/lib/__tests__/undo-redo.test.js +0 -42
  27. package/lib/__tests__/use-debounce.test.js +0 -28
  28. package/lib/__tests__/utils.js +0 -72
  29. package/lib/__tests__/utils.test.js +0 -133
  30. package/lib/axis/__tests__/arrow.test.js +0 -68
  31. package/lib/axis/__tests__/axes.test.js +0 -214
  32. package/lib/axis/arrow.js +0 -115
  33. package/lib/axis/axes.js +0 -415
  34. package/lib/axis/index.js +0 -26
  35. package/lib/bg.js +0 -139
  36. package/lib/container/actions.js +0 -24
  37. package/lib/container/index.js +0 -166
  38. package/lib/container/marks.js +0 -27
  39. package/lib/container/middleware.js +0 -25
  40. package/lib/container/reducer.js +0 -25
  41. package/lib/coordinates-label.js +0 -109
  42. package/lib/graph-with-controls.js +0 -372
  43. package/lib/graph.js +0 -419
  44. package/lib/grid-setup.js +0 -462
  45. package/lib/grid.js +0 -176
  46. package/lib/index.js +0 -51
  47. package/lib/labels.js +0 -299
  48. package/lib/mark-label.js +0 -208
  49. package/lib/toggle-bar.js +0 -336
  50. package/lib/tool-menu.js +0 -325
  51. package/lib/tools/index.js +0 -29
  52. package/lib/tools/line/__tests__/component.test.js +0 -56
  53. package/lib/tools/line/component.js +0 -106
  54. package/lib/tools/line/index.js +0 -16
  55. package/lib/tools/polygon/__tests__/component.test.js +0 -245
  56. package/lib/tools/polygon/__tests__/index.test.js +0 -95
  57. package/lib/tools/polygon/__tests__/line.test.js +0 -43
  58. package/lib/tools/polygon/__tests__/polygon.test.js +0 -73
  59. package/lib/tools/polygon/component.js +0 -457
  60. package/lib/tools/polygon/index.js +0 -106
  61. package/lib/tools/polygon/line.js +0 -151
  62. package/lib/tools/polygon/polygon.js +0 -171
  63. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -62
  64. package/lib/tools/shared/arrow-head.js +0 -75
  65. package/lib/tools/shared/line/__tests__/index.test.js +0 -291
  66. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -78
  67. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -122
  68. package/lib/tools/shared/line/index.js +0 -637
  69. package/lib/tools/shared/line/line-path.js +0 -145
  70. package/lib/tools/shared/line/with-root-edge.js +0 -155
  71. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -137
  72. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -134
  73. package/lib/tools/shared/point/arrow-point.js +0 -113
  74. package/lib/tools/shared/point/arrow.js +0 -96
  75. package/lib/tools/shared/point/base-point.js +0 -151
  76. package/lib/tools/shared/point/index.js +0 -94
  77. package/lib/tools/shared/styles.js +0 -49
  78. package/lib/tools/shared/types.js +0 -19
  79. package/lib/undo-redo.js +0 -107
  80. package/lib/use-debounce.js +0 -32
  81. package/lib/utils.js +0 -314
package/lib/axis/axes.js DELETED
@@ -1,415 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.sharedValues = exports.firstNegativeValue = exports["default"] = exports.RawYAxis = exports.RawXAxis = exports.AxisPropTypes = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
13
-
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
-
16
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
26
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
- var _react = _interopRequireDefault(require("react"));
29
-
30
- var _axis = require("@vx/axis");
31
-
32
- var _plot = require("@pie-lib/plot");
33
-
34
- var _propTypes = _interopRequireDefault(require("prop-types"));
35
-
36
- var _arrow = _interopRequireDefault(require("./arrow"));
37
-
38
- var _core = require("@material-ui/core");
39
-
40
- var _utils = require("../utils");
41
-
42
- var _renderUi = require("@pie-lib/render-ui");
43
-
44
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
-
46
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
-
48
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
49
-
50
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
-
52
- var AxisPropTypes = {
53
- includeArrows: _propTypes["default"].object,
54
- graphProps: _propTypes["default"].object
55
- };
56
- exports.AxisPropTypes = AxisPropTypes;
57
- var AxisDefaultProps = {
58
- includeArrows: {
59
- left: true,
60
- right: true,
61
- up: true,
62
- down: true
63
- }
64
- };
65
-
66
- var axisStyles = function axisStyles(theme) {
67
- return {
68
- line: {
69
- stroke: '#8a92c0',
70
- strokeWidth: 4
71
- },
72
- arrow: {
73
- fill: '#8a92c0'
74
- },
75
- tick: {
76
- fill: _renderUi.color.defaults.BLACK,
77
- '& > line': {
78
- stroke: '#8a92c0'
79
- }
80
- },
81
- labelFontSize: {
82
- fontSize: theme.typography.fontSize
83
- },
84
- axisLabelHolder: {
85
- padding: 0,
86
- margin: 0,
87
- textAlign: 'center',
88
- '* > *': {
89
- margin: 0,
90
- padding: 0
91
- },
92
- fontSize: theme.typography.fontSize
93
- }
94
- };
95
- };
96
-
97
- var tickLabelStyles = {
98
- fontFamily: 'Roboto',
99
- fontSize: '14px',
100
- cursor: 'inherit'
101
- };
102
-
103
- var sharedValues = function sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy) {
104
- var result = [];
105
-
106
- if (firstNegativeX === firstNegativeY && distanceFromOriginToFirstNegativeX - deltaAllowance < distanceFromOriginToFirstNegativeY && distanceFromOriginToFirstNegativeY < distanceFromOriginToFirstNegativeX + deltaAllowance && distanceFromOriginToFirstNegativeX - deltaAllowance < dy && dy < distanceFromOriginToFirstNegativeX + deltaAllowance) {
107
- result.push(firstNegativeX);
108
- }
109
-
110
- return result;
111
- };
112
-
113
- exports.sharedValues = sharedValues;
114
-
115
- var firstNegativeValue = function firstNegativeValue(interval) {
116
- return (interval || []).find(function (element) {
117
- return element < 0;
118
- });
119
- };
120
-
121
- exports.firstNegativeValue = firstNegativeValue;
122
-
123
- var RawXAxis = /*#__PURE__*/function (_React$Component) {
124
- (0, _inherits2["default"])(RawXAxis, _React$Component);
125
-
126
- var _super = _createSuper(RawXAxis);
127
-
128
- function RawXAxis() {
129
- (0, _classCallCheck2["default"])(this, RawXAxis);
130
- return _super.apply(this, arguments);
131
- }
132
-
133
- (0, _createClass2["default"])(RawXAxis, [{
134
- key: "render",
135
- value: function render() {
136
- var _this$props = this.props,
137
- includeArrows = _this$props.includeArrows,
138
- classes = _this$props.classes,
139
- graphProps = _this$props.graphProps,
140
- columnTicksValues = _this$props.columnTicksValues,
141
- skipValues = _this$props.skipValues,
142
- distanceFromOriginToFirstNegativeY = _this$props.distanceFromOriginToFirstNegativeY,
143
- dy = _this$props.dy;
144
-
145
- var _ref = graphProps || {},
146
- scale = _ref.scale,
147
- domain = _ref.domain,
148
- size = _ref.size,
149
- range = _ref.range; // Having 0 as a number in columnTicksValues does not make 0 to show up
150
- // so we use this trick, by defining it as a string:
151
-
152
-
153
- var tickValues = (domain.labelStep || range.labelStep) && domain.min <= 0 ? ['0'].concat((0, _toConsumableArray2["default"])(columnTicksValues)) : columnTicksValues; // However, the '0' has to be displayed only if other tick labels (y-axis or x-axis) are displayed
154
-
155
- var labelProps = function labelProps(label) {
156
- var y = skipValues && skipValues[0] === label ? distanceFromOriginToFirstNegativeY + 4 : dy;
157
- return _objectSpread(_objectSpread({}, tickLabelStyles), {}, {
158
- textAnchor: 'middle',
159
- y: y,
160
- dx: label === '0' ? -10 : 0,
161
- dy: label === '0' ? -7 : 0
162
- });
163
- };
164
-
165
- var necessaryRows = (0, _utils.countWords)(domain.axisLabel);
166
- var longestWord = (0, _utils.findLongestWord)(domain.axisLabel);
167
- var necessaryWidth = (0, _utils.amountToIncreaseWidth)(longestWord) + 2;
168
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
169
- axisLineClassName: classes.line,
170
- scale: scale.x,
171
- top: scale.y(0),
172
- left: 0,
173
- label: domain.label,
174
- rangePadding: 8,
175
- tickClassName: classes.tick,
176
- tickFormat: function tickFormat(value) {
177
- return value;
178
- },
179
- tickLabelProps: labelProps,
180
- tickValues: tickValues
181
- }), includeArrows && includeArrows.left && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
182
- direction: "left",
183
- x: domain.min,
184
- y: 0,
185
- className: classes.arrow,
186
- scale: scale
187
- }), includeArrows && includeArrows.right && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
188
- direction: "right",
189
- x: domain.max,
190
- y: 0,
191
- className: classes.arrow,
192
- scale: scale
193
- }), domain.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
194
- x: size.width + 17,
195
- y: scale.y(0) - 9,
196
- width: necessaryWidth,
197
- height: 20 * necessaryRows
198
- }, /*#__PURE__*/_react["default"].createElement("div", {
199
- dangerouslySetInnerHTML: {
200
- __html: domain.axisLabel
201
- },
202
- className: classes.labelFontSize
203
- })));
204
- }
205
- }]);
206
- return RawXAxis;
207
- }(_react["default"].Component);
208
-
209
- exports.RawXAxis = RawXAxis;
210
- (0, _defineProperty2["default"])(RawXAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
211
- classes: _propTypes["default"].object,
212
- graphProps: _plot.types.GraphPropsType.isRequired
213
- }));
214
- (0, _defineProperty2["default"])(RawXAxis, "defaultProps", AxisDefaultProps);
215
- var XAxis = (0, _core.withStyles)(axisStyles)(RawXAxis);
216
-
217
- var RawYAxis = /*#__PURE__*/function (_React$Component2) {
218
- (0, _inherits2["default"])(RawYAxis, _React$Component2);
219
-
220
- var _super2 = _createSuper(RawYAxis);
221
-
222
- function RawYAxis() {
223
- (0, _classCallCheck2["default"])(this, RawYAxis);
224
- return _super2.apply(this, arguments);
225
- }
226
-
227
- (0, _createClass2["default"])(RawYAxis, [{
228
- key: "render",
229
- value: function render() {
230
- var _this$props2 = this.props,
231
- classes = _this$props2.classes,
232
- includeArrows = _this$props2.includeArrows,
233
- graphProps = _this$props2.graphProps,
234
- skipValues = _this$props2.skipValues,
235
- rowTickValues = _this$props2.rowTickValues;
236
-
237
- var _ref2 = graphProps || {},
238
- scale = _ref2.scale,
239
- range = _ref2.range,
240
- size = _ref2.size;
241
-
242
- var necessaryWidth = range.axisLabel ? (0, _utils.amountToIncreaseWidth)(range.axisLabel.length) : 0;
243
-
244
- var customTickFormat = function customTickFormat(value) {
245
- return skipValues && skipValues.indexOf(value) >= 0 ? '' : value;
246
- };
247
-
248
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
249
- axisLineClassName: classes.line,
250
- orientation: 'left',
251
- scale: scale.y,
252
- top: 0,
253
- height: size.height,
254
- left: scale.x(0),
255
- label: range.label,
256
- labelProps: {
257
- 'data-pie-readable': false
258
- },
259
- rangePadding: 8,
260
- tickLength: 10,
261
- tickClassName: classes.tick,
262
- tickFormat: customTickFormat,
263
- tickLabelProps: function tickLabelProps(value) {
264
- var digits = value.toLocaleString().replace(/[.-]/g, '').length || 1;
265
- return _objectSpread(_objectSpread({}, tickLabelStyles), {}, {
266
- dy: 4,
267
- dx: -10 - digits * 9,
268
- 'data-pie-readable': false
269
- });
270
- },
271
- hideZero: true,
272
- tickTextAnchor: 'bottom',
273
- tickValues: rowTickValues
274
- }), includeArrows && includeArrows.down && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
275
- direction: "down",
276
- x: 0,
277
- y: range.min,
278
- className: classes.arrow,
279
- scale: scale
280
- }), includeArrows && includeArrows.up && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
281
- direction: "up",
282
- x: 0,
283
- y: range.max,
284
- className: classes.arrow,
285
- scale: scale
286
- }), range.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
287
- x: scale.x(0) - necessaryWidth / 2,
288
- y: -33,
289
- width: necessaryWidth,
290
- height: "20"
291
- }, /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
292
- "false": true
293
- }, /*#__PURE__*/_react["default"].createElement("div", {
294
- dangerouslySetInnerHTML: {
295
- __html: range.axisLabel
296
- },
297
- className: classes.axisLabelHolder
298
- }))));
299
- }
300
- }]);
301
- return RawYAxis;
302
- }(_react["default"].Component);
303
-
304
- exports.RawYAxis = RawYAxis;
305
- (0, _defineProperty2["default"])(RawYAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
306
- graphProps: _plot.types.GraphPropsType.isRequired
307
- }));
308
- (0, _defineProperty2["default"])(RawYAxis, "defaultProps", AxisDefaultProps);
309
- var YAxis = (0, _core.withStyles)(axisStyles)(RawYAxis);
310
-
311
- var Axes = /*#__PURE__*/function (_React$Component3) {
312
- (0, _inherits2["default"])(Axes, _React$Component3);
313
-
314
- var _super3 = _createSuper(Axes);
315
-
316
- function Axes() {
317
- var _this;
318
-
319
- (0, _classCallCheck2["default"])(this, Axes);
320
-
321
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
322
- args[_key] = arguments[_key];
323
- }
324
-
325
- _this = _super3.call.apply(_super3, [this].concat(args));
326
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "xValues", function () {
327
- var graphProps = _this.props.graphProps;
328
-
329
- var _ref3 = graphProps || {},
330
- scale = _ref3.scale,
331
- domain = _ref3.domain;
332
-
333
- if (!domain || !scale) {
334
- return;
335
- }
336
-
337
- var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, domain), {}, {
338
- step: domain.labelStep
339
- }));
340
- var negative = firstNegativeValue(ticks);
341
- return {
342
- columnTicksValues: ticks,
343
- firstNegativeX: negative,
344
- distanceFromOriginToFirstNegativeX: Math.abs(scale.y(0) - scale.y(negative))
345
- };
346
- });
347
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "yValues", function () {
348
- var graphProps = _this.props.graphProps;
349
-
350
- var _ref4 = graphProps || {},
351
- scale = _ref4.scale,
352
- range = _ref4.range;
353
-
354
- if (!range || !scale) {
355
- return;
356
- }
357
-
358
- var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, range), {}, {
359
- step: range.labelStep
360
- }));
361
- var negative = firstNegativeValue(ticks);
362
- return {
363
- rowTickValues: ticks,
364
- firstNegativeY: negative,
365
- distanceFromOriginToFirstNegativeY: Math.abs(scale.x(0) - scale.x(negative))
366
- };
367
- });
368
- return _this;
369
- }
370
-
371
- (0, _createClass2["default"])(Axes, [{
372
- key: "render",
373
- value: function render() {
374
- var graphProps = this.props.graphProps;
375
-
376
- var _ref5 = graphProps || {},
377
- domain = _ref5.domain,
378
- range = _ref5.range;
379
-
380
- var _this$xValues = this.xValues(),
381
- columnTicksValues = _this$xValues.columnTicksValues,
382
- firstNegativeX = _this$xValues.firstNegativeX,
383
- distanceFromOriginToFirstNegativeX = _this$xValues.distanceFromOriginToFirstNegativeX;
384
-
385
- var _this$yValues = this.yValues(),
386
- rowTickValues = _this$yValues.rowTickValues,
387
- firstNegativeY = _this$yValues.firstNegativeY,
388
- distanceFromOriginToFirstNegativeY = _this$yValues.distanceFromOriginToFirstNegativeY;
389
-
390
- var deltaAllowance = 6;
391
- var dy = 25;
392
- var skipValues = sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy); // each axis has to be displayed only if the domain & range include it
393
-
394
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, range.min <= 0 ? /*#__PURE__*/_react["default"].createElement(XAxis, (0, _extends2["default"])({}, this.props, {
395
- skipValues: skipValues,
396
- columnTicksValues: columnTicksValues,
397
- distanceFromOriginToFirstNegativeY: distanceFromOriginToFirstNegativeY,
398
- dy: dy
399
- })) : null, domain.min <= 0 ? /*#__PURE__*/_react["default"].createElement(YAxis, (0, _extends2["default"])({}, this.props, {
400
- skipValues: skipValues,
401
- rowTickValues: rowTickValues,
402
- distanceFromOriginToFirstNegativeX: distanceFromOriginToFirstNegativeX
403
- })) : null);
404
- }
405
- }]);
406
- return Axes;
407
- }(_react["default"].Component);
408
-
409
- exports["default"] = Axes;
410
- (0, _defineProperty2["default"])(Axes, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
411
- classes: _propTypes["default"].object,
412
- graphProps: _plot.types.GraphPropsType.isRequired
413
- }));
414
- (0, _defineProperty2["default"])(Axes, "defaultProps", AxisDefaultProps);
415
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9heGlzL2F4ZXMuanN4Il0sIm5hbWVzIjpbIkF4aXNQcm9wVHlwZXMiLCJpbmNsdWRlQXJyb3dzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiZ3JhcGhQcm9wcyIsIkF4aXNEZWZhdWx0UHJvcHMiLCJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iLCJheGlzU3R5bGVzIiwidGhlbWUiLCJsaW5lIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJhcnJvdyIsImZpbGwiLCJ0aWNrIiwiY29sb3IiLCJkZWZhdWx0cyIsIkJMQUNLIiwibGFiZWxGb250U2l6ZSIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImF4aXNMYWJlbEhvbGRlciIsInBhZGRpbmciLCJtYXJnaW4iLCJ0ZXh0QWxpZ24iLCJ0aWNrTGFiZWxTdHlsZXMiLCJmb250RmFtaWx5IiwiY3Vyc29yIiwic2hhcmVkVmFsdWVzIiwiZmlyc3ROZWdhdGl2ZVgiLCJmaXJzdE5lZ2F0aXZlWSIsImRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgiLCJkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZIiwiZGVsdGFBbGxvd2FuY2UiLCJkeSIsInJlc3VsdCIsInB1c2giLCJmaXJzdE5lZ2F0aXZlVmFsdWUiLCJpbnRlcnZhbCIsImZpbmQiLCJlbGVtZW50IiwiUmF3WEF4aXMiLCJwcm9wcyIsImNsYXNzZXMiLCJjb2x1bW5UaWNrc1ZhbHVlcyIsInNraXBWYWx1ZXMiLCJzY2FsZSIsImRvbWFpbiIsInNpemUiLCJyYW5nZSIsInRpY2tWYWx1ZXMiLCJsYWJlbFN0ZXAiLCJtaW4iLCJsYWJlbFByb3BzIiwibGFiZWwiLCJ5IiwidGV4dEFuY2hvciIsImR4IiwibmVjZXNzYXJ5Um93cyIsImF4aXNMYWJlbCIsImxvbmdlc3RXb3JkIiwibmVjZXNzYXJ5V2lkdGgiLCJ4IiwidmFsdWUiLCJtYXgiLCJ3aWR0aCIsIl9faHRtbCIsIlJlYWN0IiwiQ29tcG9uZW50IiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSIsImlzUmVxdWlyZWQiLCJYQXhpcyIsIlJhd1lBeGlzIiwicm93VGlja1ZhbHVlcyIsImxlbmd0aCIsImN1c3RvbVRpY2tGb3JtYXQiLCJpbmRleE9mIiwiaGVpZ2h0IiwiZGlnaXRzIiwidG9Mb2NhbGVTdHJpbmciLCJyZXBsYWNlIiwiWUF4aXMiLCJBeGVzIiwidGlja3MiLCJzdGVwIiwibmVnYXRpdmUiLCJNYXRoIiwiYWJzIiwieFZhbHVlcyIsInlWYWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBRU8sSUFBTUEsYUFBYSxHQUFHO0FBQzNCQyxFQUFBQSxhQUFhLEVBQUVDLHNCQUFVQyxNQURFO0FBRTNCQyxFQUFBQSxVQUFVLEVBQUVGLHNCQUFVQztBQUZLLENBQXRCOztBQUtQLElBQU1FLGdCQUFnQixHQUFHO0FBQ3ZCSixFQUFBQSxhQUFhLEVBQUU7QUFDYkssSUFBQUEsSUFBSSxFQUFFLElBRE87QUFFYkMsSUFBQUEsS0FBSyxFQUFFLElBRk07QUFHYkMsSUFBQUEsRUFBRSxFQUFFLElBSFM7QUFJYkMsSUFBQUEsSUFBSSxFQUFFO0FBSk87QUFEUSxDQUF6Qjs7QUFTQSxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDQyxLQUFEO0FBQUEsU0FBWTtBQUM3QkMsSUFBQUEsSUFBSSxFQUFFO0FBQ0pDLE1BQUFBLE1BQU0sRUFBRSxTQURKO0FBRUpDLE1BQUFBLFdBQVcsRUFBRTtBQUZULEtBRHVCO0FBSzdCQyxJQUFBQSxLQUFLLEVBQUU7QUFDTEMsTUFBQUEsSUFBSSxFQUFFO0FBREQsS0FMc0I7QUFRN0JDLElBQUFBLElBQUksRUFBRTtBQUNKRCxNQUFBQSxJQUFJLEVBQUVFLGdCQUFNQyxRQUFOLENBQWVDLEtBRGpCO0FBRUosa0JBQVk7QUFDVlAsUUFBQUEsTUFBTSxFQUFFO0FBREU7QUFGUixLQVJ1QjtBQWM3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OztpQ0FKaEJZLEksa0JBTUdqRixnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnQHZ4L2F4aXMnO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQXJyb3cgZnJvbSAnLi9hcnJvdyc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnO1xuaW1wb3J0IHsgY291bnRXb3JkcywgZmluZExvbmdlc3RXb3JkLCBhbW91bnRUb0luY3JlYXNlV2lkdGgsIGdldFRpY2tWYWx1ZXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBjb2xvciwgUmVhZGFibGUgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuXG5leHBvcnQgY29uc3QgQXhpc1Byb3BUeXBlcyA9IHtcbiAgaW5jbHVkZUFycm93czogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ3JhcGhQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmNvbnN0IEF4aXNEZWZhdWx0UHJvcHMgPSB7XG4gIGluY2x1ZGVBcnJvd3M6IHtcbiAgICBsZWZ0OiB0cnVlLFxuICAgIHJpZ2h0OiB0cnVlLFxuICAgIHVwOiB0cnVlLFxuICAgIGRvd246IHRydWUsXG4gIH0sXG59O1xuXG5jb25zdCBheGlzU3R5bGVzID0gKHRoZW1lKSA9PiAoe1xuICBsaW5lOiB7XG4gICAgc3Ryb2tlOiAnIzhhOTJjMCcsXG4gICAgc3Ryb2tlV2lkdGg6IDQsXG4gIH0sXG4gIGFycm93OiB7XG4gICAgZmlsbDogJyM4YTkyYzAnLFxuICB9LFxuICB0aWNrOiB7XG4gICAgZmlsbDogY29sb3IuZGVmYXVsdHMuQkxBQ0ssXG4gICAgJyYgPiBsaW5lJzoge1xuICAgICAgc3Ryb2tlOiAnIzhhOTJjMCcsXG4gICAgfSxcbiAgfSxcbiAgbGFiZWxGb250U2l6ZToge1xuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplLFxuICB9LFxuICBheGlzTGFiZWxIb2xkZXI6IHtcbiAgICBwYWRkaW5nOiAwLFxuICAgIG1hcmdpbjogMCxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICcqID4gKic6IHtcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHBhZGRpbmc6IDAsXG4gICAgfSxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSxcbiAgfSxcbn0pO1xuXG5jb25zdCB0aWNrTGFiZWxTdHlsZXMgPSB7XG4gIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICBmb250U2l6ZTogJzE0cHgnLFxuICBjdXJzb3I6ICdpbmhlcml0Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFyZWRWYWx1ZXMgPSAoXG4gIGZpcnN0TmVnYXRpdmVYLFxuICBmaXJzdE5lZ2F0aXZlWSxcbiAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCxcbiAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSxcbiAgZGVsdGFBbGxvd2FuY2UsXG4gIGR5LFxuKSA9PiB7XG4gIGxldCByZXN1bHQgPSBbXTtcblxuICBpZiAoXG4gICAgZmlyc3ROZWdhdGl2ZVggPT09IGZpcnN0TmVnYXRpdmVZICYmXG4gICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCAtIGRlbHRhQWxsb3dhbmNlIDwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSAmJlxuICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkgPCBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVYICsgZGVsdGFBbGxvd2FuY2UgJiZcbiAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVYIC0gZGVsdGFBbGxvd2FuY2UgPCBkeSAmJlxuICAgIGR5IDwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCArIGRlbHRhQWxsb3dhbmNlXG4gICkge1xuICAgIHJlc3VsdC5wdXNoKGZpcnN0TmVnYXRpdmVYKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZmlyc3ROZWdhdGl2ZVZhbHVlID0gKGludGVydmFsKSA9PiAoaW50ZXJ2YWwgfHwgW10pLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQgPCAwKTtcblxuZXhwb3J0IGNsYXNzIFJhd1hBeGlzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAuLi5BeGlzUHJvcFR5cGVzLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IEF4aXNEZWZhdWx0UHJvcHM7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluY2x1ZGVBcnJvd3MsXG4gICAgICBjbGFzc2VzLFxuICAgICAgZ3JhcGhQcm9wcyxcbiAgICAgIGNvbHVtblRpY2tzVmFsdWVzLFxuICAgICAgc2tpcFZhbHVlcyxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVksXG4gICAgICBkeSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlLCBkb21haW4sIHNpemUsIHJhbmdlIH0gPSBncmFwaFByb3BzIHx8IHt9O1xuXG4gICAgLy8gSGF2aW5nIDAgYXMgYSBudW1iZXIgaW4gY29sdW1uVGlja3NWYWx1ZXMgZG9lcyBub3QgbWFrZSAwIHRvIHNob3cgdXBcbiAgICAvLyBzbyB3ZSB1c2UgdGhpcyB0cmljaywgYnkgZGVmaW5pbmcgaXQgYXMgYSBzdHJpbmc6XG4gICAgY29uc3QgdGlja1ZhbHVlcyA9XG4gICAgICAoZG9tYWluLmxhYmVsU3RlcCB8fCByYW5nZS5sYWJlbFN0ZXApICYmIGRvbWFpbi5taW4gPD0gMCA/IFsnMCcsIC4uLmNvbHVtblRpY2tzVmFsdWVzXSA6IGNvbHVtblRpY2tzVmFsdWVzO1xuICAgIC8vIEhvd2V2ZXIsIHRoZSAnMCcgaGFzIHRvIGJlIGRpc3BsYXllZCBvbmx5IGlmIG90aGVyIHRpY2sgbGFiZWxzICh5LWF4aXMgb3IgeC1heGlzKSBhcmUgZGlzcGxheWVkXG5cbiAgICBjb25zdCBsYWJlbFByb3BzID0gKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCB5ID0gc2tpcFZhbHVlcyAmJiBza2lwVmFsdWVzWzBdID09PSBsYWJlbCA/IGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkgKyA0IDogZHk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRpY2tMYWJlbFN0eWxlcyxcbiAgICAgICAgdGV4dEFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgIHk6IHksXG4gICAgICAgIGR4OiBsYWJlbCA9PT0gJzAnID8gLTEwIDogMCxcbiAgICAgICAgZHk6IGxhYmVsID09PSAnMCcgPyAtNyA6IDAsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBuZWNlc3NhcnlSb3dzID0gY291bnRXb3Jkcyhkb21haW4uYXhpc0xhYmVsKTtcbiAgICBjb25zdCBsb25nZXN0V29yZCA9IGZpbmRMb25nZXN0V29yZChkb21haW4uYXhpc0xhYmVsKTtcbiAgICBjb25zdCBuZWNlc3NhcnlXaWR0aCA9IGFtb3VudFRvSW5jcmVhc2VXaWR0aChsb25nZXN0V29yZCkgKyAyO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPEF4aXNcbiAgICAgICAgICBheGlzTGluZUNsYXNzTmFtZT17Y2xhc3Nlcy5saW5lfVxuICAgICAgICAgIHNjYWxlPXtzY2FsZS54fVxuICAgICAgICAgIHRvcD17c2NhbGUueSgwKX1cbiAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgIGxhYmVsPXtkb21haW4ubGFiZWx9XG4gICAgICAgICAgcmFuZ2VQYWRkaW5nPXs4fVxuICAgICAgICAgIHRpY2tDbGFzc05hbWU9e2NsYXNzZXMudGlja31cbiAgICAgICAgICB0aWNrRm9ybWF0PXsodmFsdWUpID0+IHZhbHVlfVxuICAgICAgICAgIHRpY2tMYWJlbFByb3BzPXtsYWJlbFByb3BzfVxuICAgICAgICAgIHRpY2tWYWx1ZXM9e3RpY2tWYWx1ZXN9XG4gICAgICAgIC8+XG4gICAgICAgIHtpbmNsdWRlQXJyb3dzICYmIGluY2x1ZGVBcnJvd3MubGVmdCAmJiAoXG4gICAgICAgICAgPEFycm93IGRpcmVjdGlvbj1cImxlZnRcIiB4PXtkb21haW4ubWlufSB5PXswfSBjbGFzc05hbWU9e2NsYXNzZXMuYXJyb3d9IHNjYWxlPXtzY2FsZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5yaWdodCAmJiAoXG4gICAgICAgICAgPEFycm93IGRpcmVjdGlvbj1cInJpZ2h0XCIgeD17ZG9tYWluLm1heH0geT17MH0gY2xhc3NOYW1lPXtjbGFzc2VzLmFycm93fSBzY2FsZT17c2NhbGV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtkb21haW4uYXhpc0xhYmVsICYmIChcbiAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PXtzaXplLndpZHRoICsgMTd9IHk9e3NjYWxlLnkoMCkgLSA5fSB3aWR0aD17bmVjZXNzYXJ5V2lkdGh9IGhlaWdodD17MjAgKiBuZWNlc3NhcnlSb3dzfT5cbiAgICAgICAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBkb21haW4uYXhpc0xhYmVsIH19IGNsYXNzTmFtZT17Y2xhc3Nlcy5sYWJlbEZvbnRTaXplfSAvPlxuICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBYQXhpcyA9IHdpdGhTdHlsZXMoYXhpc1N0eWxlcykoUmF3WEF4aXMpO1xuXG5leHBvcnQgY2xhc3MgUmF3WUF4aXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC4uLkF4aXNQcm9wVHlwZXMsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IEF4aXNEZWZhdWx0UHJvcHM7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgaW5jbHVkZUFycm93cywgZ3JhcGhQcm9wcywgc2tpcFZhbHVlcywgcm93VGlja1ZhbHVlcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlLCByYW5nZSwgc2l6ZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGNvbnN0IG5lY2Vzc2FyeVdpZHRoID0gcmFuZ2UuYXhpc0xhYmVsID8gYW1vdW50VG9JbmNyZWFzZVdpZHRoKHJhbmdlLmF4aXNMYWJlbC5sZW5ndGgpIDogMDtcblxuICAgIGNvbnN0IGN1c3RvbVRpY2tGb3JtYXQgPSAodmFsdWUpID0+IChza2lwVmFsdWVzICYmIHNraXBWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPj0gMCA/ICcnIDogdmFsdWUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPEF4aXNcbiAgICAgICAgICBheGlzTGluZUNsYXNzTmFtZT17Y2xhc3Nlcy5saW5lfVxuICAgICAgICAgIG9yaWVudGF0aW9uPXsnbGVmdCd9XG4gICAgICAgICAgc2NhbGU9e3NjYWxlLnl9XG4gICAgICAgICAgdG9wPXswfVxuICAgICAgICAgIGhlaWdodD17c2l6ZS5oZWlnaHR9XG4gICAgICAgICAgbGVmdD17c2NhbGUueCgwKX1cbiAgICAgICAgICBsYWJlbD17cmFuZ2UubGFiZWx9XG4gICAgICAgICAgbGFiZWxQcm9wcz17eyAnZGF0YS1waWUtcmVhZGFibGUnOiBmYWxzZSB9fVxuICAgICAgICAgIHJhbmdlUGFkZGluZz17OH1cbiAgICAgICAgICB0aWNrTGVuZ3RoPXsxMH1cbiAgICAgICAgICB0aWNrQ2xhc3NOYW1lPXtjbGFzc2VzLnRpY2t9XG4gICAgICAgICAgdGlja0Zvcm1hdD17Y3VzdG9tVGlja0Zvcm1hdH1cbiAgICAgICAgICB0aWNrTGFiZWxQcm9wcz17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgZGlnaXRzID0gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5yZXBsYWNlKC9bLi1dL2csICcnKS5sZW5ndGggfHwgMTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udGlja0xhYmVsU3R5bGVzLFxuICAgICAgICAgICAgICBkeTogNCxcbiAgICAgICAgICAgICAgZHg6IC0xMCAtIGRpZ2l0cyAqIDksXG4gICAgICAgICAgICAgICdkYXRhLXBpZS1yZWFkYWJsZSc6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGhpZGVaZXJvPXt0cnVlfVxuICAgICAgICAgIHRpY2tUZXh0QW5jaG9yPXsnYm90dG9tJ31cbiAgICAgICAgICB0aWNrVmFsdWVzPXtyb3dUaWNrVmFsdWVzfVxuICAgICAgICAvPlxuXG4gICAgICAgIHtpbmNsdWRlQXJyb3dzICYmIGluY2x1ZGVBcnJvd3MuZG93biAmJiAoXG4gICAgICAgICAgPEFycm93IGRpcmVjdGlvbj1cImRvd25cIiB4PXswfSB5PXtyYW5nZS5taW59IGNsYXNzTmFtZT17Y2xhc3Nlcy5hcnJvd30gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7aW5jbHVkZUFycm93cyAmJiBpbmNsdWRlQXJyb3dzLnVwICYmIChcbiAgICAgICAgICA8QXJyb3cgZGlyZWN0aW9uPVwidXBcIiB4PXswfSB5PXtyYW5nZS5tYXh9IGNsYXNzTmFtZT17Y2xhc3Nlcy5hcnJvd30gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7cmFuZ2UuYXhpc0xhYmVsICYmIChcbiAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PXtzY2FsZS54KDApIC0gbmVjZXNzYXJ5V2lkdGggLyAyfSB5PXstMzN9IHdpZHRoPXtuZWNlc3NhcnlXaWR0aH0gaGVpZ2h0PVwiMjBcIj5cbiAgICAgICAgICAgIDxSZWFkYWJsZSBmYWxzZT5cbiAgICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHJhbmdlLmF4aXNMYWJlbCB9fSBjbGFzc05hbWU9e2NsYXNzZXMuYXhpc0xhYmVsSG9sZGVyfSAvPlxuICAgICAgICAgICAgPC9SZWFkYWJsZT5cbiAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgWUF4aXMgPSB3aXRoU3R5bGVzKGF4aXNTdHlsZXMpKFJhd1lBeGlzKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXhlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uQXhpc1Byb3BUeXBlcyxcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBBeGlzRGVmYXVsdFByb3BzO1xuXG4gIHhWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIGRvbWFpbiB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGlmICghZG9tYWluIHx8ICFzY2FsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tzID0gZ2V0VGlja1ZhbHVlcyh7IC4uLmRvbWFpbiwgc3RlcDogZG9tYWluLmxhYmVsU3RlcCB9KTtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IGZpcnN0TmVnYXRpdmVWYWx1ZSh0aWNrcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uVGlja3NWYWx1ZXM6IHRpY2tzLFxuICAgICAgZmlyc3ROZWdhdGl2ZVg6IG5lZ2F0aXZlLFxuICAgICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWDogTWF0aC5hYnMoc2NhbGUueSgwKSAtIHNjYWxlLnkobmVnYXRpdmUpKSxcbiAgICB9O1xuICB9O1xuXG4gIHlWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIHJhbmdlIH0gPSBncmFwaFByb3BzIHx8IHt9O1xuXG4gICAgaWYgKCFyYW5nZSB8fCAhc2NhbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrcyA9IGdldFRpY2tWYWx1ZXMoeyAuLi5yYW5nZSwgc3RlcDogcmFuZ2UubGFiZWxTdGVwIH0pO1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gZmlyc3ROZWdhdGl2ZVZhbHVlKHRpY2tzKTtcblxuICAgIHJldHVybiB7XG4gICAgICByb3dUaWNrVmFsdWVzOiB0aWNrcyxcbiAgICAgIGZpcnN0TmVnYXRpdmVZOiBuZWdhdGl2ZSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVk6IE1hdGguYWJzKHNjYWxlLngoMCkgLSBzY2FsZS54KG5lZ2F0aXZlKSksXG4gICAgfTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IGNvbHVtblRpY2tzVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWCwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCB9ID0gdGhpcy54VmFsdWVzKCk7XG4gICAgY29uc3QgeyByb3dUaWNrVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWSwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSB9ID0gdGhpcy55VmFsdWVzKCk7XG4gICAgY29uc3QgZGVsdGFBbGxvd2FuY2UgPSA2O1xuICAgIGNvbnN0IGR5ID0gMjU7XG5cbiAgICBjb25zdCBza2lwVmFsdWVzID0gc2hhcmVkVmFsdWVzKFxuICAgICAgZmlyc3ROZWdhdGl2ZVgsXG4gICAgICBmaXJzdE5lZ2F0aXZlWSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgsXG4gICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZLFxuICAgICAgZGVsdGFBbGxvd2FuY2UsXG4gICAgICBkeSxcbiAgICApO1xuXG4gICAgLy8gZWFjaCBheGlzIGhhcyB0byBiZSBkaXNwbGF5ZWQgb25seSBpZiB0aGUgZG9tYWluICYgcmFuZ2UgaW5jbHVkZSBpdFxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHtyYW5nZS5taW4gPD0gMCA/IChcbiAgICAgICAgICA8WEF4aXNcbiAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgc2tpcFZhbHVlcz17c2tpcFZhbHVlc31cbiAgICAgICAgICAgIGNvbHVtblRpY2tzVmFsdWVzPXtjb2x1bW5UaWNrc1ZhbHVlc31cbiAgICAgICAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVk9e2Rpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVl9XG4gICAgICAgICAgICBkeT17ZHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtkb21haW4ubWluIDw9IDAgPyAoXG4gICAgICAgICAgPFlBeGlzXG4gICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgIHNraXBWYWx1ZXM9e3NraXBWYWx1ZXN9XG4gICAgICAgICAgICByb3dUaWNrVmFsdWVzPXtyb3dUaWNrVmFsdWVzfVxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWD17ZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuIl19
package/lib/axis/index.js DELETED
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- var _typeof = require("@babel/runtime/helpers/typeof");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "Axes", {
9
- enumerable: true,
10
- get: function get() {
11
- return _axes["default"];
12
- }
13
- });
14
- Object.defineProperty(exports, "AxisPropTypes", {
15
- enumerable: true,
16
- get: function get() {
17
- return _axes.AxisPropTypes;
18
- }
19
- });
20
-
21
- var _axes = _interopRequireWildcard(require("./axes"));
22
-
23
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
-
25
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9heGlzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXhlcywgeyBBeGlzUHJvcFR5cGVzIH0gZnJvbSAnLi9heGVzJztcbmV4cG9ydCB7IEF4ZXMsIEF4aXNQcm9wVHlwZXMgfTtcbiJdfQ==
package/lib/bg.js DELETED
@@ -1,139 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _d3Selection = require("d3-selection");
29
-
30
- var _plot = require("@pie-lib/plot");
31
-
32
- var _utils = require("./utils");
33
-
34
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
35
-
36
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
37
-
38
- var Bg = /*#__PURE__*/function (_React$Component) {
39
- (0, _inherits2["default"])(Bg, _React$Component);
40
-
41
- var _super = _createSuper(Bg);
42
-
43
- function Bg() {
44
- var _this;
45
-
46
- (0, _classCallCheck2["default"])(this, Bg);
47
-
48
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
49
- args[_key] = arguments[_key];
50
- }
51
-
52
- _this = _super.call.apply(_super, [this].concat(args));
53
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getRectPadding", function () {
54
- var graphProps = _this.props.graphProps;
55
- return (0, _utils.thinnerShapesNeeded)(graphProps) ? 6 : 10;
56
- });
57
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRectClick", function (rect) {
58
- var _this$props = _this.props,
59
- onClick = _this$props.onClick,
60
- graphProps = _this$props.graphProps;
61
- var scale = graphProps.scale;
62
-
63
- var padding = _this.getRectPadding();
64
-
65
- var coords = (0, _d3Selection.mouse)(rect._groups[0][0]); // decrease the padding from coordinates to indicate the correct point clicked
66
-
67
- var x = scale.x.invert(coords[0] - padding);
68
- var y = scale.y.invert(coords[1] - padding);
69
- var rowTicks = (0, _utils.getTickValues)(graphProps.range);
70
- var columnTicks = (0, _utils.getTickValues)(graphProps.domain);
71
-
72
- var closest = function closest(ticks, value) {
73
- return ticks.length && ticks.reduce(function (prev, curr) {
74
- var currentDistance = Math.abs(curr - value);
75
- var previousDistance = Math.abs(prev - value);
76
- return currentDistance <= previousDistance ? curr : prev;
77
- });
78
- };
79
-
80
- var snapped = {};
81
-
82
- if (columnTicks.indexOf(x) >= 0 && rowTicks.indexOf(y) >= 0) {
83
- snapped.x = x;
84
- snapped.y = y;
85
- } else {
86
- snapped.x = closest(columnTicks, x);
87
- snapped.y = closest(rowTicks, y);
88
- }
89
-
90
- onClick(snapped);
91
- });
92
- return _this;
93
- }
94
-
95
- (0, _createClass2["default"])(Bg, [{
96
- key: "componentDidMount",
97
- value: function componentDidMount() {
98
- var rect = (0, _d3Selection.select)(this.rect);
99
- rect.on('click', this.onRectClick.bind(this, rect));
100
- }
101
- }, {
102
- key: "shouldComponentUpdate",
103
- value: function shouldComponentUpdate(nextProps) {
104
- return !_plot.utils.isDomainRangeEqual(this.props.graphProps, nextProps.graphProps) || this.props.width !== nextProps.width || this.props.height !== nextProps.height;
105
- }
106
- }, {
107
- key: "render",
108
- value: function render() {
109
- var _this2 = this;
110
-
111
- var _this$props2 = this.props,
112
- width = _this$props2.width,
113
- height = _this$props2.height;
114
- var padding = this.getRectPadding(); // expand the size of clickable area so a small area outside the edges of the grid lines to be clickable
115
-
116
- return /*#__PURE__*/_react["default"].createElement("rect", {
117
- ref: function ref(rect) {
118
- return _this2.rect = rect;
119
- },
120
- transform: "translate(-".concat(padding, ", -").concat(padding, ")"),
121
- fill: "red",
122
- fillOpacity: "0.0",
123
- width: width + padding * 2,
124
- height: height + padding * 2
125
- });
126
- }
127
- }]);
128
- return Bg;
129
- }(_react["default"].Component);
130
-
131
- exports["default"] = Bg;
132
- (0, _defineProperty2["default"])(Bg, "propTypes", {
133
- width: _propTypes["default"].number.isRequired,
134
- height: _propTypes["default"].number.isRequired,
135
- onClick: _propTypes["default"].func.isRequired,
136
- graphProps: _plot.types.GraphPropsType.isRequired
137
- });
138
- (0, _defineProperty2["default"])(Bg, "defaultProps", {});
139
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iZy5qc3giXSwibmFtZXMiOlsiQmciLCJncmFwaFByb3BzIiwicHJvcHMiLCJyZWN0Iiwib25DbGljayIsInNjYWxlIiwicGFkZGluZyIsImdldFJlY3RQYWRkaW5nIiwiY29vcmRzIiwiX2dyb3VwcyIsIngiLCJpbnZlcnQiLCJ5Iiwicm93VGlja3MiLCJyYW5nZSIsImNvbHVtblRpY2tzIiwiZG9tYWluIiwiY2xvc2VzdCIsInRpY2tzIiwidmFsdWUiLCJsZW5ndGgiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsImN1cnJlbnREaXN0YW5jZSIsIk1hdGgiLCJhYnMiLCJwcmV2aW91c0Rpc3RhbmNlIiwic25hcHBlZCIsImluZGV4T2YiLCJvbiIsIm9uUmVjdENsaWNrIiwiYmluZCIsIm5leHRQcm9wcyIsInV0aWxzIiwiaXNEb21haW5SYW5nZUVxdWFsIiwid2lkdGgiLCJoZWlnaHQiLCJSZWFjdCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJmdW5jIiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0lBRXFCQSxFOzs7Ozs7Ozs7Ozs7Ozs7dUdBd0JGLFlBQU07QUFDckIsVUFBUUMsVUFBUixHQUF1QixNQUFLQyxLQUE1QixDQUFRRCxVQUFSO0FBRUEsYUFBTyxnQ0FBb0JBLFVBQXBCLElBQWtDLENBQWxDLEdBQXNDLEVBQTdDO0FBQ0QsSztvR0FNYSxVQUFDRSxJQUFELEVBQVU7QUFDdEIsd0JBQWdDLE1BQUtELEtBQXJDO0FBQUEsVUFBUUUsT0FBUixlQUFRQSxPQUFSO0FBQUEsVUFBaUJILFVBQWpCLGVBQWlCQSxVQUFqQjtBQUNBLFVBQVFJLEtBQVIsR0FBa0JKLFVBQWxCLENBQVFJLEtBQVI7O0FBRUEsVUFBTUMsT0FBTyxHQUFHLE1BQUtDLGNBQUwsRUFBaEI7O0FBQ0Es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QSxTQUFTLHVCQUFnQkcsT0FBaEIsZ0JBQTZCQSxPQUE3QixNQUZYO0FBR0UsUUFBQSxJQUFJLEVBQUMsS0FIUDtBQUlFLFFBQUEsV0FBVyxFQUFDLEtBSmQ7QUFLRSxRQUFBLEtBQUssRUFBRThCLEtBQUssR0FBRzlCLE9BQU8sR0FBRyxDQUwzQjtBQU1FLFFBQUEsTUFBTSxFQUFFK0IsTUFBTSxHQUFHL0IsT0FBTyxHQUFHO0FBTjdCLFFBREY7QUFVRDs7O0VBeEY2QmdDLGtCQUFNQyxTOzs7aUNBQWpCdkMsRSxlQUNBO0FBQ2pCb0MsRUFBQUEsS0FBSyxFQUFFSSxzQkFBVUMsTUFBVixDQUFpQkMsVUFEUDtBQUVqQkwsRUFBQUEsTUFBTSxFQUFFRyxzQkFBVUMsTUFBVixDQUFpQkMsVUFGUjtBQUdqQnRDLEVBQUFBLE9BQU8sRUFBRW9DLHNCQUFVRyxJQUFWLENBQWVELFVBSFA7QUFJakJ6QyxFQUFBQSxVQUFVLEVBQUUyQyxZQUFNQyxjQUFOLENBQXFCSDtBQUpoQixDO2lDQURBMUMsRSxrQkFRRyxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzZWxlY3QsIG1vdXNlIH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IHR5cGVzLCB1dGlscyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IHsgZ2V0VGlja1ZhbHVlcywgdGhpbm5lclNoYXBlc05lZWRlZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHt9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHJlY3QgPSBzZWxlY3QodGhpcy5yZWN0KTtcblxuICAgIHJlY3Qub24oJ2NsaWNrJywgdGhpcy5vblJlY3RDbGljay5iaW5kKHRoaXMsIHJlY3QpKTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXV0aWxzLmlzRG9tYWluUmFuZ2VFcXVhbCh0aGlzLnByb3BzLmdyYXBoUHJvcHMsIG5leHRQcm9wcy5ncmFwaFByb3BzKSB8fFxuICAgICAgdGhpcy5wcm9wcy53aWR0aCAhPT0gbmV4dFByb3BzLndpZHRoIHx8XG4gICAgICB0aGlzLnByb3BzLmhlaWdodCAhPT0gbmV4dFByb3BzLmhlaWdodFxuICAgICk7XG4gIH1cblxuICBnZXRSZWN0UGFkZGluZyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGdyYXBoUHJvcHMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gdGhpbm5lclNoYXBlc05lZWRlZChncmFwaFByb3BzKSA/IDYgOiAxMDtcbiAgfTtcblxuICAvKipcbiAgICogTm90ZTogd2UgdXNlIGQzIGNsaWNrICsgbW91c2UgdG8gZ2l2ZSB1cyBkb21haW4gdmFsdWVzIGRpcmVjdGx5LlxuICAgKiBTYXZlcyB1cyBoYXZpbmcgdG8gY2FsY3VsYXRlIHRoZW0gb3Vyc2VsdmVzIGZyb20gYSBNb3VzZUV2ZW50LlxuICAgKi9cbiAgb25SZWN0Q2xpY2sgPSAocmVjdCkgPT4ge1xuICAgIGNvbnN0IHsgb25DbGljaywgZ3JhcGhQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlIH0gPSBncmFwaFByb3BzO1xuXG4gICAgY29uc3QgcGFkZGluZyA9IHRoaXMuZ2V0UmVjdFBhZGRpbmcoKTtcbiAgICBjb25zdCBjb29yZHMgPSBtb3VzZShyZWN0Ll9ncm91cHNbMF1bMF0pO1xuXG4gICAgLy8gZGVjcmVhc2UgdGhlIHBhZGRpbmcgZnJvbSBjb29yZGluYXRlcyB0byBpbmRpY2F0ZSB0aGUgY29ycmVjdCBwb2ludCBjbGlja2VkXG4gICAgY29uc3QgeCA9IHNjYWxlLnguaW52ZXJ0KGNvb3Jkc1swXSAtIHBhZGRpbmcpO1xuICAgIGNvbnN0IHkgPSBzY2FsZS55LmludmVydChjb29yZHNbMV0gLSBwYWRkaW5nKTtcblxuICAgIGNvbnN0IHJvd1RpY2tzID0gZ2V0VGlja1ZhbHVlcyhncmFwaFByb3BzLnJhbmdlKTtcbiAgICBjb25zdCBjb2x1bW5UaWNrcyA9IGdldFRpY2tWYWx1ZXMoZ3JhcGhQcm9wcy5kb21haW4pO1xuXG4gICAgY29uc3QgY2xvc2VzdCA9ICh0aWNrcywgdmFsdWUpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRpY2tzLmxlbmd0aCAmJlxuICAgICAgICB0aWNrcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSBNYXRoLmFicyhjdXJyIC0gdmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGlzdGFuY2UgPSBNYXRoLmFicyhwcmV2IC0gdmFsdWUpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnREaXN0YW5jZSA8PSBwcmV2aW91c0Rpc3RhbmNlID8gY3VyciA6IHByZXY7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICBsZXQgc25hcHBlZCA9IHt9O1xuXG4gICAgaWYgKGNvbHVtblRpY2tzLmluZGV4T2YoeCkgPj0gMCAmJiByb3dUaWNrcy5pbmRleE9mKHkpID49IDApIHtcbiAgICAgIHNuYXBwZWQueCA9IHg7XG4gICAgICBzbmFwcGVkLnkgPSB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFwcGVkLnggPSBjbG9zZXN0KGNvbHVtblRpY2tzLCB4KTtcbiAgICAgIHNuYXBwZWQueSA9IGNsb3Nlc3Qocm93VGlja3MsIHkpO1xuICAgIH1cblxuICAgIG9uQ2xpY2soc25hcHBlZCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5nZXRSZWN0UGFkZGluZygpO1xuXG4gICAgLy8gZXhwYW5kIHRoZSBzaXplIG9mIGNsaWNrYWJsZSBhcmVhIHNvIGEgc21hbGwgYXJlYSBvdXRzaWRlIHRoZSBlZGdlcyBvZiB0aGUgZ3JpZCBsaW5lcyB0byBiZSBjbGlja2FibGVcbiAgICByZXR1cm4gKFxuICAgICAgPHJlY3RcbiAgICAgICAgcmVmPXsocmVjdCkgPT4gKHRoaXMucmVjdCA9IHJlY3QpfVxuICAgICAgICB0cmFuc2Zvcm09e2B0cmFuc2xhdGUoLSR7cGFkZGluZ30sIC0ke3BhZGRpbmd9KWB9XG4gICAgICAgIGZpbGw9XCJyZWRcIlxuICAgICAgICBmaWxsT3BhY2l0eT1cIjAuMFwiXG4gICAgICAgIHdpZHRoPXt3aWR0aCArIHBhZGRpbmcgKiAyfVxuICAgICAgICBoZWlnaHQ9e2hlaWdodCArIHBhZGRpbmcgKiAyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iXX0=