@pie-lib/graphing 2.34.3-next.2 → 2.34.4-next.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 (252) hide show
  1. package/CHANGELOG.md +6 -76
  2. package/lib/__tests__/graph-with-controls.test.js +226 -0
  3. package/lib/__tests__/graph.test.js +187 -0
  4. package/lib/__tests__/grid.test.js +29 -0
  5. package/lib/__tests__/labels.test.js +61 -0
  6. package/lib/__tests__/mark-label.test.js +133 -0
  7. package/lib/__tests__/toggle-bar.test.js +150 -0
  8. package/lib/__tests__/tool-menu.test.js +101 -0
  9. package/lib/__tests__/undo-redo.test.js +31 -0
  10. package/lib/__tests__/use-debounce.test.js +24 -0
  11. package/lib/__tests__/utils.js +70 -0
  12. package/lib/__tests__/utils.test.js +123 -0
  13. package/lib/axis/__tests__/arrow.test.js +60 -0
  14. package/lib/axis/__tests__/axes.test.js +195 -0
  15. package/lib/axis/arrow.js +20 -56
  16. package/lib/axis/arrow.js.map +1 -1
  17. package/lib/axis/axes.js +107 -195
  18. package/lib/axis/axes.js.map +1 -1
  19. package/lib/axis/index.js +2 -7
  20. package/lib/axis/index.js.map +1 -1
  21. package/lib/bg.js +22 -50
  22. package/lib/bg.js.map +1 -1
  23. package/lib/container/actions.js +3 -9
  24. package/lib/container/actions.js.map +1 -1
  25. package/lib/container/index.js +15 -60
  26. package/lib/container/index.js.map +1 -1
  27. package/lib/container/marks.js +2 -7
  28. package/lib/container/marks.js.map +1 -1
  29. package/lib/container/middleware.js +3 -9
  30. package/lib/container/middleware.js.map +1 -1
  31. package/lib/container/reducer.js +2 -9
  32. package/lib/container/reducer.js.map +1 -1
  33. package/lib/coordinates-label.js +25 -55
  34. package/lib/coordinates-label.js.map +1 -1
  35. package/lib/graph-with-controls.js +121 -185
  36. package/lib/graph-with-controls.js.map +1 -1
  37. package/lib/graph.js +60 -117
  38. package/lib/graph.js.map +1 -1
  39. package/lib/grid-setup.js +169 -225
  40. package/lib/grid-setup.js.map +1 -1
  41. package/lib/grid.js +30 -75
  42. package/lib/grid.js.map +1 -1
  43. package/lib/index.js +2 -14
  44. package/lib/index.js.map +1 -1
  45. package/lib/key-legend.js +41 -86
  46. package/lib/key-legend.js.map +1 -1
  47. package/lib/label-svg-icon.js +2 -8
  48. package/lib/label-svg-icon.js.map +1 -1
  49. package/lib/labels.js +66 -122
  50. package/lib/labels.js.map +1 -1
  51. package/lib/mark-label.js +121 -164
  52. package/lib/mark-label.js.map +1 -1
  53. package/lib/toggle-bar.js +156 -244
  54. package/lib/toggle-bar.js.map +1 -1
  55. package/lib/tool-menu.js +17 -51
  56. package/lib/tool-menu.js.map +1 -1
  57. package/lib/tools/absolute/__tests__/component.test.js +67 -0
  58. package/lib/tools/absolute/component.js +5 -11
  59. package/lib/tools/absolute/component.js.map +1 -1
  60. package/lib/tools/absolute/index.js +4 -17
  61. package/lib/tools/absolute/index.js.map +1 -1
  62. package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
  63. package/lib/tools/circle/__tests__/component.test.js +68 -0
  64. package/lib/tools/circle/bg-circle.js +43 -93
  65. package/lib/tools/circle/bg-circle.js.map +1 -1
  66. package/lib/tools/circle/component.js +79 -166
  67. package/lib/tools/circle/component.js.map +1 -1
  68. package/lib/tools/circle/index.js +4 -14
  69. package/lib/tools/circle/index.js.map +1 -1
  70. package/lib/tools/exponential/__tests__/component.test.js +66 -0
  71. package/lib/tools/exponential/component.js +5 -11
  72. package/lib/tools/exponential/component.js.map +1 -1
  73. package/lib/tools/exponential/index.js +4 -19
  74. package/lib/tools/exponential/index.js.map +1 -1
  75. package/lib/tools/index.js +4 -17
  76. package/lib/tools/index.js.map +1 -1
  77. package/lib/tools/line/__tests__/component.test.js +45 -0
  78. package/lib/tools/line/component.js +28 -49
  79. package/lib/tools/line/component.js.map +1 -1
  80. package/lib/tools/line/index.js +2 -7
  81. package/lib/tools/line/index.js.map +1 -1
  82. package/lib/tools/parabola/__tests__/component.test.js +66 -0
  83. package/lib/tools/parabola/component.js +5 -11
  84. package/lib/tools/parabola/component.js.map +1 -1
  85. package/lib/tools/parabola/index.js +4 -17
  86. package/lib/tools/parabola/index.js.map +1 -1
  87. package/lib/tools/point/__tests__/component.test.js +50 -0
  88. package/lib/tools/point/component.js +25 -72
  89. package/lib/tools/point/component.js.map +1 -1
  90. package/lib/tools/point/index.js +4 -12
  91. package/lib/tools/point/index.js.map +1 -1
  92. package/lib/tools/polygon/__tests__/component.test.js +85 -0
  93. package/lib/tools/polygon/__tests__/index.test.js +92 -0
  94. package/lib/tools/polygon/__tests__/line.test.js +29 -0
  95. package/lib/tools/polygon/__tests__/polygon.test.js +59 -0
  96. package/lib/tools/polygon/component.js +84 -185
  97. package/lib/tools/polygon/component.js.map +1 -1
  98. package/lib/tools/polygon/index.js +7 -24
  99. package/lib/tools/polygon/index.js.map +1 -1
  100. package/lib/tools/polygon/line.js +49 -92
  101. package/lib/tools/polygon/line.js.map +1 -1
  102. package/lib/tools/polygon/polygon.js +66 -99
  103. package/lib/tools/polygon/polygon.js.map +1 -1
  104. package/lib/tools/ray/__tests__/component.test.js +35 -0
  105. package/lib/tools/ray/component.js +42 -61
  106. package/lib/tools/ray/component.js.map +1 -1
  107. package/lib/tools/ray/index.js +2 -7
  108. package/lib/tools/ray/index.js.map +1 -1
  109. package/lib/tools/segment/__tests__/component.test.js +35 -0
  110. package/lib/tools/segment/component.js +26 -44
  111. package/lib/tools/segment/component.js.map +1 -1
  112. package/lib/tools/segment/index.js +2 -7
  113. package/lib/tools/segment/index.js.map +1 -1
  114. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  115. package/lib/tools/shared/arrow-head.js +70 -29
  116. package/lib/tools/shared/arrow-head.js.map +1 -1
  117. package/lib/tools/shared/icons/CorrectSVG.js +13 -9
  118. package/lib/tools/shared/icons/CorrectSVG.js.map +1 -1
  119. package/lib/tools/shared/icons/IncorrectSVG.js +13 -9
  120. package/lib/tools/shared/icons/IncorrectSVG.js.map +1 -1
  121. package/lib/tools/shared/icons/MissingSVG.js +13 -9
  122. package/lib/tools/shared/icons/MissingSVG.js.map +1 -1
  123. package/lib/tools/shared/line/__tests__/index.test.js +124 -0
  124. package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
  125. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +91 -0
  126. package/lib/tools/shared/line/index.js +141 -194
  127. package/lib/tools/shared/line/index.js.map +1 -1
  128. package/lib/tools/shared/line/line-path.js +71 -102
  129. package/lib/tools/shared/line/line-path.js.map +1 -1
  130. package/lib/tools/shared/line/with-root-edge.js +23 -57
  131. package/lib/tools/shared/line/with-root-edge.js.map +1 -1
  132. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  133. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  134. package/lib/tools/shared/point/arrow-point.js +22 -63
  135. package/lib/tools/shared/point/arrow-point.js.map +1 -1
  136. package/lib/tools/shared/point/arrow.js +24 -53
  137. package/lib/tools/shared/point/arrow.js.map +1 -1
  138. package/lib/tools/shared/point/base-point.js +55 -73
  139. package/lib/tools/shared/point/base-point.js.map +1 -1
  140. package/lib/tools/shared/point/index.js +23 -58
  141. package/lib/tools/shared/point/index.js.map +1 -1
  142. package/lib/tools/shared/styles.js +11 -39
  143. package/lib/tools/shared/styles.js.map +1 -1
  144. package/lib/tools/shared/types.js +3 -10
  145. package/lib/tools/shared/types.js.map +1 -1
  146. package/lib/tools/sine/__tests__/component.test.js +72 -0
  147. package/lib/tools/sine/component.js +9 -20
  148. package/lib/tools/sine/component.js.map +1 -1
  149. package/lib/tools/sine/index.js +4 -17
  150. package/lib/tools/sine/index.js.map +1 -1
  151. package/lib/tools/vector/__tests__/component.test.js +32 -0
  152. package/lib/tools/vector/component.js +25 -45
  153. package/lib/tools/vector/component.js.map +1 -1
  154. package/lib/tools/vector/index.js +2 -7
  155. package/lib/tools/vector/index.js.map +1 -1
  156. package/lib/undo-redo.js +30 -70
  157. package/lib/undo-redo.js.map +1 -1
  158. package/lib/use-debounce.js +5 -12
  159. package/lib/use-debounce.js.map +1 -1
  160. package/lib/utils.js +52 -129
  161. package/lib/utils.js.map +1 -1
  162. package/package.json +25 -29
  163. package/src/__tests__/graph-with-controls.test.jsx +28 -11
  164. package/src/__tests__/graph.test.jsx +104 -168
  165. package/src/__tests__/grid.test.jsx +8 -6
  166. package/src/__tests__/labels.test.jsx +25 -8
  167. package/src/__tests__/mark-label.test.jsx +12 -17
  168. package/src/__tests__/toggle-bar.test.jsx +92 -17
  169. package/src/__tests__/tool-menu.test.jsx +61 -12
  170. package/src/__tests__/undo-redo.test.jsx +7 -8
  171. package/src/__tests__/utils.js +3 -0
  172. package/src/axis/__tests__/arrow.test.jsx +16 -17
  173. package/src/axis/__tests__/axes.test.jsx +118 -122
  174. package/src/axis/arrow.jsx +7 -12
  175. package/src/axis/axes.jsx +45 -55
  176. package/src/coordinates-label.jsx +14 -18
  177. package/src/graph-with-controls.jsx +52 -59
  178. package/src/grid-setup.jsx +210 -206
  179. package/src/grid.jsx +2 -4
  180. package/src/key-legend.jsx +52 -56
  181. package/src/labels.jsx +23 -30
  182. package/src/mark-label.jsx +92 -81
  183. package/src/toggle-bar.jsx +135 -164
  184. package/src/tool-menu.jsx +1 -1
  185. package/src/tools/circle/__tests__/bg-circle.test.jsx +7 -9
  186. package/src/tools/circle/__tests__/component.test.jsx +17 -189
  187. package/src/tools/circle/bg-circle.jsx +20 -28
  188. package/src/tools/circle/component.jsx +28 -63
  189. package/src/tools/line/__tests__/component.test.jsx +7 -7
  190. package/src/tools/line/component.jsx +22 -15
  191. package/src/tools/point/__tests__/component.test.jsx +18 -43
  192. package/src/tools/point/component.jsx +1 -1
  193. package/src/tools/polygon/__tests__/component.test.jsx +18 -162
  194. package/src/tools/polygon/__tests__/line.test.jsx +7 -10
  195. package/src/tools/polygon/__tests__/polygon.test.jsx +7 -8
  196. package/src/tools/polygon/component.jsx +3 -4
  197. package/src/tools/polygon/line.jsx +30 -33
  198. package/src/tools/polygon/polygon.jsx +52 -45
  199. package/src/tools/ray/__tests__/component.test.jsx +7 -8
  200. package/src/tools/ray/component.jsx +38 -25
  201. package/src/tools/segment/__tests__/component.test.jsx +7 -8
  202. package/src/tools/segment/component.jsx +19 -18
  203. package/src/tools/shared/__tests__/arrow-head.test.jsx +14 -17
  204. package/src/tools/shared/arrow-head.jsx +60 -7
  205. package/src/tools/shared/icons/CorrectSVG.jsx +10 -0
  206. package/src/tools/shared/icons/IncorrectSVG.jsx +10 -0
  207. package/src/tools/shared/icons/MissingSVG.jsx +10 -0
  208. package/src/tools/shared/line/__tests__/index.test.jsx +19 -165
  209. package/src/tools/shared/line/__tests__/line-path.test.jsx +8 -8
  210. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +22 -22
  211. package/src/tools/shared/line/index.jsx +52 -7
  212. package/src/tools/shared/line/line-path.jsx +55 -59
  213. package/src/tools/shared/line/with-root-edge.jsx +1 -1
  214. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +15 -11
  215. package/src/tools/shared/point/__tests__/base-point.test.jsx +14 -11
  216. package/src/tools/shared/point/arrow-point.jsx +10 -24
  217. package/src/tools/shared/point/arrow.jsx +5 -11
  218. package/src/tools/shared/point/base-point.jsx +42 -19
  219. package/src/tools/shared/point/index.jsx +27 -44
  220. package/src/tools/vector/__tests__/component.test.jsx +7 -8
  221. package/src/tools/vector/component.jsx +11 -16
  222. package/src/undo-redo.jsx +19 -21
  223. package/esm/index.css +0 -847
  224. package/esm/index.js +0 -239949
  225. package/esm/index.js.map +0 -1
  226. package/esm/package.json +0 -3
  227. package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +0 -237
  228. package/src/__tests__/__snapshots__/graph.test.jsx.snap +0 -211
  229. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -54
  230. package/src/__tests__/__snapshots__/labels.test.jsx.snap +0 -30
  231. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -45
  232. package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +0 -7
  233. package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +0 -13
  234. package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +0 -14
  235. package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +0 -33
  236. package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +0 -122
  237. package/src/tools/circle/__tests__/__snapshots__/bg-circle.test.jsx.snap +0 -46
  238. package/src/tools/circle/__tests__/__snapshots__/component.test.jsx.snap +0 -293
  239. package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +0 -20
  240. package/src/tools/point/__tests__/__snapshots__/component.test.jsx.snap +0 -40
  241. package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +0 -415
  242. package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +0 -45
  243. package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +0 -52
  244. package/src/tools/ray/__tests__/__snapshots__/component.test.jsx.snap +0 -23
  245. package/src/tools/segment/__tests__/__snapshots__/component.test.jsx.snap +0 -14
  246. package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +0 -27
  247. package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +0 -360
  248. package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +0 -58
  249. package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +0 -63
  250. package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +0 -56
  251. package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +0 -44
  252. package/src/tools/vector/__tests__/__snapshots__/component.test.jsx.snap +0 -12
