@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
@@ -1,61 +1,64 @@
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.styles = exports.lineToolComponent = exports.lineTool = exports.lineBase = void 0;
9
-
10
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
24
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
15
  var _react = _interopRequireDefault(require("react"));
27
-
28
16
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
29
-
30
17
  var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
31
-
32
18
  var _point = require("../point");
33
-
34
19
  var _plot = require("@pie-lib/plot");
35
-
36
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
37
-
38
21
  var _styles = require("../styles");
39
-
40
22
  var _reactDom = _interopRequireDefault(require("react-dom"));
41
-
42
23
  var _markLabel = _interopRequireDefault(require("../../../mark-label"));
43
-
44
24
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
45
-
46
25
  var _renderUi = require("@pie-lib/render-ui");
47
-
48
26
  var _utils = require("../../../utils");
49
-
50
- 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); }; }
51
-
52
- 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; } }
53
-
54
- 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; }
55
-
56
- 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; }
57
-
58
- var lineTool = function lineTool(type, Component) {
27
+ var _styles2 = require("@mui/material/styles");
28
+ 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)); }
29
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
30
+ 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; }
31
+ 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; }
32
+ var StyledLineGroup = (0, _styles2.styled)('g')(function (_ref) {
33
+ var disabled = _ref.disabled,
34
+ correctness = _ref.correctness;
35
+ return _objectSpread(_objectSpread(_objectSpread(_objectSpread({
36
+ '& line': {
37
+ fill: 'transparent',
38
+ stroke: _renderUi.color.defaults.BLACK,
39
+ strokeWidth: 3,
40
+ transition: 'stroke 200ms ease-in, stroke-width 200ms ease-in',
41
+ '&:hover': {
42
+ strokeWidth: 6,
43
+ stroke: _renderUi.color.defaults.PRIMARY_DARK
44
+ }
45
+ }
46
+ }, disabled && {
47
+ '& line': _objectSpread(_objectSpread({}, (0, _styles.disabledSecondary)('stroke')), {}, {
48
+ strokeWidth: 2
49
+ })
50
+ }), correctness === 'correct' && {
51
+ '& line': _objectSpread({}, (0, _styles.correct)('stroke'))
52
+ }), correctness === 'incorrect' && {
53
+ '& line': _objectSpread({}, (0, _styles.incorrect)('stroke'))
54
+ }), correctness === 'missing' && {
55
+ '& line': _objectSpread(_objectSpread({}, (0, _styles.missing)('stroke')), {}, {
56
+ strokeWidth: 1,
57
+ strokeDasharray: '4 3'
58
+ })
59
+ });
60
+ });
61
+ var lineTool = exports.lineTool = function lineTool(type, Component) {
59
62
  return function () {
60
63
  return {
61
64
  type: type,
@@ -64,7 +67,6 @@ var lineTool = function lineTool(type, Component) {
64
67
  if (mark && (0, _utils.equalPoints)(mark.root, point)) {
65
68
  return mark;
66
69
  }
67
-
68
70
  if (!mark) {
69
71
  return {
70
72
  type: type,
@@ -72,11 +74,9 @@ var lineTool = function lineTool(type, Component) {
72
74
  from: point
73
75
  };
74
76
  }
75
-
76
77
  if ((0, _utils.equalPoints)(point, mark.from)) {
77
78
  return _objectSpread({}, mark);
78
79
  }
79
-
80
80
  return _objectSpread(_objectSpread({}, mark), {}, {
81
81
  building: false,
82
82
  to: point
@@ -85,97 +85,76 @@ var lineTool = function lineTool(type, Component) {
85
85
  };
86
86
  };
87
87
  };
88
-
89
- exports.lineTool = lineTool;
90
-
91
- var lineToolComponent = function lineToolComponent(Component) {
92
- var _class;
93
-
94
- return _class = /*#__PURE__*/function (_React$Component) {
95
- (0, _inherits2["default"])(LineToolComponent, _React$Component);
96
-
97
- var _super = _createSuper(LineToolComponent);
98
-
88
+ var lineToolComponent = exports.lineToolComponent = function lineToolComponent(Component) {
89
+ var _LineToolComponent;
90
+ return _LineToolComponent = /*#__PURE__*/function (_React$Component) {
99
91
  function LineToolComponent(props) {
100
92
  var _this;
101
-
102
93
  (0, _classCallCheck2["default"])(this, LineToolComponent);
103
- _this = _super.call(this, props);
104
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "startDrag", function () {
94
+ _this = _callSuper(this, LineToolComponent, [props]);
95
+ (0, _defineProperty2["default"])(_this, "startDrag", function () {
105
96
  return _this.setState({
106
97
  mark: _objectSpread({}, _this.props.mark)
107
98
  });
108
99
  });
109
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "stopDrag", function () {
100
+ (0, _defineProperty2["default"])(_this, "stopDrag", function () {
110
101
  var _this$props = _this.props,
111
- onChange = _this$props.onChange,
112
- mark = _this$props.mark;
113
-
102
+ onChange = _this$props.onChange,
103
+ mark = _this$props.mark;
114
104
  var update = _objectSpread({}, _this.state.mark);
115
-
116
105
  _this.setState({
117
106
  mark: undefined
118
107
  }, function () {
119
108
  var type = update.type;
120
109
  var shouldNotChange = type && (type === 'parabola' || type === 'sine' || type === 'absolute' || type === 'exponential') && (0, _utils.sameAxes)(update.from, update.to);
121
-
122
110
  if (!shouldNotChange && type && type === 'exponential' && update.from && update.to) {
123
111
  shouldNotChange = update.from.y === 0 || update.to.y === 0 || update.from.y * update.to.y < 0;
124
112
  }
125
-
126
113
  if (!(0, _isEqual["default"])(mark, update) && !shouldNotChange) {
127
114
  onChange(mark, update);
128
115
  }
129
116
  });
130
117
  });
131
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMark", function (_ref) {
132
- var from = _ref.from,
133
- to = _ref.to,
134
- middle = _ref.middle;
135
-
118
+ (0, _defineProperty2["default"])(_this, "changeMark", function (_ref2) {
119
+ var from = _ref2.from,
120
+ to = _ref2.to,
121
+ middle = _ref2.middle;
136
122
  var mark = _objectSpread(_objectSpread({}, _this.state.mark), {}, {
137
123
  from: from,
138
124
  to: to
139
125
  });
140
-
141
126
  if (middle) {
142
127
  mark = _objectSpread(_objectSpread({}, mark), {}, {
143
128
  middle: middle
144
129
  });
145
130
  }
146
-
147
131
  _this.setState({
148
132
  mark: mark
149
133
  });
150
134
  });
151
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMarkProps", function (_ref2) {
152
- var from = _ref2.from,
153
- to = _ref2.to,
154
- middle = _ref2.middle;
135
+ (0, _defineProperty2["default"])(_this, "changeMarkProps", function (_ref3) {
136
+ var from = _ref3.from,
137
+ to = _ref3.to,
138
+ middle = _ref3.middle;
155
139
  var _this$props2 = _this.props,
156
- onChange = _this$props2.onChange,
157
- mark = _this$props2.mark;
158
-
140
+ onChange = _this$props2.onChange,
141
+ mark = _this$props2.mark;
159
142
  var update = _objectSpread(_objectSpread({}, mark), _this.state.mark);
160
-
161
143
  if (from) {
162
144
  update = _objectSpread(_objectSpread({}, update), {}, {
163
145
  from: from
164
146
  });
165
147
  }
166
-
167
148
  if (to) {
168
149
  update = _objectSpread(_objectSpread({}, update), {}, {
169
150
  to: to
170
151
  });
171
152
  }
172
-
173
153
  if (middle) {
174
154
  update = _objectSpread(_objectSpread({}, update), {}, {
175
155
  middle: middle
176
156
  });
177
157
  }
178
-
179
158
  if (!(0, _isEqual["default"])(mark, update)) {
180
159
  onChange(mark, update);
181
160
  }
@@ -183,35 +162,33 @@ var lineToolComponent = function lineToolComponent(Component) {
183
162
  _this.state = {};
184
163
  return _this;
185
164
  }
186
-
187
- (0, _createClass2["default"])(LineToolComponent, [{
165
+ (0, _inherits2["default"])(LineToolComponent, _React$Component);
166
+ return (0, _createClass2["default"])(LineToolComponent, [{
188
167
  key: "render",
189
168
  value: function render() {
190
169
  var _this$props3 = this.props,
191
- graphProps = _this$props3.graphProps,
192
- onClick = _this$props3.onClick,
193
- labelNode = _this$props3.labelNode,
194
- labelModeEnabled = _this$props3.labelModeEnabled,
195
- coordinatesOnHover = _this$props3.coordinatesOnHover,
196
- limitLabeling = _this$props3.limitLabeling;
170
+ graphProps = _this$props3.graphProps,
171
+ onClick = _this$props3.onClick,
172
+ labelNode = _this$props3.labelNode,
173
+ labelModeEnabled = _this$props3.labelModeEnabled,
174
+ coordinatesOnHover = _this$props3.coordinatesOnHover,
175
+ limitLabeling = _this$props3.limitLabeling;
197
176
  var mark = this.state.mark ? this.state.mark : this.props.mark;
198
177
  var from = (0, _cloneDeep["default"])(mark.from);
199
178
  var to = (0, _cloneDeep["default"])(mark.to);
200
- var middle = (0, _cloneDeep["default"])(mark.middle); // SET DISABLED
201
- // if it's a background mark, we need to force disable it
179
+ var middle = (0, _cloneDeep["default"])(mark.middle);
202
180
 
181
+ // SET DISABLED
182
+ // if it's a background mark, we need to force disable it
203
183
  if (from && mark.isBackground) {
204
184
  from.disabled = true;
205
185
  }
206
-
207
186
  if (to && mark.isBackground) {
208
187
  to.disabled = true;
209
188
  }
210
-
211
189
  if (middle && mark.isBackground) {
212
190
  middle.disabled = true;
213
191
  }
214
-
215
192
  return /*#__PURE__*/_react["default"].createElement(Component, {
216
193
  disabled: mark.disabled,
217
194
  coordinatesOnHover: coordinatesOnHover,
@@ -231,22 +208,23 @@ var lineToolComponent = function lineToolComponent(Component) {
231
208
  });
232
209
  }
233
210
  }]);
234
- return LineToolComponent;
235
- }(_react["default"].Component), (0, _defineProperty2["default"])(_class, "propTypes", _objectSpread(_objectSpread({}, _plot.types.ToolPropTypeFields), {}, {
236
- graphProps: _plot.types.GraphPropsType.isRequired
237
- })), _class;
211
+ }(_react["default"].Component), (0, _defineProperty2["default"])(_LineToolComponent, "propTypes", _objectSpread(_objectSpread({}, _plot.types.ToolPropTypeFields), {}, {
212
+ graphProps: _plot.types.GraphPropsType.isRequired,
213
+ limitLabeling: _propTypes["default"].bool,
214
+ changeMarkProps: _propTypes["default"].func,
215
+ disabled: _propTypes["default"].bool,
216
+ from: _plot.types.PointType,
217
+ to: _plot.types.PointType,
218
+ labelModeEnabled: _propTypes["default"].bool,
219
+ onClick: _propTypes["default"].func
220
+ })), _LineToolComponent;
238
221
  };
239
-
240
- exports.lineToolComponent = lineToolComponent;
241
-
242
222
  var dragOpts = function dragOpts() {
243
223
  return {
244
- bounds: function bounds(props, _ref3) {
245
- var domain = _ref3.domain,
246
- range = _ref3.range;
247
-
224
+ bounds: function bounds(props, _ref4) {
225
+ var domain = _ref4.domain,
226
+ range = _ref4.range;
248
227
  var area = _plot.utils.lineToArea(props.from, props.to);
249
-
250
228
  return _plot.utils.bounds(area, domain, range);
251
229
  },
252
230
  anchorPoint: function anchorPoint(props) {
@@ -255,7 +233,7 @@ var dragOpts = function dragOpts() {
255
233
  },
256
234
  fromDelta: function fromDelta(props, delta) {
257
235
  var from = props.from,
258
- to = props.to;
236
+ to = props.to;
259
237
  return {
260
238
  from: _plot.utils.point(from).add(_plot.utils.point(delta)),
261
239
  to: _plot.utils.point(to).add(_plot.utils.point(delta))
@@ -263,79 +241,63 @@ var dragOpts = function dragOpts() {
263
241
  }
264
242
  };
265
243
  };
266
-
267
- var lineBase = function lineBase(Comp, opts) {
244
+ var lineBase = exports.lineBase = function lineBase(Comp, opts) {
268
245
  var DraggableComp = (0, _plot.gridDraggable)(dragOpts())(Comp);
269
246
  var FromPoint = opts && opts.from ? opts.from : _point.BasePoint;
270
247
  var ToPoint = opts && opts.to ? opts.to : _point.BasePoint;
271
-
272
248
  var LineBase = /*#__PURE__*/function (_React$Component2) {
273
- (0, _inherits2["default"])(LineBase, _React$Component2);
274
-
275
- var _super2 = _createSuper(LineBase);
276
-
277
249
  function LineBase() {
278
250
  var _this2;
279
-
280
251
  (0, _classCallCheck2["default"])(this, LineBase);
281
-
282
252
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
283
253
  args[_key] = arguments[_key];
284
254
  }
285
-
286
- _this2 = _super2.call.apply(_super2, [this].concat(args));
287
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "onChangePoint", function (point) {
255
+ _this2 = _callSuper(this, LineBase, [].concat(args));
256
+ (0, _defineProperty2["default"])(_this2, "onChangePoint", function (point) {
288
257
  var _this2$props = _this2.props,
289
- middle = _this2$props.middle,
290
- onChange = _this2$props.onChange;
258
+ middle = _this2$props.middle,
259
+ onChange = _this2$props.onChange;
291
260
  var from = point.from,
292
- to = point.to; // because point.from.label and point.to.label can be different
261
+ to = point.to;
293
262
 
263
+ // because point.from.label and point.to.label can be different
294
264
  if (!(0, _utils.equalPoints)(from, to)) {
295
265
  if (middle) {
296
266
  point.middle = _objectSpread(_objectSpread({}, middle), (0, _utils.getMiddleOfTwoPoints)(from, to));
297
267
  }
298
-
299
268
  onChange(point);
300
269
  }
301
270
  });
302
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "dragComp", function (_ref4) {
303
- var draggedFrom = _ref4.from,
304
- draggedTo = _ref4.to;
271
+ (0, _defineProperty2["default"])(_this2, "dragComp", function (_ref5) {
272
+ var draggedFrom = _ref5.from,
273
+ draggedTo = _ref5.to;
305
274
  var _this2$props2 = _this2.props,
306
- from = _this2$props2.from,
307
- to = _this2$props2.to,
308
- onChange = _this2$props2.onChange,
309
- middle = _this2$props2.middle;
310
-
275
+ from = _this2$props2.from,
276
+ to = _this2$props2.to,
277
+ onChange = _this2$props2.onChange,
278
+ middle = _this2$props2.middle;
311
279
  if (from.label) {
312
280
  draggedFrom.label = from.label;
313
281
  }
314
-
315
282
  if (to.label) {
316
283
  draggedTo.label = to.label;
317
284
  }
318
-
319
285
  var updated = {
320
286
  from: draggedFrom,
321
287
  to: draggedTo
322
288
  };
323
-
324
289
  if (middle) {
325
290
  updated.middle = _objectSpread(_objectSpread({}, middle), (0, _utils.getMiddleOfTwoPoints)(draggedFrom, draggedTo));
326
291
  }
327
-
328
292
  onChange(updated);
329
293
  });
330
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "dragFrom", function (draggedFrom) {
294
+ (0, _defineProperty2["default"])(_this2, "dragFrom", function (draggedFrom) {
331
295
  var _this2$props3 = _this2.props,
332
- from = _this2$props3.from,
333
- to = _this2$props3.to;
334
-
296
+ from = _this2$props3.from,
297
+ to = _this2$props3.to;
335
298
  if (from.label) {
336
299
  draggedFrom.label = from.label;
337
300
  }
338
-
339
301
  if (!(0, _utils.equalPoints)(draggedFrom, to)) {
340
302
  _this2.onChangePoint({
341
303
  from: draggedFrom,
@@ -343,15 +305,13 @@ var lineBase = function lineBase(Comp, opts) {
343
305
  });
344
306
  }
345
307
  });
346
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "dragTo", function (draggedTo) {
308
+ (0, _defineProperty2["default"])(_this2, "dragTo", function (draggedTo) {
347
309
  var _this2$props4 = _this2.props,
348
- from = _this2$props4.from,
349
- to = _this2$props4.to;
350
-
310
+ from = _this2$props4.from,
311
+ to = _this2$props4.to;
351
312
  if (to.label) {
352
313
  draggedTo.label = to.label;
353
314
  }
354
-
355
315
  if (!(0, _utils.equalPoints)(from, draggedTo)) {
356
316
  _this2.onChangePoint({
357
317
  from: from,
@@ -359,78 +319,70 @@ var lineBase = function lineBase(Comp, opts) {
359
319
  });
360
320
  }
361
321
  });
362
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "labelChange", function (point, type) {
322
+ (0, _defineProperty2["default"])(_this2, "labelChange", function (point, type) {
363
323
  var changeMarkProps = _this2.props.changeMarkProps;
364
-
365
324
  var update = _objectSpread({}, point);
366
-
367
325
  if (!point.label || (0, _isEmpty["default"])(point.label)) {
368
326
  delete update.label;
369
327
  }
370
-
371
328
  changeMarkProps((0, _defineProperty2["default"])({}, type, update));
372
329
  });
373
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "clickPoint", function (point, type, data) {
330
+ (0, _defineProperty2["default"])(_this2, "clickPoint", function (point, type, data) {
374
331
  var _this2$props5 = _this2.props,
375
- changeMarkProps = _this2$props5.changeMarkProps,
376
- disabled = _this2$props5.disabled,
377
- from = _this2$props5.from,
378
- to = _this2$props5.to,
379
- labelModeEnabled = _this2$props5.labelModeEnabled,
380
- limitLabeling = _this2$props5.limitLabeling,
381
- onClick = _this2$props5.onClick;
382
-
332
+ changeMarkProps = _this2$props5.changeMarkProps,
333
+ disabled = _this2$props5.disabled,
334
+ from = _this2$props5.from,
335
+ to = _this2$props5.to,
336
+ labelModeEnabled = _this2$props5.labelModeEnabled,
337
+ limitLabeling = _this2$props5.limitLabeling,
338
+ onClick = _this2$props5.onClick;
383
339
  if (!labelModeEnabled) {
384
340
  onClick(point || data);
385
341
  return;
386
342
  }
387
-
388
343
  if (disabled) {
389
344
  return;
390
- } // limit labeling the points of the line
391
-
345
+ }
392
346
 
347
+ // limit labeling the points of the line
393
348
  if (limitLabeling) {
394
349
  return;
395
350
  }
396
-
397
351
  if (type === 'middle' && !point && from && to) {
398
352
  point = _objectSpread(_objectSpread({}, point), (0, _utils.getMiddleOfTwoPoints)(from, to));
399
353
  }
400
-
401
354
  changeMarkProps((0, _defineProperty2["default"])({
402
355
  from: from,
403
356
  to: to
404
357
  }, type, _objectSpread({
405
358
  label: ''
406
359
  }, point)));
407
-
408
360
  if (_this2.input[type]) {
409
361
  _this2.input[type].focus();
410
362
  }
411
363
  });
412
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "input", {});
364
+ // IMPORTANT, do not remove
365
+ (0, _defineProperty2["default"])(_this2, "input", {});
413
366
  return _this2;
414
367
  }
415
-
416
- (0, _createClass2["default"])(LineBase, [{
368
+ (0, _inherits2["default"])(LineBase, _React$Component2);
369
+ return (0, _createClass2["default"])(LineBase, [{
417
370
  key: "render",
418
371
  value: function render() {
419
372
  var _this3 = this;
420
-
421
373
  var _this$props4 = this.props,
422
- coordinatesOnHover = _this$props4.coordinatesOnHover,
423
- graphProps = _this$props4.graphProps,
424
- onDragStart = _this$props4.onDragStart,
425
- onDragStop = _this$props4.onDragStop,
426
- from = _this$props4.from,
427
- to = _this$props4.to,
428
- middle = _this$props4.middle,
429
- disabled = _this$props4.disabled,
430
- correctness = _this$props4.correctness,
431
- onClick = _this$props4.onClick,
432
- labelNode = _this$props4.labelNode,
433
- labelModeEnabled = _this$props4.labelModeEnabled;
374
+ coordinatesOnHover = _this$props4.coordinatesOnHover,
375
+ graphProps = _this$props4.graphProps,
376
+ onDragStart = _this$props4.onDragStart,
377
+ onDragStop = _this$props4.onDragStop,
378
+ from = _this$props4.from,
379
+ to = _this$props4.to,
380
+ middle = _this$props4.middle,
381
+ disabled = _this$props4.disabled,
382
+ correctness = _this$props4.correctness,
383
+ onClick = _this$props4.onClick,
384
+ labelNode = _this$props4.labelNode,
385
+ labelModeEnabled = _this$props4.labelModeEnabled;
434
386
  var common = {
435
387
  graphProps: graphProps,
436
388
  onDragStart: onDragStart,
@@ -443,10 +395,9 @@ var lineBase = function lineBase(Comp, opts) {
443
395
  var fromLabelNode = null;
444
396
  var toLabelNode = null;
445
397
  var lineLabelNode = null;
446
-
447
398
  if (labelNode) {
448
- if (from && from.hasOwnProperty('label')) {
449
- fromLabelNode = /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
399
+ if (from && Object.prototype.hasOwnProperty.call(from, 'label')) {
400
+ fromLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
450
401
  inputRef: function inputRef(r) {
451
402
  return _this3.input.from = r;
452
403
  },
@@ -460,9 +411,8 @@ var lineBase = function lineBase(Comp, opts) {
460
411
  }
461
412
  }), labelNode);
462
413
  }
463
-
464
- if (to && to.hasOwnProperty('label')) {
465
- toLabelNode = /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
414
+ if (to && Object.prototype.hasOwnProperty.call(to, 'label')) {
415
+ toLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
466
416
  inputRef: function inputRef(r) {
467
417
  return _this3.input.to = r;
468
418
  },
@@ -476,9 +426,8 @@ var lineBase = function lineBase(Comp, opts) {
476
426
  }
477
427
  }), labelNode);
478
428
  }
479
-
480
- if (middle && middle.hasOwnProperty('label')) {
481
- lineLabelNode = /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
429
+ if (middle && Object.prototype.hasOwnProperty.call(middle, 'label')) {
430
+ lineLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
482
431
  inputRef: function inputRef(r) {
483
432
  return _this3.input.middle = r;
484
433
  },
@@ -493,8 +442,10 @@ var lineBase = function lineBase(Comp, opts) {
493
442
  }), labelNode);
494
443
  }
495
444
  }
496
-
497
- return /*#__PURE__*/_react["default"].createElement("g", null, to && /*#__PURE__*/_react["default"].createElement(DraggableComp, (0, _extends2["default"])({
445
+ return /*#__PURE__*/_react["default"].createElement(StyledLineGroup, {
446
+ disabled: disabled,
447
+ correctness: correctness
448
+ }, to && /*#__PURE__*/_react["default"].createElement(DraggableComp, (0, _extends2["default"])({
498
449
  from: from,
499
450
  to: to,
500
451
  middle: middle,
@@ -528,9 +479,7 @@ var lineBase = function lineBase(Comp, opts) {
528
479
  })), toLabelNode);
529
480
  }
530
481
  }]);
531
- return LineBase;
532
482
  }(_react["default"].Component);
533
-
534
483
  (0, _defineProperty2["default"])(LineBase, "propTypes", {
535
484
  coordinatesOnHover: _propTypes["default"].bool,
536
485
  graphProps: _plot.types.GraphPropsType,
@@ -543,15 +492,14 @@ var lineBase = function lineBase(Comp, opts) {
543
492
  onClick: _propTypes["default"].func,
544
493
  correctness: _propTypes["default"].string,
545
494
  disabled: _propTypes["default"].bool,
546
- labelNode: _propTypes["default"].object,
495
+ limitLabeling: _propTypes["default"].bool,
496
+ changeMarkProps: _propTypes["default"].func,
547
497
  labelModeEnabled: _propTypes["default"].bool,
548
- changeMarkProps: _propTypes["default"].func
498
+ labelNode: _propTypes["default"].object
549
499
  });
550
500
  return LineBase;
551
501
  };
552
-
553
- exports.lineBase = lineBase;
554
- var styles = {
502
+ var styles = exports.styles = {
555
503
  line: function line() {
556
504
  return {
557
505
  fill: 'transparent',
@@ -595,5 +543,4 @@ var styles = {
595
543
  });
596
544
  }
597
545
  };
598
- exports.styles = styles;
599
- //# sourceMappingURL=index.js.map
546
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9pc0VxdWFsIiwiX2Nsb25lRGVlcCIsIl9wb2ludCIsIl9wbG90IiwiX3Byb3BUeXBlcyIsIl9zdHlsZXMiLCJfcmVhY3REb20iLCJfbWFya0xhYmVsIiwiX2lzRW1wdHkiLCJfcmVuZGVyVWkiLCJfdXRpbHMiLCJfc3R5bGVzMiIsIl9jYWxsU3VwZXIiLCJ0IiwibyIsImUiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwib3duS2V5cyIsInIiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiU3R5bGVkTGluZUdyb3VwIiwic3R5bGVkIiwiX3JlZiIsImRpc2FibGVkIiwiY29ycmVjdG5lc3MiLCJmaWxsIiwic3Ryb2tlIiwiY29sb3IiLCJkZWZhdWx0cyIsIkJMQUNLIiwic3Ryb2tlV2lkdGgiLCJ0cmFuc2l0aW9uIiwiUFJJTUFSWV9EQVJLIiwiZGlzYWJsZWRTZWNvbmRhcnkiLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwibWlzc2luZyIsInN0cm9rZURhc2hhcnJheSIsImxpbmVUb29sIiwiZXhwb3J0cyIsInR5cGUiLCJDb21wb25lbnQiLCJhZGRQb2ludCIsInBvaW50IiwibWFyayIsImVxdWFsUG9pbnRzIiwicm9vdCIsImJ1aWxkaW5nIiwiZnJvbSIsInRvIiwibGluZVRvb2xDb21wb25lbnQiLCJfTGluZVRvb2xDb21wb25lbnQiLCJfUmVhY3QkQ29tcG9uZW50IiwiTGluZVRvb2xDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsInNldFN0YXRlIiwiX3RoaXMkcHJvcHMiLCJvbkNoYW5nZSIsInVwZGF0ZSIsInN0YXRlIiwidW5kZWZpbmVkIiwic2hvdWxkTm90Q2hhbmdlIiwic2FtZUF4ZXMiLCJ5IiwiaXNFcXVhbCIsIl9yZWYyIiwibWlkZGxlIiwiX3JlZjMiLCJfdGhpcyRwcm9wczIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMzIiwiZ3JhcGhQcm9wcyIsIm9uQ2xpY2siLCJsYWJlbE5vZGUiLCJsYWJlbE1vZGVFbmFibGVkIiwiY29vcmRpbmF0ZXNPbkhvdmVyIiwibGltaXRMYWJlbGluZyIsImNsb25lRGVlcCIsImlzQmFja2dyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJjaGFuZ2VNYXJrIiwiY2hhbmdlTWFya1Byb3BzIiwib25EcmFnU3RhcnQiLCJzdGFydERyYWciLCJvbkRyYWdTdG9wIiwic3RvcERyYWciLCJSZWFjdCIsInR5cGVzIiwiVG9vbFByb3BUeXBlRmllbGRzIiwiR3JhcGhQcm9wc1R5cGUiLCJpc1JlcXVpcmVkIiwiUHJvcFR5cGVzIiwiYm9vbCIsImZ1bmMiLCJQb2ludFR5cGUiLCJkcmFnT3B0cyIsImJvdW5kcyIsIl9yZWY0IiwiZG9tYWluIiwicmFuZ2UiLCJhcmVhIiwidXRpbHMiLCJsaW5lVG9BcmVhIiwiYW5jaG9yUG9pbnQiLCJmcm9tRGVsdGEiLCJkZWx0YSIsImFkZCIsImxpbmVCYXNlIiwiQ29tcCIsIm9wdHMiLCJEcmFnZ2FibGVDb21wIiwiZ3JpZERyYWdnYWJsZSIsIkZyb21Qb2ludCIsIkJhc2VQb2ludCIsIlRvUG9pbnQiLCJMaW5lQmFzZSIsIl9SZWFjdCRDb21wb25lbnQyIiwiX3RoaXMyIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfdGhpczIkcHJvcHMiLCJnZXRNaWRkbGVPZlR3b1BvaW50cyIsIl9yZWY1IiwiZHJhZ2dlZEZyb20iLCJkcmFnZ2VkVG8iLCJfdGhpczIkcHJvcHMyIiwibGFiZWwiLCJ1cGRhdGVkIiwiX3RoaXMyJHByb3BzMyIsIm9uQ2hhbmdlUG9pbnQiLCJfdGhpczIkcHJvcHM0IiwiaXNFbXB0eSIsImRhdGEiLCJfdGhpczIkcHJvcHM1IiwiaW5wdXQiLCJmb2N1cyIsIl90aGlzMyIsIl90aGlzJHByb3BzNCIsImNvbW1vbiIsImFuZ2xlIiwidHJpZyIsInRvRGVncmVlcyIsImZyb21MYWJlbE5vZGUiLCJ0b0xhYmVsTm9kZSIsImxpbmVMYWJlbE5vZGUiLCJoYXNPd25Qcm9wZXJ0eSIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiaW5wdXRSZWYiLCJsYWJlbENoYW5nZSIsIl9leHRlbmRzMiIsIm9uRHJhZyIsImRyYWdDb21wIiwiY2xpY2tQb2ludCIsIngiLCJkcmFnRnJvbSIsImRyYWdUbyIsInN0cmluZyIsIm9iamVjdCIsInN0eWxlcyIsImxpbmUiLCJhcnJvdyIsImRpc2FibGVkQXJyb3ciLCJ0aGVtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29scy9zaGFyZWQvbGluZS9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9wb2ludCc7XG5pbXBvcnQgeyB0eXBlcywgdXRpbHMsIGdyaWREcmFnZ2FibGUsIHRyaWcgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBkaXNhYmxlZCwgZGlzYWJsZWRTZWNvbmRhcnksIGNvcnJlY3QsIGluY29ycmVjdCwgbWlzc2luZyB9IGZyb20gJy4uL3N0eWxlcyc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBNYXJrTGFiZWwgZnJvbSAnLi4vLi4vLi4vbWFyay1sYWJlbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyBnZXRNaWRkbGVPZlR3b1BvaW50cywgZXF1YWxQb2ludHMsIHNhbWVBeGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5jb25zdCBTdHlsZWRMaW5lR3JvdXAgPSBzdHlsZWQoJ2cnKSgoeyBkaXNhYmxlZCwgY29ycmVjdG5lc3MgfSkgPT4gKHtcbiAgJyYgbGluZSc6IHtcbiAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgIHN0cm9rZTogY29sb3IuZGVmYXVsdHMuQkxBQ0ssXG4gICAgc3Ryb2tlV2lkdGg6IDMsXG4gICAgdHJhbnNpdGlvbjogJ3N0cm9rZSAyMDBtcyBlYXNlLWluLCBzdHJva2Utd2lkdGggMjAwbXMgZWFzZS1pbicsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBzdHJva2VXaWR0aDogNixcbiAgICAgIHN0cm9rZTogY29sb3IuZGVmYXVsdHMuUFJJTUFSWV9EQVJLLFxuICAgIH0sXG4gIH0sXG4gIC4uLihkaXNhYmxlZCAmJiB7XG4gICAgJyYgbGluZSc6IHtcbiAgICAgIC4uLmRpc2FibGVkU2Vjb25kYXJ5KCdzdHJva2UnKSxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgIH0sXG4gIH0pLFxuICAuLi4oY29ycmVjdG5lc3MgPT09ICdjb3JyZWN0JyAmJiB7XG4gICAgJyYgbGluZSc6IHtcbiAgICAgIC4uLmNvcnJlY3QoJ3N0cm9rZScpLFxuICAgIH0sXG4gIH0pLFxuICAuLi4oY29ycmVjdG5lc3MgPT09ICdpbmNvcnJlY3QnICYmIHtcbiAgICAnJiBsaW5lJzoge1xuICAgICAgLi4uaW5jb3JyZWN0KCdzdHJva2UnKSxcbiAgICB9LFxuICB9KSxcbiAgLi4uKGNvcnJlY3RuZXNzID09PSAnbWlzc2luZycgJiYge1xuICAgICcmIGxpbmUnOiB7XG4gICAgICAuLi5taXNzaW5nKCdzdHJva2UnKSxcbiAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnNCAzJyxcbiAgICB9LFxuICB9KSxcbn0pKTtcblxuZXhwb3J0IGNvbnN0IGxpbmVUb29sID0gKHR5cGUsIENvbXBvbmVudCkgPT4gKCkgPT4gKHtcbiAgdHlwZSxcbiAgQ29tcG9uZW50LFxuICBhZGRQb2ludDogKHBvaW50LCBtYXJrKSA9PiB7XG4gICAgaWYgKG1hcmsgJiYgZXF1YWxQb2ludHMobWFyay5yb290LCBwb2ludCkpIHtcbiAgICAgIHJldHVybiBtYXJrO1xuICAgIH1cblxuICAgIGlmICghbWFyaykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICAgIGZyb206IHBvaW50LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZXF1YWxQb2ludHMocG9pbnQsIG1hcmsuZnJvbSkpIHtcbiAgICAgIHJldHVybiB7IC4uLm1hcmsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5tYXJrLCBidWlsZGluZzogZmFsc2UsIHRvOiBwb2ludCB9O1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBsaW5lVG9vbENvbXBvbmVudCA9IChDb21wb25lbnQpID0+IHtcbiAgcmV0dXJuIGNsYXNzIExpbmVUb29sQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgLi4udHlwZXMuVG9vbFByb3BUeXBlRmllbGRzLFxuICAgICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgICAgIGxpbWl0TGFiZWxpbmc6IFByb3BUeXBlcy5ib29sLFxuICAgICAgY2hhbmdlTWFya1Byb3BzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGZyb206IHR5cGVzLlBvaW50VHlwZSxcbiAgICAgIHRvOiB0eXBlcy5Qb2ludFR5cGUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIHN0YXJ0RHJhZyA9ICgpID0+IHRoaXMuc2V0U3RhdGUoeyBtYXJrOiB7IC4uLnRoaXMucHJvcHMubWFyayB9IH0pO1xuXG4gICAgc3RvcERyYWcgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlLCBtYXJrIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgdXBkYXRlID0geyAuLi50aGlzLnN0YXRlLm1hcmsgfTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IG1hcms6IHVuZGVmaW5lZCB9LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gdXBkYXRlO1xuICAgICAgICBsZXQgc2hvdWxkTm90Q2hhbmdlID1cbiAgICAgICAgICB0eXBlICYmXG4gICAgICAgICAgKHR5cGUgPT09ICdwYXJhYm9sYScgfHwgdHlwZSA9PT0gJ3NpbmUnIHx8IHR5cGUgPT09ICdhYnNvbHV0ZScgfHwgdHlwZSA9PT0gJ2V4cG9uZW50aWFsJykgJiZcbiAgICAgICAgICBzYW1lQXhlcyh1cGRhdGUuZnJvbSwgdXBkYXRlLnRvKTtcbiAgICAgICAgaWYgKCFzaG91bGROb3RDaGFuZ2UgJiYgdHlwZSAmJiB0eXBlID09PSAnZXhwb25lbnRpYWwnICYmIHVwZGF0ZS5mcm9tICYmIHVwZGF0ZS50bykge1xuICAgICAgICAgIHNob3VsZE5vdENoYW5nZSA9IHVwZGF0ZS5mcm9tLnkgPT09IDAgfHwgdXBkYXRlLnRvLnkgPT09IDAgfHwgdXBkYXRlLmZyb20ueSAqIHVwZGF0ZS50by55IDwgMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwobWFyaywgdXBkYXRlKSAmJiAhc2hvdWxkTm90Q2hhbmdlKSB7XG4gICAgICAgICAgb25DaGFuZ2UobWFyaywgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNoYW5nZU1hcmsgPSAoeyBmcm9tLCB0bywgbWlkZGxlIH0pID0+IHtcbiAgICAgIGxldCBtYXJrID0geyAuLi50aGlzLnN0YXRlLm1hcmssIGZyb20sIHRvIH07XG5cbiAgICAgIGlmIChtaWRkbGUpIHtcbiAgICAgICAgbWFyayA9IHsgLi4ubWFyaywgbWlkZGxlIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrIH0pO1xuICAgIH07XG5cbiAgICBjaGFuZ2VNYXJrUHJvcHMgPSAoeyBmcm9tLCB0bywgbWlkZGxlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgb25DaGFuZ2UsIG1hcmsgfSA9IHRoaXMucHJvcHM7XG4gICAgICBsZXQgdXBkYXRlID0geyAuLi5tYXJrLCAuLi50aGlzLnN0YXRlLm1hcmsgfTtcblxuICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgdXBkYXRlID0geyAuLi51cGRhdGUsIGZyb20gfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHVwZGF0ZSA9IHsgLi4udXBkYXRlLCB0byB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobWlkZGxlKSB7XG4gICAgICAgIHVwZGF0ZSA9IHsgLi4udXBkYXRlLCBtaWRkbGUgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0VxdWFsKG1hcmssIHVwZGF0ZSkpIHtcbiAgICAgICAgb25DaGFuZ2UobWFyaywgdXBkYXRlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgeyBncmFwaFByb3BzLCBvbkNsaWNrLCBsYWJlbE5vZGUsIGxhYmVsTW9kZUVuYWJsZWQsIGNvb3JkaW5hdGVzT25Ib3ZlciwgbGltaXRMYWJlbGluZyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IG1hcmsgPSB0aGlzLnN0YXRlLm1hcmsgPyB0aGlzLnN0YXRlLm1hcmsgOiB0aGlzLnByb3BzLm1hcms7XG5cbiAgICAgIGNvbnN0IGZyb20gPSBjbG9uZURlZXAobWFyay5mcm9tKTtcbiAgICAgIGNvbnN0IHRvID0gY2xvbmVEZWVwKG1hcmsudG8pO1xuICAgICAgY29uc3QgbWlkZGxlID0gY2xvbmVEZWVwKG1hcmsubWlkZGxlKTtcblxuICAgICAgLy8gU0VUIERJU0FCTEVEXG4gICAgICAvLyBpZiBpdCdzIGEgYmFja2dyb3VuZCBtYXJrLCB3ZSBuZWVkIHRvIGZvcmNlIGRpc2FibGUgaXRcbiAgICAgIGlmIChmcm9tICYmIG1hcmsuaXNCYWNrZ3JvdW5kKSB7XG4gICAgICAgIGZyb20uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodG8gJiYgbWFyay5pc0JhY2tncm91bmQpIHtcbiAgICAgICAgdG8uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWlkZGxlICYmIG1hcmsuaXNCYWNrZ3JvdW5kKSB7XG4gICAgICAgIG1pZGRsZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb21wb25lbnRcbiAgICAgICAgICBkaXNhYmxlZD17bWFyay5kaXNhYmxlZH1cbiAgICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgICBjb3JyZWN0bmVzcz17bWFyay5jb3JyZWN0bmVzc31cbiAgICAgICAgICBmcm9tPXtmcm9tfVxuICAgICAgICAgIHRvPXt0b31cbiAgICAgICAgICBtaWRkbGU9e21pZGRsZX1cbiAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmNoYW5nZU1hcmt9XG4gICAgICAgICAgY2hhbmdlTWFya1Byb3BzPXt0aGlzLmNoYW5nZU1hcmtQcm9wc31cbiAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXt0aGlzLnN0YXJ0RHJhZ31cbiAgICAgICAgICBvbkRyYWdTdG9wPXt0aGlzLnN0b3BEcmFnfVxuICAgICAgICAgIGxhYmVsTm9kZT17bGFiZWxOb2RlfVxuICAgICAgICAgIGxhYmVsTW9kZUVuYWJsZWQ9e2xhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgbGltaXRMYWJlbGluZz17bGltaXRMYWJlbGluZ31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgZHJhZ09wdHMgPSAoKSA9PiAoe1xuICBib3VuZHM6IChwcm9wcywgeyBkb21haW4sIHJhbmdlIH0pID0+IHtcbiAgICBjb25zdCBhcmVhID0gdXRpbHMubGluZVRvQXJlYShwcm9wcy5mcm9tLCBwcm9wcy50byk7XG4gICAgcmV0dXJuIHV0aWxzLmJvdW5kcyhhcmVhLCBkb21haW4sIHJhbmdlKTtcbiAgfSxcbiAgYW5jaG9yUG9pbnQ6IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgZnJvbSB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIGZyb207XG4gIH0sXG4gIGZyb21EZWx0YTogKHByb3BzLCBkZWx0YSkgPT4ge1xuICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB1dGlscy5wb2ludChmcm9tKS5hZGQodXRpbHMucG9pbnQoZGVsdGEpKSxcbiAgICAgIHRvOiB1dGlscy5wb2ludCh0bykuYWRkKHV0aWxzLnBvaW50KGRlbHRhKSksXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgbGluZUJhc2UgPSAoQ29tcCwgb3B0cykgPT4ge1xuICBjb25zdCBEcmFnZ2FibGVDb21wID0gZ3JpZERyYWdnYWJsZShkcmFnT3B0cygpKShDb21wKTtcblxuICBjb25zdCBGcm9tUG9pbnQgPSBvcHRzICYmIG9wdHMuZnJvbSA/IG9wdHMuZnJvbSA6IEJhc2VQb2ludDtcbiAgY29uc3QgVG9Qb2ludCA9IG9wdHMgJiYgb3B0cy50byA/IG9wdHMudG8gOiBCYXNlUG9pbnQ7XG5cbiAgY2xhc3MgTGluZUJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICBjb29yZGluYXRlc09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUsXG4gICAgICBmcm9tOiB0eXBlcy5Qb2ludFR5cGUsXG4gICAgICB0bzogdHlwZXMuUG9pbnRUeXBlLFxuICAgICAgbWlkZGxlOiB0eXBlcy5Qb2ludFR5cGUsXG4gICAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkRyYWdTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkRyYWdTdG9wOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgY29ycmVjdG5lc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsaW1pdExhYmVsaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGNoYW5nZU1hcmtQcm9wczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsTm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB9O1xuXG4gICAgb25DaGFuZ2VQb2ludCA9IChwb2ludCkgPT4ge1xuICAgICAgY29uc3QgeyBtaWRkbGUsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gcG9pbnQ7XG5cbiAgICAgIC8vIGJlY2F1c2UgcG9pbnQuZnJvbS5sYWJlbCBhbmQgcG9pbnQudG8ubGFiZWwgY2FuIGJlIGRpZmZlcmVudFxuICAgICAgaWYgKCFlcXVhbFBvaW50cyhmcm9tLCB0bykpIHtcbiAgICAgICAgaWYgKG1pZGRsZSkge1xuICAgICAgICAgIHBvaW50Lm1pZGRsZSA9IHsgLi4ubWlkZGxlLCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhmcm9tLCB0bykgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9uQ2hhbmdlKHBvaW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZHJhZ0NvbXAgPSAoeyBmcm9tOiBkcmFnZ2VkRnJvbSwgdG86IGRyYWdnZWRUbyB9KSA9PiB7XG4gICAgICBjb25zdCB7IGZyb20sIHRvLCBvbkNoYW5nZSwgbWlkZGxlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAoZnJvbS5sYWJlbCkge1xuICAgICAgICBkcmFnZ2VkRnJvbS5sYWJlbCA9IGZyb20ubGFiZWw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0by5sYWJlbCkge1xuICAgICAgICBkcmFnZ2VkVG8ubGFiZWwgPSB0by5sYWJlbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgZnJvbTogZHJhZ2dlZEZyb20sIHRvOiBkcmFnZ2VkVG8gfTtcblxuICAgICAgaWYgKG1pZGRsZSkge1xuICAgICAgICB1cGRhdGVkLm1pZGRsZSA9IHsgLi4ubWlkZGxlLCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhkcmFnZ2VkRnJvbSwgZHJhZ2dlZFRvKSB9O1xuICAgICAgfVxuXG4gICAgICBvbkNoYW5nZSh1cGRhdGVkKTtcbiAgICB9O1xuXG4gICAgZHJhZ0Zyb20gPSAoZHJhZ2dlZEZyb20pID0+IHtcbiAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmIChmcm9tLmxhYmVsKSB7XG4gICAgICAgIGRyYWdnZWRGcm9tLmxhYmVsID0gZnJvbS5sYWJlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlcXVhbFBvaW50cyhkcmFnZ2VkRnJvbSwgdG8pKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VQb2ludCh7IGZyb206IGRyYWdnZWRGcm9tLCB0bzogdG8gfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRyYWdUbyA9IChkcmFnZ2VkVG8pID0+IHtcbiAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmICh0by5sYWJlbCkge1xuICAgICAgICBkcmFnZ2VkVG8ubGFiZWwgPSB0by5sYWJlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlcXVhbFBvaW50cyhmcm9tLCBkcmFnZ2VkVG8pKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VQb2ludCh7IGZyb206IGZyb20sIHRvOiBkcmFnZ2VkVG8gfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxhYmVsQ2hhbmdlID0gKHBvaW50LCB0eXBlKSA9PiB7XG4gICAgICBjb25zdCB7IGNoYW5nZU1hcmtQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4ucG9pbnQgfTtcblxuICAgICAgaWYgKCFwb2ludC5sYWJlbCB8fCBpc0VtcHR5KHBvaW50LmxhYmVsKSkge1xuICAgICAgICBkZWxldGUgdXBkYXRlLmxhYmVsO1xuICAgICAgfVxuXG4gICAgICBjaGFuZ2VNYXJrUHJvcHMoeyBbdHlwZV06IHVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgY2xpY2tQb2ludCA9IChwb2ludCwgdHlwZSwgZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyBjaGFuZ2VNYXJrUHJvcHMsIGRpc2FibGVkLCBmcm9tLCB0bywgbGFiZWxNb2RlRW5hYmxlZCwgbGltaXRMYWJlbGluZywgb25DbGljayB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKCFsYWJlbE1vZGVFbmFibGVkKSB7XG4gICAgICAgIG9uQ2xpY2socG9pbnQgfHwgZGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gbGltaXQgbGFiZWxpbmcgdGhlIHBvaW50cyBvZiB0aGUgbGluZVxuICAgICAgaWYgKGxpbWl0TGFiZWxpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ21pZGRsZScgJiYgIXBvaW50ICYmIGZyb20gJiYgdG8pIHtcbiAgICAgICAgcG9pbnQgPSB7IC4uLnBvaW50LCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhmcm9tLCB0bykgfTtcbiAgICAgIH1cblxuICAgICAgY2hhbmdlTWFya1Byb3BzKHsgZnJvbSwgdG8sIFt0eXBlXTogeyBsYWJlbDogJycsIC4uLnBvaW50IH0gfSk7XG5cbiAgICAgIGlmICh0aGlzLmlucHV0W3R5cGVdKSB7XG4gICAgICAgIHRoaXMuaW5wdXRbdHlwZV0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gSU1QT1JUQU5ULCBkbyBub3QgcmVtb3ZlXG4gICAgaW5wdXQgPSB7fTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyLFxuICAgICAgICBncmFwaFByb3BzLFxuICAgICAgICBvbkRyYWdTdGFydCxcbiAgICAgICAgb25EcmFnU3RvcCxcbiAgICAgICAgZnJvbSxcbiAgICAgICAgdG8sXG4gICAgICAgIG1pZGRsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvcnJlY3RuZXNzLFxuICAgICAgICBvbkNsaWNrLFxuICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgIGxhYmVsTW9kZUVuYWJsZWQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbW1vbiA9IHsgZ3JhcGhQcm9wcywgb25EcmFnU3RhcnQsIG9uRHJhZ1N0b3AsIGRpc2FibGVkLCBjb3JyZWN0bmVzcywgb25DbGljayB9O1xuICAgICAgY29uc3QgYW5nbGUgPSB0byA/IHRyaWcudG9EZWdyZWVzKHRyaWcuYW5nbGUoZnJvbSwgdG8pKSA6IDA7XG5cbiAgICAgIGxldCBmcm9tTGFiZWxOb2RlID0gbnVsbDtcbiAgICAgIGxldCB0b0xhYmVsTm9kZSA9IG51bGw7XG4gICAgICBsZXQgbGluZUxhYmVsTm9kZSA9IG51bGw7XG5cbiAgICAgIGlmIChsYWJlbE5vZGUpIHtcbiAgICAgICAgaWYgKGZyb20gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sICdsYWJlbCcpKSB7XG4gICAgICAgICAgZnJvbUxhYmVsTm9kZSA9IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dC5mcm9tID0gcil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshbGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgICAgICAgbWFyaz17ZnJvbX1cbiAgICAgICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhsYWJlbCkgPT4gdGhpcy5sYWJlbENoYW5nZSh7IC4uLmZyb20sIGxhYmVsIH0sICdmcm9tJyl9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICAgIGxhYmVsTm9kZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0bywgJ2xhYmVsJykpIHtcbiAgICAgICAgICB0b0xhYmVsTm9kZSA9IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dC50byA9IHIpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWxhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgIG1hcms9e3RvfVxuICAgICAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGxhYmVsKSA9PiB0aGlzLmxhYmVsQ2hhbmdlKHsgLi4udG8sIGxhYmVsIH0sICd0bycpfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaWRkbGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1pZGRsZSwgJ2xhYmVsJykpIHtcbiAgICAgICAgICBsaW5lTGFiZWxOb2RlID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgPE1hcmtMYWJlbFxuICAgICAgICAgICAgICBpbnB1dFJlZj17KHIpID0+ICh0aGlzLmlucHV0Lm1pZGRsZSA9IHIpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWxhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgIG1hcms9e21pZGRsZX1cbiAgICAgICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhsYWJlbCkgPT4gdGhpcy5sYWJlbENoYW5nZSh7IC4uLm1pZGRsZSwgbGFiZWwgfSwgJ21pZGRsZScpfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGluZUdyb3VwIGRpc2FibGVkPXtkaXNhYmxlZH0gY29ycmVjdG5lc3M9e2NvcnJlY3RuZXNzfT5cbiAgICAgICAgICB7dG8gJiYgKFxuICAgICAgICAgICAgPERyYWdnYWJsZUNvbXBcbiAgICAgICAgICAgICAgZnJvbT17ZnJvbX1cbiAgICAgICAgICAgICAgdG89e3RvfVxuICAgICAgICAgICAgICBtaWRkbGU9e21pZGRsZX1cbiAgICAgICAgICAgICAgb25EcmFnPXt0aGlzLmRyYWdDb21wfVxuICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSkgPT4gdGhpcy5jbGlja1BvaW50KG1pZGRsZSwgJ21pZGRsZScsIGRhdGEpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtsaW5lTGFiZWxOb2RlfVxuXG4gICAgICAgICAgPEZyb21Qb2ludFxuICAgICAgICAgICAgeD17ZnJvbS54fVxuICAgICAgICAgICAgeT17ZnJvbS55fVxuICAgICAgICAgICAgbGFiZWxOb2RlPXtsYWJlbE5vZGV9XG4gICAgICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnRnJvbX1cbiAgICAgICAgICAgIHsuLi5jb21tb259XG4gICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSkgPT4gdGhpcy5jbGlja1BvaW50KGZyb20sICdmcm9tJywgZGF0YSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZnJvbUxhYmVsTm9kZX1cblxuICAgICAgICAgIHt0byAmJiAoXG4gICAgICAgICAgICA8VG9Qb2ludFxuICAgICAgICAgICAgICB4PXt0by54fVxuICAgICAgICAgICAgICB5PXt0by55fVxuICAgICAgICAgICAgICBhbmdsZT17YW5nbGV9IC8vYW5nbGUgKyA0NX1cbiAgICAgICAgICAgICAgbGFiZWxOb2RlPXtsYWJlbE5vZGV9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzT25Ib3Zlcj17Y29vcmRpbmF0ZXNPbkhvdmVyfVxuICAgICAgICAgICAgICBvbkRyYWc9e3RoaXMuZHJhZ1RvfVxuICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSkgPT4gdGhpcy5jbGlja1BvaW50KHRvLCAndG8nLCBkYXRhKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dG9MYWJlbE5vZGV9XG4gICAgICAgIDwvU3R5bGVkTGluZUdyb3VwPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGluZUJhc2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc3R5bGVzID0ge1xuICBsaW5lOiAoKSA9PiAoe1xuICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgc3Ryb2tlOiBjb2xvci5kZWZhdWx0cy5CTEFDSyxcbiAgICBzdHJva2VXaWR0aDogMyxcbiAgICB0cmFuc2l0aW9uOiAnc3Ryb2tlIDIwMG1zIGVhc2UtaW4sIHN0cm9rZS13aWR0aCAyMDBtcyBlYXNlLWluJyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHN0cm9rZVdpZHRoOiA2LFxuICAgICAgc3Ryb2tlOiBjb2xvci5kZWZhdWx0cy5QUklNQVJZX0RBUkssXG4gICAgfSxcbiAgfSksXG4gIGFycm93OiAoKSA9PiAoe1xuICAgIGZpbGw6IGNvbG9yLmRlZmF1bHRzLkJMQUNLLFxuICB9KSxcbiAgZGlzYWJsZWRBcnJvdzogKCkgPT4gKHtcbiAgICAuLi5kaXNhYmxlZFNlY29uZGFyeSgpLFxuICB9KSxcbiAgZGlzYWJsZWRTZWNvbmRhcnk6ICgpID0+ICh7XG4gICAgLi4uZGlzYWJsZWRTZWNvbmRhcnkoJ3N0cm9rZScpLFxuICAgIHN0cm9rZVdpZHRoOiAyLFxuICB9KSxcbiAgZGlzYWJsZWQ6ICgpID0+ICh7XG4gICAgLi4uZGlzYWJsZWQoJ3N0cm9rZScpLFxuICAgIHN0cm9rZVdpZHRoOiAyLFxuICB9KSxcbiAgY29ycmVjdDogKHRoZW1lLCBrZXkpID0+ICh7XG4gICAgLi4uY29ycmVjdChrZXkpLFxuICB9KSxcbiAgaW5jb3JyZWN0OiAodGhlbWUsIGtleSkgPT4gKHtcbiAgICAuLi5pbmNvcnJlY3Qoa2V5KSxcbiAgfSksXG4gIG1pc3Npbmc6ICh0aGVtZSwga2V5KSA9PiAoe1xuICAgIC4uLm1pc3Npbmcoa2V5KSxcbiAgICBzdHJva2VXaWR0aDogMSxcbiAgICBzdHJva2VEYXNoYXJyYXk6ICc0IDMnLFxuICB9KSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsU0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksUUFBQSxHQUFBWixPQUFBO0FBQThDLFNBQUFhLFdBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFELENBQUEsT0FBQUUsZ0JBQUEsYUFBQUYsQ0FBQSxPQUFBRywyQkFBQSxhQUFBSixDQUFBLEVBQUFLLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTixDQUFBLEVBQUFDLENBQUEsWUFBQUMsZ0JBQUEsYUFBQUgsQ0FBQSxFQUFBUSxXQUFBLElBQUFQLENBQUEsQ0FBQVEsS0FBQSxDQUFBVCxDQUFBLEVBQUFFLENBQUE7QUFBQSxTQUFBRyww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