package/lib/axis/axes.js CHANGED
@@ -1,59 +1,33 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.sharedValues = exports.firstNegativeValue = exports["default"] = exports.RawYAxis = exports.RawXAxis = exports.AxisPropTypes = void 0;
9
-
10
8
  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
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
26
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
15
  var _react = _interopRequireDefault(require("react"));
29
-
30
- var _axis = require("@vx/axis");
31
-
16
+ var _axis = require("@visx/axis");
32
17
  var _plot = require("@pie-lib/plot");
33
-
34
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
35
-
36
19
  var _arrow = _interopRequireDefault(require("./arrow"));
37
-
38
- var _core = require("@material-ui/core");
39
-
20
+ var _styles = require("@mui/material/styles");
40
21
  var _utils = require("../utils");
41
-
42
22
  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 = {
23
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
26
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
27
+ var AxisPropTypes = exports.AxisPropTypes = {
53
28
  includeArrows: _propTypes["default"].object,
54
29
  graphProps: _propTypes["default"].object
55
30
  };
56
- exports.AxisPropTypes = AxisPropTypes;
57
31
  var AxisDefaultProps = {
58
32
  includeArrows: {
59
33
  left: true,
@@ -62,191 +36,157 @@ var AxisDefaultProps = {
62
36
  down: true
63
37
  }
64
38
  };
65
-
66
- var axisStyles = function axisStyles(theme) {
39
+ var StyledArrow = (0, _styles.styled)(_arrow["default"])(function () {
67
40
  return {
68
- line: {
41
+ fill: _renderUi.color.defaults.PRIMARY
42
+ };
43
+ });
44
+ var StyledLabel = (0, _styles.styled)('div')(function (_ref) {
45
+ var theme = _ref.theme;
46
+ return {
47
+ fontSize: theme.typography.fontSize
48
+ };
49
+ });
50
+ var StyledAxisLabelHolder = (0, _styles.styled)('div')(function (_ref2) {
51
+ var theme = _ref2.theme;
52
+ return {
53
+ padding: 0,
54
+ margin: 0,
55
+ textAlign: 'center',
56
+ '* > *': {
57
+ margin: 0,
58
+ padding: 0
59
+ },
60
+ fontSize: theme.typography.fontSize
61
+ };
62
+ });
63
+ var StyledAxesGroup = (0, _styles.styled)('g')(function () {
64
+ return {
65
+ '& .visx-axis-line': {
69
66
  stroke: _renderUi.color.defaults.PRIMARY,
70
67
  strokeWidth: 3
71
68
  },
72
- arrow: {
73
- fill: _renderUi.color.defaults.PRIMARY
74
- },
75
- tick: {
69
+ '& .visx-axis-tick': {
76
70
  fill: _renderUi.color.defaults.PRIMARY,
77
- '& > line': {
71
+ '& line': {
78
72
  stroke: _renderUi.color.defaults.PRIMARY
79
73
  }
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
74
  }
94
75
  };
95
- };
96
-
76
+ });
97
77
  var tickLabelStyles = {
98
78
  fontFamily: 'Roboto',
99
79
  fontSize: '14px',
100
80
  cursor: 'inherit'
101
81
  };
102
-
103
- var sharedValues = function sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy) {
82
+ var sharedValues = exports.sharedValues = function sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy) {
104
83
  var result = [];
105
-
106
84
  if (firstNegativeX === firstNegativeY && distanceFromOriginToFirstNegativeX - deltaAllowance < distanceFromOriginToFirstNegativeY && distanceFromOriginToFirstNegativeY < distanceFromOriginToFirstNegativeX + deltaAllowance && distanceFromOriginToFirstNegativeX - deltaAllowance < dy && dy < distanceFromOriginToFirstNegativeX + deltaAllowance) {
107
85
  result.push(firstNegativeX);
108
86
  }
109
-
110
87
  return result;
111
88
  };
112
-
113
- exports.sharedValues = sharedValues;
114
-
115
- var firstNegativeValue = function firstNegativeValue(interval) {
89
+ var firstNegativeValue = exports.firstNegativeValue = function firstNegativeValue(interval) {
116
90
  return (interval || []).find(function (element) {
117
91
  return element < 0;
118
92
  });
119
93
  };
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
-
94
+ var RawXAxis = exports.RawXAxis = /*#__PURE__*/function (_React$Component) {
128
95
  function RawXAxis() {
129
96
  (0, _classCallCheck2["default"])(this, RawXAxis);
130
- return _super.apply(this, arguments);
97
+ return _callSuper(this, RawXAxis, arguments);
131
98
  }
132
-
133
- (0, _createClass2["default"])(RawXAxis, [{
99
+ (0, _inherits2["default"])(RawXAxis, _React$Component);
100
+ return (0, _createClass2["default"])(RawXAxis, [{
134
101
  key: "render",
135
102
  value: function render() {
136
103
  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
-
104
+ includeArrows = _this$props.includeArrows,
105
+ graphProps = _this$props.graphProps,
106
+ columnTicksValues = _this$props.columnTicksValues,
107
+ skipValues = _this$props.skipValues,
108
+ distanceFromOriginToFirstNegativeY = _this$props.distanceFromOriginToFirstNegativeY,
109
+ dy = _this$props.dy;
110
+ var _ref3 = graphProps || {},
111
+ scale = _ref3.scale,
112
+ domain = _ref3.domain,
113
+ size = _ref3.size,
114
+ range = _ref3.range;
155
115
  var labelProps = function labelProps(label) {
156
116
  var y = skipValues && skipValues[0] === label ? distanceFromOriginToFirstNegativeY + 4 : dy;
157
117
  return _objectSpread(_objectSpread({}, tickLabelStyles), {}, {
158
118
  textAnchor: 'middle',
159
119
  y: y,
160
- dx: label === '0' ? -10 : 0,
161
- dy: label === '0' ? -7 : 0
120
+ dx: label === 0 ? -10 : 0,
121
+ dy: label === 0 ? -7 : 0
162
122
  });
163
123
  };
164
-
165
124
  var necessaryRows = (0, _utils.countWords)(domain.axisLabel);
166
125
  var longestWord = (0, _utils.findLongestWord)(domain.axisLabel);
167
126
  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,
127
+ return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
170
128
  scale: scale.x,
171
129
  top: scale.y(0),
172
130
  left: 0,
173
131
  label: domain.label,
174
132
  rangePadding: 8,
175
- tickClassName: classes.tick,
176
133
  tickFormat: function tickFormat(value) {
177
134
  return value;
178
135
  },
179
136
  tickLabelProps: labelProps,
180
- tickValues: tickValues
181
- }), includeArrows && includeArrows.left && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
137
+ tickValues: columnTicksValues,
138
+ hideZero: !(domain.labelStep || range.labelStep) && domain.min <= 0
139
+ }), includeArrows && includeArrows.left && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
182
140
  direction: "left",
183
141
  x: domain.min,
184
142
  y: 0,
185
- className: classes.arrow,
186
143
  scale: scale
187
- }), includeArrows && includeArrows.right && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
144
+ }), includeArrows && includeArrows.right && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
188
145
  direction: "right",
189
146
  x: domain.max,
190
147
  y: 0,
191
- className: classes.arrow,
192
148
  scale: scale
193
149
  }), domain.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
194
150
  x: size.width + 17,
195
151
  y: scale.y(0) - 9,
196
152
  width: necessaryWidth,
197
153
  height: 20 * necessaryRows
198
- }, /*#__PURE__*/_react["default"].createElement("div", {
154
+ }, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
199
155
  dangerouslySetInnerHTML: {
200
156
  __html: domain.axisLabel
201
- },
202
- className: classes.labelFontSize
157
+ }
203
158
  })));
204
159
  }
205
160
  }]);
206
- return RawXAxis;
207
161
  }(_react["default"].Component);
208
-
209
- exports.RawXAxis = RawXAxis;
210
162
  (0, _defineProperty2["default"])(RawXAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
211
- classes: _propTypes["default"].object,
212
163
  graphProps: _plot.types.GraphPropsType.isRequired
213
164
  }));
214
165
  (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
-
166
+ var XAxis = RawXAxis;
167
+ var RawYAxis = exports.RawYAxis = /*#__PURE__*/function (_React$Component2) {
222
168
  function RawYAxis() {
223
169
  (0, _classCallCheck2["default"])(this, RawYAxis);
224
- return _super2.apply(this, arguments);
170
+ return _callSuper(this, RawYAxis, arguments);
225
171
  }
226
-
227
- (0, _createClass2["default"])(RawYAxis, [{
172
+ (0, _inherits2["default"])(RawYAxis, _React$Component2);
173
+ return (0, _createClass2["default"])(RawYAxis, [{
228
174
  key: "render",
229
175
  value: function render() {
230
176
  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
-
177
+ includeArrows = _this$props2.includeArrows,
178
+ graphProps = _this$props2.graphProps,
179
+ skipValues = _this$props2.skipValues,
180
+ rowTickValues = _this$props2.rowTickValues;
181
+ var _ref4 = graphProps || {},
182
+ scale = _ref4.scale,
183
+ range = _ref4.range,
184
+ size = _ref4.size;
242
185
  var necessaryWidth = range.axisLabel ? (0, _utils.amountToIncreaseWidth)(range.axisLabel.length) : 0;
243
-
244
186
  var customTickFormat = function customTickFormat(value) {
245
187
  return skipValues && skipValues.indexOf(value) >= 0 ? '' : value;
246
188
  };
247
-
248
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
249
- axisLineClassName: classes.line,
189
+ return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
250
190
  orientation: 'left',
251
191
  scale: scale.y,
252
192
  top: 0,
@@ -258,7 +198,6 @@ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
258
198
  },
259
199
  rangePadding: 8,
260
200
  tickLength: 10,
261
- tickClassName: classes.tick,
262
201
  tickFormat: customTickFormat,
263
202
  tickLabelProps: function tickLabelProps(value) {
264
203
  var digits = value.toLocaleString().replace(/[.-]/g, '').length || 1;
@@ -271,17 +210,15 @@ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
271
210
  hideZero: true,
272
211
  tickTextAnchor: 'bottom',
273
212
  tickValues: rowTickValues
274
- }), includeArrows && includeArrows.down && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
213
+ }), includeArrows && includeArrows.down && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
275
214
  direction: "down",
276
215
  x: 0,
277
216
  y: range.min,
278
- className: classes.arrow,
279
217
  scale: scale
280
- }), includeArrows && includeArrows.up && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
218
+ }), includeArrows && includeArrows.up && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
281
219
  direction: "up",
282
220
  x: 0,
283
221
  y: range.max,
284
- className: classes.arrow,
285
222
  scale: scale
286
223
  }), range.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
287
224
  x: scale.x(0) - necessaryWidth / 2,
@@ -290,50 +227,35 @@ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
290
227
  height: "20"
291
228
  }, /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
292
229
  "false": true
293
- }, /*#__PURE__*/_react["default"].createElement("div", {
230
+ }, /*#__PURE__*/_react["default"].createElement(StyledAxisLabelHolder, {
294
231
  dangerouslySetInnerHTML: {
295
232
  __html: range.axisLabel
296
- },
297
- className: classes.axisLabelHolder
233
+ }
298
234
  }))));
299
235
  }
300
236
  }]);
301
- return RawYAxis;
302
237
  }(_react["default"].Component);
303
-
304
- exports.RawYAxis = RawYAxis;
305
238
  (0, _defineProperty2["default"])(RawYAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
306
239
  graphProps: _plot.types.GraphPropsType.isRequired
307
240
  }));
308
241
  (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
-
242
+ var YAxis = RawYAxis;
243
+ var Axes = exports["default"] = /*#__PURE__*/function (_React$Component3) {
316
244
  function Axes() {
317
245
  var _this;
318
-
319
246
  (0, _classCallCheck2["default"])(this, Axes);
320
-
321
247
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
322
248
  args[_key] = arguments[_key];
323
249
  }
324
-
325
- _this = _super3.call.apply(_super3, [this].concat(args));
326
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "xValues", function () {
250
+ _this = _callSuper(this, Axes, [].concat(args));
251
+ (0, _defineProperty2["default"])(_this, "xValues", function () {
327
252
  var graphProps = _this.props.graphProps;
328
-
329
- var _ref3 = graphProps || {},
330
- scale = _ref3.scale,
331
- domain = _ref3.domain;
332
-
253
+ var _ref5 = graphProps || {},
254
+ scale = _ref5.scale,
255
+ domain = _ref5.domain;
333
256
  if (!domain || !scale) {
334
257
  return;
335
258
  }
336
-
337
259
  var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, domain), {}, {
338
260
  step: domain.labelStep
339
261
  }));
@@ -344,17 +266,14 @@ var Axes = /*#__PURE__*/function (_React$Component3) {
344
266
  distanceFromOriginToFirstNegativeX: Math.abs(scale.y(0) - scale.y(negative))
345
267
  };
346
268
  });
347
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "yValues", function () {
269
+ (0, _defineProperty2["default"])(_this, "yValues", function () {
348
270
  var graphProps = _this.props.graphProps;
349
-
350
- var _ref4 = graphProps || {},
351
- scale = _ref4.scale,
352
- range = _ref4.range;
353
-
271
+ var _ref6 = graphProps || {},
272
+ scale = _ref6.scale,
273
+ range = _ref6.range;
354
274
  if (!range || !scale) {
355
275
  return;
356
276
  }
357
-
358
277
  var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, range), {}, {
359
278
  step: range.labelStep
360
279
  }));
@@ -367,31 +286,28 @@ var Axes = /*#__PURE__*/function (_React$Component3) {
367
286
  });
368
287
  return _this;
369
288
  }
370
-
371
- (0, _createClass2["default"])(Axes, [{
289
+ (0, _inherits2["default"])(Axes, _React$Component3);
290
+ return (0, _createClass2["default"])(Axes, [{
372
291
  key: "render",
373
292
  value: function render() {
374
293
  var graphProps = this.props.graphProps;
375
-
376
- var _ref5 = graphProps || {},
377
- domain = _ref5.domain,
378
- range = _ref5.range;
379
-
294
+ var _ref7 = graphProps || {},
295
+ domain = _ref7.domain,
296
+ range = _ref7.range;
380
297
  var _this$xValues = this.xValues(),
381
- columnTicksValues = _this$xValues.columnTicksValues,
382
- firstNegativeX = _this$xValues.firstNegativeX,
383
- distanceFromOriginToFirstNegativeX = _this$xValues.distanceFromOriginToFirstNegativeX;
384
-
298
+ columnTicksValues = _this$xValues.columnTicksValues,
299
+ firstNegativeX = _this$xValues.firstNegativeX,
300
+ distanceFromOriginToFirstNegativeX = _this$xValues.distanceFromOriginToFirstNegativeX;
385
301
  var _this$yValues = this.yValues(),
386
- rowTickValues = _this$yValues.rowTickValues,
387
- firstNegativeY = _this$yValues.firstNegativeY,
388
- distanceFromOriginToFirstNegativeY = _this$yValues.distanceFromOriginToFirstNegativeY;
389
-
302
+ rowTickValues = _this$yValues.rowTickValues,
303
+ firstNegativeY = _this$yValues.firstNegativeY,
304
+ distanceFromOriginToFirstNegativeY = _this$yValues.distanceFromOriginToFirstNegativeY;
390
305
  var deltaAllowance = 6;
391
306
  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
307
+ var skipValues = sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy);
393
308
 
394
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, range.min <= 0 ? /*#__PURE__*/_react["default"].createElement(XAxis, (0, _extends2["default"])({}, this.props, {
309
+ // each axis has to be displayed only if the domain & range include it
310
+ return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, range.min <= 0 ? /*#__PURE__*/_react["default"].createElement(XAxis, (0, _extends2["default"])({}, this.props, {
395
311
  skipValues: skipValues,
396
312
  columnTicksValues: columnTicksValues,
397
313
  distanceFromOriginToFirstNegativeY: distanceFromOriginToFirstNegativeY,
@@ -403,13 +319,9 @@ var Axes = /*#__PURE__*/function (_React$Component3) {
403
319
  })) : null);
404
320
  }
405
321
  }]);
406
- return Axes;
407
322
  }(_react["default"].Component);
408
-
409
- exports["default"] = Axes;
410
323
  (0, _defineProperty2["default"])(Axes, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
411
- classes: _propTypes["default"].object,
412
324
  graphProps: _plot.types.GraphPropsType.isRequired
413
325
  }));
414
326
  (0, _defineProperty2["default"])(Axes, "defaultProps", AxisDefaultProps);
415
- //# sourceMappingURL=axes.js.map
327
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9heGlzIiwiX3Bsb3QiLCJfcHJvcFR5cGVzIiwiX2Fycm93IiwiX3N0eWxlcyIsIl91dGlscyIsIl9yZW5kZXJVaSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiQXhpc1Byb3BUeXBlcyIsImV4cG9ydHMiLCJpbmNsdWRlQXJyb3dzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiZ3JhcGhQcm9wcyIsIkF4aXNEZWZhdWx0UHJvcHMiLCJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iLCJTdHlsZWRBcnJvdyIsInN0eWxlZCIsIkFycm93IiwiZmlsbCIsImNvbG9yIiwiZGVmYXVsdHMiLCJQUklNQVJZIiwiU3R5bGVkTGFiZWwiLCJfcmVmIiwidGhlbWUiLCJmb250U2l6ZSIsInR5cG9ncmFwaHkiLCJTdHlsZWRBeGlzTGFiZWxIb2xkZXIiLCJfcmVmMiIsInBhZGRpbmciLCJtYXJnaW4iLCJ0ZXh0QWxpZ24iLCJTdHlsZWRBeGVzR3JvdXAiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInRpY2tMYWJlbFN0eWxlcyIsImZvbnRGYW1pbHkiLCJjdXJzb3IiLCJzaGFyZWRWYWx1ZXMiLCJmaXJzdE5lZ2F0aXZlWCIsImZpcnN0TmVnYXRpdmVZIiwiZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCIsImRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkiLCJkZWx0YUFsbG93YW5jZSIsImR5IiwicmVzdWx0IiwiZmlyc3ROZWdhdGl2ZVZhbHVlIiwiaW50ZXJ2YWwiLCJmaW5kIiwiZWxlbWVudCIsIlJhd1hBeGlzIiwiX1JlYWN0JENvbXBvbmVudCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsImNvbHVtblRpY2tzVmFsdWVzIiwic2tpcFZhbHVlcyIsIl9yZWYzIiwic2NhbGUiLCJkb21haW4iLCJzaXplIiwicmFuZ2UiLCJsYWJlbFByb3BzIiwibGFiZWwiLCJ5IiwidGV4dEFuY2hvciIsImR4IiwibmVjZXNzYXJ5Um93cyIsImNvdW50V29yZHMiLCJheGlzTGFiZWwiLCJsb25nZXN0V29yZCIsImZpbmRMb25nZXN0V29yZCIsIm5lY2Vzc2FyeVdpZHRoIiwiYW1vdW50VG9JbmNyZWFzZVdpZHRoIiwiY3JlYXRlRWxlbWVudCIsIkF4aXMiLCJ4IiwidG9wIiwicmFuZ2VQYWRkaW5nIiwidGlja0Zvcm1hdCIsInRpY2tMYWJlbFByb3BzIiwidGlja1ZhbHVlcyIsImhpZGVaZXJvIiwibGFiZWxTdGVwIiwibWluIiwiZGlyZWN0aW9uIiwibWF4Iiwid2lkdGgiLCJoZWlnaHQiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIlJlYWN0IiwiQ29tcG9uZW50IiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSIsImlzUmVxdWlyZWQiLCJYQXhpcyIsIlJhd1lBeGlzIiwiX1JlYWN0JENvbXBvbmVudDIiLCJfdGhpcyRwcm9wczIiLCJyb3dUaWNrVmFsdWVzIiwiX3JlZjQiLCJjdXN0b21UaWNrRm9ybWF0IiwiaW5kZXhPZiIsIm9yaWVudGF0aW9uIiwidGlja0xlbmd0aCIsImRpZ2l0cyIsInRvTG9jYWxlU3RyaW5nIiwicmVwbGFjZSIsInRpY2tUZXh0QW5jaG9yIiwiUmVhZGFibGUiLCJZQXhpcyIsIkF4ZXMiLCJfUmVhY3QkQ29tcG9uZW50MyIsIl90aGlzIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfcmVmNSIsInRpY2tzIiwiZ2V0VGlja1ZhbHVlcyIsInN0ZXAiLCJuZWdhdGl2ZSIsIk1hdGgiLCJhYnMiLCJfcmVmNiIsIl9yZWY3IiwiX3RoaXMkeFZhbHVlcyIsInhWYWx1ZXMiLCJfdGhpcyR5VmFsdWVzIiwieVZhbHVlcyIsIl9leHRlbmRzMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9heGlzL2F4ZXMuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnQHZpc3gvYXhpcyc7XG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBBcnJvdyBmcm9tICcuL2Fycm93JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IGNvdW50V29yZHMsIGZpbmRMb25nZXN0V29yZCwgYW1vdW50VG9JbmNyZWFzZVdpZHRoLCBnZXRUaWNrVmFsdWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgY29sb3IsIFJlYWRhYmxlIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcblxuZXhwb3J0IGNvbnN0IEF4aXNQcm9wVHlwZXMgPSB7XG4gIGluY2x1ZGVBcnJvd3M6IFByb3BUeXBlcy5vYmplY3QsXG4gIGdyYXBoUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5jb25zdCBBeGlzRGVmYXVsdFByb3BzID0ge1xuICBpbmNsdWRlQXJyb3dzOiB7XG4gICAgbGVmdDogdHJ1ZSxcbiAgICByaWdodDogdHJ1ZSxcbiAgICB1cDogdHJ1ZSxcbiAgICBkb3duOiB0cnVlLFxuICB9LFxufTtcblxuY29uc3QgU3R5bGVkQXJyb3cgPSBzdHlsZWQoQXJyb3cpKCgpID0+ICh7XG4gIGZpbGw6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUlksXG59KSk7XG5cbmNvbnN0IFN0eWxlZExhYmVsID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSxcbn0pKTtcblxuY29uc3QgU3R5bGVkQXhpc0xhYmVsSG9sZGVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICcqID4gKic6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogMCxcbiAgfSxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFNpemUsXG59KSk7XG5cbmNvbnN0IFN0eWxlZEF4ZXNHcm91cCA9IHN0eWxlZCgnZycpKCgpID0+ICh7XG4gICcmIC52aXN4LWF4aXMtbGluZSc6IHtcbiAgICBzdHJva2U6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUlksXG4gICAgc3Ryb2tlV2lkdGg6IDMsXG4gIH0sXG4gICcmIC52aXN4LWF4aXMtdGljayc6IHtcbiAgICBmaWxsOiBjb2xvci5kZWZhdWx0cy5QUklNQVJZLFxuICAgICcmIGxpbmUnOiB7XG4gICAgICBzdHJva2U6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUlksXG4gICAgfSxcbiAgfSxcbn0pKTtcblxuY29uc3QgdGlja0xhYmVsU3R5bGVzID0ge1xuICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgZm9udFNpemU6ICcxNHB4JyxcbiAgY3Vyc29yOiAnaW5oZXJpdCcsXG59O1xuXG5leHBvcnQgY29uc3Qgc2hhcmVkVmFsdWVzID0gKFxuICBmaXJzdE5lZ2F0aXZlWCxcbiAgZmlyc3ROZWdhdGl2ZVksXG4gIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgsXG4gIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVksXG4gIGRlbHRhQWxsb3dhbmNlLFxuICBkeSxcbikgPT4ge1xuICBsZXQgcmVzdWx0ID0gW107XG5cbiAgaWYgKFxuICAgIGZpcnN0TmVnYXRpdmVYID09PSBmaXJzdE5lZ2F0aXZlWSAmJlxuICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVggLSBkZWx0YUFsbG93YW5jZSA8IGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkgJiZcbiAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZIDwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCArIGRlbHRhQWxsb3dhbmNlICYmXG4gICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCAtIGRlbHRhQWxsb3dhbmNlIDwgZHkgJiZcbiAgICBkeSA8IGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVggKyBkZWx0YUFsbG93YW5jZVxuICApIHtcbiAgICByZXN1bHQucHVzaChmaXJzdE5lZ2F0aXZlWCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpcnN0TmVnYXRpdmVWYWx1ZSA9IChpbnRlcnZhbCkgPT4gKGludGVydmFsIHx8IFtdKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50IDwgMCk7XG5cbmV4cG9ydCBjbGFzcyBSYXdYQXhpcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uQXhpc1Byb3BUeXBlcyxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICB9O1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gQXhpc0RlZmF1bHRQcm9wcztcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5jbHVkZUFycm93cyxcbiAgICAgIGdyYXBoUHJvcHMsXG4gICAgICBjb2x1bW5UaWNrc1ZhbHVlcyxcbiAgICAgIHNraXBWYWx1ZXMsXG4gICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZLFxuICAgICAgZHksXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzY2FsZSwgZG9tYWluLCBzaXplLCByYW5nZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGNvbnN0IGxhYmVsUHJvcHMgPSAobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IHkgPSBza2lwVmFsdWVzICYmIHNraXBWYWx1ZXNbMF0gPT09IGxhYmVsID8gZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSArIDQgOiBkeTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGlja0xhYmVsU3R5bGVzLFxuICAgICAgICB0ZXh0QW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgeTogeSxcbiAgICAgICAgZHg6IGxhYmVsID09PSAwID8gLTEwIDogMCxcbiAgICAgICAgZHk6IGxhYmVsID09PSAwID8gLTcgOiAwLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmVjZXNzYXJ5Um93cyA9IGNvdW50V29yZHMoZG9tYWluLmF4aXNMYWJlbCk7XG4gICAgY29uc3QgbG9uZ2VzdFdvcmQgPSBmaW5kTG9uZ2VzdFdvcmQoZG9tYWluLmF4aXNMYWJlbCk7XG4gICAgY29uc3QgbmVjZXNzYXJ5V2lkdGggPSBhbW91bnRUb0luY3JlYXNlV2lkdGgobG9uZ2VzdFdvcmQpICsgMjtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQXhlc0dyb3VwPlxuICAgICAgICA8QXhpc1xuICAgICAgICAgIHNjYWxlPXtzY2FsZS54fVxuICAgICAgICAgIHRvcD17c2NhbGUueSgwKX1cbiAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgIGxhYmVsPXtkb21haW4ubGFiZWx9XG4gICAgICAgICAgcmFuZ2VQYWRkaW5nPXs4fVxuICAgICAgICAgIHRpY2tGb3JtYXQ9eyh2YWx1ZSkgPT4gdmFsdWV9XG4gICAgICAgICAgdGlja0xhYmVsUHJvcHM9e2xhYmVsUHJvcHN9XG4gICAgICAgICAgdGlja1ZhbHVlcz17Y29sdW1uVGlja3NWYWx1ZXN9XG4gICAgICAgICAgaGlkZVplcm89eyEoZG9tYWluLmxhYmVsU3RlcCB8fCByYW5nZS5sYWJlbFN0ZXApICYmIGRvbWFpbi5taW4gPD0gMH1cbiAgICAgICAgLz5cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5sZWZ0ICYmIChcbiAgICAgICAgICA8U3R5bGVkQXJyb3cgZGlyZWN0aW9uPVwibGVmdFwiIHg9e2RvbWFpbi5taW59IHk9ezB9IHNjYWxlPXtzY2FsZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5yaWdodCAmJiAoXG4gICAgICAgICAgPFN0eWxlZEFycm93IGRpcmVjdGlvbj1cInJpZ2h0XCIgeD17ZG9tYWluLm1heH0geT17MH0gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7ZG9tYWluLmF4aXNMYWJlbCAmJiAoXG4gICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD17c2l6ZS53aWR0aCArIDE3fSB5PXtzY2FsZS55KDApIC0gOX0gd2lkdGg9e25lY2Vzc2FyeVdpZHRofSBoZWlnaHQ9ezIwICogbmVjZXNzYXJ5Um93c30+XG4gICAgICAgICAgICA8U3R5bGVkTGFiZWwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBkb21haW4uYXhpc0xhYmVsIH19IC8+XG4gICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgICApfVxuICAgICAgPC9TdHlsZWRBeGVzR3JvdXA+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBYQXhpcyA9IFJhd1hBeGlzO1xuXG5leHBvcnQgY2xhc3MgUmF3WUF4aXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC4uLkF4aXNQcm9wVHlwZXMsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IEF4aXNEZWZhdWx0UHJvcHM7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaW5jbHVkZUFycm93cywgZ3JhcGhQcm9wcywgc2tpcFZhbHVlcywgcm93VGlja1ZhbHVlcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlLCByYW5nZSwgc2l6ZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGNvbnN0IG5lY2Vzc2FyeVdpZHRoID0gcmFuZ2UuYXhpc0xhYmVsID8gYW1vdW50VG9JbmNyZWFzZVdpZHRoKHJhbmdlLmF4aXNMYWJlbC5sZW5ndGgpIDogMDtcblxuICAgIGNvbnN0IGN1c3RvbVRpY2tGb3JtYXQgPSAodmFsdWUpID0+IChza2lwVmFsdWVzICYmIHNraXBWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPj0gMCA/ICcnIDogdmFsdWUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRBeGVzR3JvdXA+XG4gICAgICAgIDxBeGlzXG4gICAgICAgICAgb3JpZW50YXRpb249eydsZWZ0J31cbiAgICAgICAgICBzY2FsZT17c2NhbGUueX1cbiAgICAgICAgICB0b3A9ezB9XG4gICAgICAgICAgaGVpZ2h0PXtzaXplLmhlaWdodH1cbiAgICAgICAgICBsZWZ0PXtzY2FsZS54KDApfVxuICAgICAgICAgIGxhYmVsPXtyYW5nZS5sYWJlbH1cbiAgICAgICAgICBsYWJlbFByb3BzPXt7ICdkYXRhLXBpZS1yZWFkYWJsZSc6IGZhbHNlIH19XG4gICAgICAgICAgcmFuZ2VQYWRkaW5nPXs4fVxuICAgICAgICAgIHRpY2tMZW5ndGg9ezEwfVxuICAgICAgICAgIHRpY2tGb3JtYXQ9e2N1c3RvbVRpY2tGb3JtYXR9XG4gICAgICAgICAgdGlja0xhYmVsUHJvcHM9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGRpZ2l0cyA9IHZhbHVlLnRvTG9jYWxlU3RyaW5nKCkucmVwbGFjZSgvWy4tXS9nLCAnJykubGVuZ3RoIHx8IDE7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnRpY2tMYWJlbFN0eWxlcyxcbiAgICAgICAgICAgICAgZHk6IDQsXG4gICAgICAgICAgICAgIGR4OiAtMTAgLSBkaWdpdHMgKiA5LFxuICAgICAgICAgICAgICAnZGF0YS1waWUtcmVhZGFibGUnOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfX1cbiAgICAgICAgICBoaWRlWmVybz17dHJ1ZX1cbiAgICAgICAgICB0aWNrVGV4dEFuY2hvcj17J2JvdHRvbSd9XG4gICAgICAgICAgdGlja1ZhbHVlcz17cm93VGlja1ZhbHVlc31cbiAgICAgICAgLz5cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5kb3duICYmIChcbiAgICAgICAgICA8U3R5bGVkQXJyb3cgZGlyZWN0aW9uPVwiZG93blwiIHg9ezB9IHk9e3JhbmdlLm1pbn0gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7aW5jbHVkZUFycm93cyAmJiBpbmNsdWRlQXJyb3dzLnVwICYmIChcbiAgICAgICAgICA8U3R5bGVkQXJyb3cgZGlyZWN0aW9uPVwidXBcIiB4PXswfSB5PXtyYW5nZS5tYXh9IHNjYWxlPXtzY2FsZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3JhbmdlLmF4aXNMYWJlbCAmJiAoXG4gICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD17c2NhbGUueCgwKSAtIG5lY2Vzc2FyeVdpZHRoIC8gMn0geT17LTMzfSB3aWR0aD17bmVjZXNzYXJ5V2lkdGh9IGhlaWdodD1cIjIwXCI+XG4gICAgICAgICAgICA8UmVhZGFibGUgZmFsc2U+XG4gICAgICAgICAgICAgIDxTdHlsZWRBeGlzTGFiZWxIb2xkZXIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiByYW5nZS5heGlzTGFiZWwgfX0gLz5cbiAgICAgICAgICAgIDwvUmVhZGFibGU+XG4gICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgICApfVxuICAgICAgPC9TdHlsZWRBeGVzR3JvdXA+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBZQXhpcyA9IFJhd1lBeGlzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBeGVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAuLi5BeGlzUHJvcFR5cGVzLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBBeGlzRGVmYXVsdFByb3BzO1xuXG4gIHhWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIGRvbWFpbiB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGlmICghZG9tYWluIHx8ICFzY2FsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tzID0gZ2V0VGlja1ZhbHVlcyh7IC4uLmRvbWFpbiwgc3RlcDogZG9tYWluLmxhYmVsU3RlcCB9KTtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IGZpcnN0TmVnYXRpdmVWYWx1ZSh0aWNrcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uVGlja3NWYWx1ZXM6IHRpY2tzLFxuICAgICAgZmlyc3ROZWdhdGl2ZVg6IG5lZ2F0aXZlLFxuICAgICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWDogTWF0aC5hYnMoc2NhbGUueSgwKSAtIHNjYWxlLnkobmVnYXRpdmUpKSxcbiAgICB9O1xuICB9O1xuXG4gIHlWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIHJhbmdlIH0gPSBncmFwaFByb3BzIHx8IHt9O1xuXG4gICAgaWYgKCFyYW5nZSB8fCAhc2NhbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrcyA9IGdldFRpY2tWYWx1ZXMoeyAuLi5yYW5nZSwgc3RlcDogcmFuZ2UubGFiZWxTdGVwIH0pO1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gZmlyc3ROZWdhdGl2ZVZhbHVlKHRpY2tzKTtcblxuICAgIHJldHVybiB7XG4gICAgICByb3dUaWNrVmFsdWVzOiB0aWNrcyxcbiAgICAgIGZpcnN0TmVnYXRpdmVZOiBuZWdhdGl2ZSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVk6IE1hdGguYWJzKHNjYWxlLngoMCkgLSBzY2FsZS54KG5lZ2F0aXZlKSksXG4gICAgfTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IGNvbHVtblRpY2tzVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWCwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCB9ID0gdGhpcy54VmFsdWVzKCk7XG4gICAgY29uc3QgeyByb3dUaWNrVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWSwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSB9ID0gdGhpcy55VmFsdWVzKCk7XG4gICAgY29uc3QgZGVsdGFBbGxvd2FuY2UgPSA2O1xuICAgIGNvbnN0IGR5ID0gMjU7XG5cbiAgICBjb25zdCBza2lwVmFsdWVzID0gc2hhcmVkVmFsdWVzKFxuICAgICAgZmlyc3ROZWdhdGl2ZVgsXG4gICAgICBmaXJzdE5lZ2F0aXZlWSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgsXG4gICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZLFxuICAgICAgZGVsdGFBbGxvd2FuY2UsXG4gICAgICBkeSxcbiAgICApO1xuXG4gICAgLy8gZWFjaCBheGlzIGhhcyB0byBiZSBkaXNwbGF5ZWQgb25seSBpZiB0aGUgZG9tYWluICYgcmFuZ2UgaW5jbHVkZSBpdFxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQXhlc0dyb3VwPlxuICAgICAgICB7cmFuZ2UubWluIDw9IDAgPyAoXG4gICAgICAgICAgPFhBeGlzXG4gICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgIHNraXBWYWx1ZXM9e3NraXBWYWx1ZXN9XG4gICAgICAgICAgICBjb2x1bW5UaWNrc1ZhbHVlcz17Y29sdW1uVGlja3NWYWx1ZXN9XG4gICAgICAgICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZPXtkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZfVxuICAgICAgICAgICAgZHk9e2R5fVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7ZG9tYWluLm1pbiA8PSAwID8gKFxuICAgICAgICAgIDxZQXhpc1xuICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICBza2lwVmFsdWVzPXtza2lwVmFsdWVzfVxuICAgICAgICAgICAgcm93VGlja1ZhbHVlcz17cm93VGlja1ZhbHVlc31cbiAgICAgICAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVg9e2Rpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8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