easy-richtextarea 4.0.1 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +0 -8
  2. package/example.js +1012 -595
  3. package/lib/browser.js +9 -9
  4. package/lib/constants.js +13 -4
  5. package/lib/contentCompare.js +34 -0
  6. package/lib/example/richTextarea.js +2 -2
  7. package/lib/example/view.js +18 -9
  8. package/lib/keyCodes.js +13 -0
  9. package/lib/main.js +1 -1
  10. package/lib/operation/delete.js +101 -52
  11. package/lib/operation/empty.js +21 -6
  12. package/lib/operation/insert.js +78 -31
  13. package/lib/operations/fromJSON.js +4 -4
  14. package/lib/operations/generate.js +11 -11
  15. package/lib/operations/transform.js +3 -7
  16. package/lib/richTextarea.js +244 -156
  17. package/lib/selection.js +55 -13
  18. package/lib/types.js +13 -13
  19. package/lib/undoBuffer.js +105 -0
  20. package/package.json +3 -2
  21. package/src/browser.js +3 -3
  22. package/src/constants.js +1 -0
  23. package/src/contentCompare.js +34 -0
  24. package/src/example/richTextarea.js +11 -9
  25. package/src/example/view.js +28 -10
  26. package/src/keyCodes.js +3 -0
  27. package/src/main.js +1 -0
  28. package/src/operation/delete.js +135 -58
  29. package/src/operation/empty.js +19 -14
  30. package/src/operation/insert.js +97 -39
  31. package/src/operations/fromJSON.js +4 -4
  32. package/src/operations/generate.js +17 -13
  33. package/src/operations/transform.js +3 -3
  34. package/src/richTextarea.js +316 -185
  35. package/src/selection.js +53 -9
  36. package/src/types.js +6 -6
  37. package/src/undoBuffer.js +73 -0
  38. package/test/content/transform.js +15 -17
  39. package/test/helpers.js +27 -21
  40. package/test/operation/delete.js +187 -147
  41. package/test/operation/empty.js +3 -5
  42. package/test/operation/insert.js +134 -118
  43. package/test/operations/generate.js +25 -29
  44. package/test/operations/transform.js +37 -98
  45. package/lib/stringCompare.js +0 -33
  46. package/src/stringCompare.js +0 -33
package/lib/browser.js CHANGED
@@ -9,6 +9,12 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ Selection: function() {
13
+ return _selection.default;
14
+ },
15
+ RichTextarea: function() {
16
+ return _richTextarea.default;
17
+ },
12
18
  EmptyOperation: function() {
13
19
  return _empty.default;
14
20
  },
@@ -32,14 +38,10 @@ _export(exports, {
32
38
  },
33
39
  transformOperations: function() {
34
40
  return _transform1.default;
35
- },
36
- Selection: function() {
37
- return _selection.default;
38
- },
39
- RichTextarea: function() {
40
- return _richTextarea.default;
41
41
  }
42
42
  });
43
+ var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
44
+ var _richTextarea = /*#__PURE__*/ _interopRequireDefault(require("./richTextarea"));
43
45
  var _empty = /*#__PURE__*/ _interopRequireDefault(require("./operation/empty"));
44
46
  var _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
45
47
  var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
@@ -48,12 +50,10 @@ var _toJSON = /*#__PURE__*/ _interopRequireDefault(require("./operations/toJSON"
48
50
  var _fromJSON = /*#__PURE__*/ _interopRequireDefault(require("./operations/fromJSON"));
49
51
  var _generate = /*#__PURE__*/ _interopRequireDefault(require("./operations/generate"));
50
52
  var _transform1 = /*#__PURE__*/ _interopRequireDefault(require("./operations/transform"));
51
- var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
52
- var _richTextarea = /*#__PURE__*/ _interopRequireDefault(require("./richTextarea"));
53
53
  function _interopRequireDefault(obj) {
54
54
  return obj && obj.__esModule ? obj : {
55
55
  default: obj
56
56
  };
57
57
  }
58
58
 
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEVtcHR5T3BlcmF0aW9uIH0gZnJvbSBcIi4vb3BlcmF0aW9uL2VtcHR5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEluc2VydE9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi9pbnNlcnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGVsZXRlT3BlcmF0aW9uIH0gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmFuc2Zvcm1Db250ZW50IH0gZnJvbSBcIi4vY29udGVudC90cmFuc2Zvcm1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3BlcmF0aW9uc1RvSlNPTiB9IGZyb20gXCIuL29wZXJhdGlvbnMvdG9KU09OXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9wZXJhdGlvbnNGcm9tSlNPTiB9IGZyb20gXCIuL29wZXJhdGlvbnMvZnJvbUpTT05cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2VuZXJhdGVPcGVyYXRpb25zIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy9nZW5lcmF0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmFuc2Zvcm1PcGVyYXRpb25zIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy90cmFuc2Zvcm1cIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSaWNoVGV4dGFyZWEgfSBmcm9tIFwiLi9yaWNoVGV4dGFyZWFcIjtcbiJdLCJuYW1lcyI6WyJFbXB0eU9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsInRyYW5zZm9ybUNvbnRlbnQiLCJvcGVyYXRpb25zVG9KU09OIiwib3BlcmF0aW9uc0Zyb21KU09OIiwiZ2VuZXJhdGVPcGVyYXRpb25zIiwidHJhbnNmb3JtT3BlcmF0aW9ucyIsIlNlbGVjdGlvbiIsIlJpY2hUZXh0YXJlYSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBRW9CQSxjQUFjO2VBQWRBLGNBQWM7O0lBQ2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFDZkMsZUFBZTtlQUFmQSxlQUFlOztJQUNmQyxnQkFBZ0I7ZUFBaEJBLGtCQUFnQjs7SUFDaEJDLGdCQUFnQjtlQUFoQkEsZUFBZ0I7O0lBQ2hCQyxrQkFBa0I7ZUFBbEJBLGlCQUFrQjs7SUFDbEJDLGtCQUFrQjtlQUFsQkEsaUJBQWtCOztJQUNsQkMsbUJBQW1CO2VBQW5CQSxtQkFBbUI7O0lBRW5CQyxTQUFTO2VBQVRBLGtCQUFTOztJQUVUQyxZQUFZO2VBQVpBLHFCQUFZOzs7MERBWFU7MkRBQ0M7MkRBQ0E7OERBQ0M7MkRBQ0E7NkRBQ0U7NkRBQ0E7K0RBQ0M7OERBRVY7aUVBRUcifQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuL3JpY2hUZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbXB0eU9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi9lbXB0eVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbnNlcnRPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlbGV0ZU9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi9kZWxldGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHJhbnNmb3JtQ29udGVudCB9IGZyb20gXCIuL2NvbnRlbnQvdHJhbnNmb3JtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9wZXJhdGlvbnNUb0pTT04gfSBmcm9tIFwiLi9vcGVyYXRpb25zL3RvSlNPTlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvcGVyYXRpb25zRnJvbUpTT04gfSBmcm9tIFwiLi9vcGVyYXRpb25zL2Zyb21KU09OXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdlbmVyYXRlT3BlcmF0aW9ucyB9IGZyb20gXCIuL29wZXJhdGlvbnMvZ2VuZXJhdGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHJhbnNmb3JtT3BlcmF0aW9ucyB9IGZyb20gXCIuL29wZXJhdGlvbnMvdHJhbnNmb3JtXCI7XG5cbiJdLCJuYW1lcyI6WyJTZWxlY3Rpb24iLCJSaWNoVGV4dGFyZWEiLCJFbXB0eU9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsInRyYW5zZm9ybUNvbnRlbnQiLCJvcGVyYXRpb25zVG9KU09OIiwib3BlcmF0aW9uc0Zyb21KU09OIiwiZ2VuZXJhdGVPcGVyYXRpb25zIiwidHJhbnNmb3JtT3BlcmF0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBR29CQSxTQUFTO2VBQVRBLGtCQUFTOztJQUNUQyxZQUFZO2VBQVpBLHFCQUFZOztJQUNaQyxjQUFjO2VBQWRBLGNBQWM7O0lBQ2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFDZkMsZUFBZTtlQUFmQSxlQUFlOztJQUNmQyxnQkFBZ0I7ZUFBaEJBLGtCQUFnQjs7SUFDaEJDLGdCQUFnQjtlQUFoQkEsZUFBZ0I7O0lBQ2hCQyxrQkFBa0I7ZUFBbEJBLGlCQUFrQjs7SUFDbEJDLGtCQUFrQjtlQUFsQkEsaUJBQWtCOztJQUNsQkMsbUJBQW1CO2VBQW5CQSxtQkFBbUI7Ozs4REFURjtpRUFDRzswREFDRTsyREFDQzsyREFDQTs4REFDQzsyREFDQTs2REFDRTs2REFDQTsrREFDQyJ9
package/lib/constants.js CHANGED
@@ -2,12 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "EMPTY_STRING", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ TEXT: function() {
13
+ return TEXT;
14
+ },
15
+ EMPTY_STRING: function() {
8
16
  return EMPTY_STRING;
9
17
  }
10
18
  });
19
+ var TEXT = "text";
11
20
  var EMPTY_STRING = "";
12
21
 
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIl0sIm5hbWVzIjpbIkVNUFRZX1NUUklORyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBRWFBOzs7ZUFBQUE7OztBQUFOLElBQU1BLGVBQWUifQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUID0gXCJ0ZXh0XCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiJdLCJuYW1lcyI6WyJURVhUIiwiRU1QVFlfU1RSSU5HIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFFYUEsSUFBSTtlQUFKQTs7SUFDQUMsWUFBWTtlQUFaQTs7O0FBRE4sSUFBTUQsT0FBTztBQUNiLElBQU1DLGVBQWUifQ==
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return contentCompare;
9
+ }
10
+ });
11
+ var _constants = require("./constants");
12
+ function contentCompare(contentA, contentB) {
13
+ if (contentA === _constants.EMPTY_STRING && contentB === _constants.EMPTY_STRING) {
14
+ return false;
15
+ }
16
+ if (contentA === _constants.EMPTY_STRING) {
17
+ return true;
18
+ }
19
+ if (contentB === _constants.EMPTY_STRING) {
20
+ return false;
21
+ }
22
+ var codePointA = contentA.codePointAt(0), codePointB = contentB.codePointAt(0);
23
+ if (codePointA < codePointB) {
24
+ return true;
25
+ }
26
+ if (codePointA > codePointB) {
27
+ return false;
28
+ }
29
+ contentA = contentA.slice(1); ///
30
+ contentB = contentB.slice(1); ///
31
+ return contentCompare(contentA, contentB);
32
+ }
33
+
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZW50Q29tcGFyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRlbnRDb21wYXJlKGNvbnRlbnRBLCBjb250ZW50Qikge1xuICBpZiAoKGNvbnRlbnRBID09PSBFTVBUWV9TVFJJTkcpICYmIChjb250ZW50QiA9PT0gRU1QVFlfU1RSSU5HKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb250ZW50QSA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoY29udGVudEIgPT09IEVNUFRZX1NUUklORykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNvZGVQb2ludEEgPSBjb250ZW50QS5jb2RlUG9pbnRBdCgwKSxcbiAgICAgICAgY29kZVBvaW50QiA9IGNvbnRlbnRCLmNvZGVQb2ludEF0KDApO1xuXG4gIGlmIChjb2RlUG9pbnRBIDwgY29kZVBvaW50Qikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGNvZGVQb2ludEEgPiBjb2RlUG9pbnRCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29udGVudEEgPSBjb250ZW50QS5zbGljZSgxKTsgLy8vXG5cbiAgY29udGVudEIgPSBjb250ZW50Qi5zbGljZSgxKTsgLy8vXG5cbiAgcmV0dXJuIGNvbnRlbnRDb21wYXJlKGNvbnRlbnRBLCBjb250ZW50Qik7XG59XG4iXSwibmFtZXMiOlsiY29udGVudENvbXBhcmUiLCJjb250ZW50QSIsImNvbnRlbnRCIiwiRU1QVFlfU1RSSU5HIiwiY29kZVBvaW50QSIsImNvZGVQb2ludEF0IiwiY29kZVBvaW50QiIsInNsaWNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFJQTs7O2VBQXdCQTs7O3lCQUZLO0FBRWQsU0FBU0EsZUFBZUMsUUFBUSxFQUFFQyxRQUFRLEVBQUU7SUFDekQsSUFBSSxBQUFDRCxhQUFhRSx1QkFBWSxJQUFNRCxhQUFhQyx1QkFBWSxFQUFHO1FBQzlELE9BQU8sS0FBSztJQUNkLENBQUM7SUFFRCxJQUFJRixhQUFhRSx1QkFBWSxFQUFFO1FBQzdCLE9BQU8sSUFBSTtJQUNiLENBQUM7SUFFRCxJQUFJRCxhQUFhQyx1QkFBWSxFQUFFO1FBQzdCLE9BQU8sS0FBSztJQUNkLENBQUM7SUFFRCxJQUFNQyxhQUFhSCxTQUFTSSxXQUFXLENBQUMsSUFDbENDLGFBQWFKLFNBQVNHLFdBQVcsQ0FBQztJQUV4QyxJQUFJRCxhQUFhRSxZQUFZO1FBQzNCLE9BQU8sSUFBSTtJQUNiLENBQUM7SUFFRCxJQUFJRixhQUFhRSxZQUFZO1FBQzNCLE9BQU8sS0FBSztJQUNkLENBQUM7SUFFREwsV0FBV0EsU0FBU00sS0FBSyxDQUFDLElBQUksR0FBRztJQUVqQ0wsV0FBV0EsU0FBU0ssS0FBSyxDQUFDLElBQUksR0FBRztJQUVqQyxPQUFPUCxlQUFlQyxVQUFVQztBQUNsQyJ9
@@ -27,7 +27,7 @@ function _taggedTemplateLiteral(strings, raw) {
27
27
  }
28
28
  function _templateObject() {
29
29
  var data = _taggedTemplateLiteral([
30
- "\n\n border: 1px solid black;\n width: 32rem;\n height: 32rem;\n padding: 0.25rem;\n font-size: 1.2rem;\n font-family: monospace;\n \n display: none;\n \n .active {\n display: block;\n }\n\n"
30
+ "\n\n color: #eee;\n width: 64rem;\n resize: none;\n height: 64rem;\n padding: 0.25rem;\n font-size: 1.6rem;\n font-family: monospace;\n margin-right: 2rem;\n background-color: #222;\n \n ::selection {\n color: #fff;\n background-color: #c80;\n }\n\n"
31
31
  ]);
32
32
  _templateObject = function _templateObject() {
33
33
  return data;
@@ -36,4 +36,4 @@ function _templateObject() {
36
36
  }
37
37
  var _default = (0, _easyWithStyle.default)(_browser.RichTextarea)(_templateObject());
38
38
 
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3JpY2hUZXh0YXJlYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuLi9icm93c2VyXCI7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJpY2hUZXh0YXJlYSlgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG4gIHdpZHRoOiAzMnJlbTtcbiAgaGVpZ2h0OiAzMnJlbTtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gIFxuICBkaXNwbGF5OiBub25lO1xuICBcbiAgLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuYDtcbiJdLCJuYW1lcyI6WyJ3aXRoU3R5bGUiLCJSaWNoVGV4dGFyZWEiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBQTs7O2tFQUpzQjt1QkFFTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUU3QixXQUFlQSxJQUFBQSxzQkFBUyxFQUFDQyxxQkFBWSJ9
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3JpY2hUZXh0YXJlYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuLi9icm93c2VyXCI7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJpY2hUZXh0YXJlYSlgXG5cbiAgY29sb3I6ICNlZWU7XG4gIHdpZHRoOiA2NHJlbTtcbiAgcmVzaXplOiBub25lO1xuICBoZWlnaHQ6IDY0cmVtO1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBmb250LXNpemU6IDEuNnJlbTtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgbWFyZ2luLXJpZ2h0OiAycmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyO1xuICAgIFxuICA6OnNlbGVjdGlvbiB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2M4MDtcbiAgfVxuXG5gO1xuIl0sIm5hbWVzIjpbIndpdGhTdHlsZSIsIlJpY2hUZXh0YXJlYSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUFBOzs7a0VBSnNCO3VCQUVPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRTdCLFdBQWVBLElBQUFBLHNCQUFTLEVBQUNDLHFCQUFZIn0=
@@ -14,27 +14,36 @@ function _interopRequireDefault(obj) {
14
14
  default: obj
15
15
  };
16
16
  }
17
- var content = "", richTextarea = /*#__PURE__*/ React.createElement(_richTextarea.default, {
17
+ var content = "", activeRichTextarea = /*#__PURE__*/ React.createElement(_richTextarea.default, {
18
18
  onChange: changeHandler,
19
19
  onScroll: scrollHandler,
20
20
  onFocus: focusHandler,
21
21
  onBlur: blurHandler
22
- });
23
- richTextarea.setContent(content);
24
- richTextarea.activate();
22
+ }), inactiveRichTextarea = /*#__PURE__*/ React.createElement(_richTextarea.default, null);
23
+ activeRichTextarea.setContent(content);
24
+ activeRichTextarea.activate();
25
25
  var View = function(properties) {
26
26
  return /*#__PURE__*/ React.createElement("div", {
27
27
  className: "view"
28
- }, richTextarea);
28
+ }, activeRichTextarea, inactiveRichTextarea);
29
29
  };
30
30
  var _default = View;
31
31
  function changeHandler(event, element) {
32
- var richTextarea = element, contentChanged = richTextarea.hasContentChanged(), selectionChanged = richTextarea.hasSelectionChanged();
32
+ var contentChanged = activeRichTextarea.hasContentChanged(), selectionChanged = activeRichTextarea.hasSelectionChanged();
33
33
  console.log(contentChanged, selectionChanged);
34
+ if (contentChanged) {
35
+ var content = activeRichTextarea.getContent();
36
+ inactiveRichTextarea.setContent(content);
37
+ }
38
+ if (selectionChanged) {
39
+ var selection = activeRichTextarea.getSelection();
40
+ inactiveRichTextarea.setSelection(selection);
41
+ }
34
42
  }
35
43
  function scrollHandler(event, element) {
36
- var scrollTop = element.getScrollTop(), scrollLeft = element.getScrollLeft();
37
- console.log(scrollTop, scrollLeft);
44
+ var scrollTop = activeRichTextarea.getScrollTop(), scrollLeft = activeRichTextarea.getScrollLeft();
45
+ inactiveRichTextarea.setScrollTop(scrollTop);
46
+ inactiveRichTextarea.setScrollLeft(scrollLeft);
38
47
  }
39
48
  function focusHandler(event, element) {
40
49
  console.log("focus");
@@ -43,4 +52,4 @@ function blurHandler(event, element) {
43
52
  console.log("blur");
44
53
  }
45
54
 
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5cbmNvbnN0IGNvbnRlbnQgPSBcIlwiLFxuICAgICAgcmljaFRleHRhcmVhID1cblxuICAgICAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfSBvblNjcm9sbD17c2Nyb2xsSGFuZGxlcn0gb25Gb2N1cz17Zm9jdXNIYW5kbGVyfSBvbkJsdXI9e2JsdXJIYW5kbGVyfSAvPlxuXG4gICAgICA7XG5cbnJpY2hUZXh0YXJlYS5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG5yaWNoVGV4dGFyZWEuYWN0aXZhdGUoKTtcblxuY29uc3QgVmlldyA9IChwcm9wZXJ0aWVzKSA9PlxuXG4gIDxkaXYgY2xhc3NOYW1lPVwidmlld1wiPlxuICAgIHtyaWNoVGV4dGFyZWF9XG4gIDwvZGl2PlxuXG47XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXc7XG5cbmZ1bmN0aW9uIGNoYW5nZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3QgcmljaFRleHRhcmVhID0gZWxlbWVudCwgLy8vXG4gICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gcmljaFRleHRhcmVhLmhhc0NvbnRlbnRDaGFuZ2VkKCksXG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSByaWNoVGV4dGFyZWEuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpO1xuXG4gIGNvbnNvbGUubG9nKGNvbnRlbnRDaGFuZ2VkLCBzZWxlY3Rpb25DaGFuZ2VkKVxufVxuXG5mdW5jdGlvbiBzY3JvbGxIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHNjcm9sbFRvcCA9IGVsZW1lbnQuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgIHNjcm9sbExlZnQgPSBlbGVtZW50LmdldFNjcm9sbExlZnQoKTtcblxuICBjb25zb2xlLmxvZyhzY3JvbGxUb3AsIHNjcm9sbExlZnQpXG59XG5cbmZ1bmN0aW9uIGZvY3VzSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zb2xlLmxvZyhcImZvY3VzXCIpXG59XG5cbmZ1bmN0aW9uIGJsdXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnNvbGUubG9nKFwiYmx1clwiKVxufVxuIl0sIm5hbWVzIjpbImNvbnRlbnQiLCJyaWNoVGV4dGFyZWEiLCJSaWNoVGV4dGFyZWEiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvblNjcm9sbCIsInNjcm9sbEhhbmRsZXIiLCJvbkZvY3VzIiwiZm9jdXNIYW5kbGVyIiwib25CbHVyIiwiYmx1ckhhbmRsZXIiLCJzZXRDb250ZW50IiwiYWN0aXZhdGUiLCJWaWV3IiwicHJvcGVydGllcyIsImRpdiIsImNsYXNzTmFtZSIsImV2ZW50IiwiZWxlbWVudCIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnNvbGUiLCJsb2ciLCJzY3JvbGxUb3AiLCJnZXRTY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0U2Nyb2xsTGVmdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBdUJBOzs7ZUFBQTs7O2lFQXJCeUI7Ozs7OztBQUV6QixJQUFNQSxVQUFVLElBQ1ZDLDZCQUVFLG9CQUFDQyxxQkFBWTtJQUFDQyxVQUFVQztJQUFlQyxVQUFVQztJQUFlQyxTQUFTQztJQUFjQyxRQUFRQzs7QUFJdkdULGFBQWFVLFVBQVUsQ0FBQ1g7QUFFeEJDLGFBQWFXLFFBQVE7QUFFckIsSUFBTUMsT0FBTyxTQUFDQzt5QkFFWixvQkFBQ0M7UUFBSUMsV0FBVTtPQUNaZjs7SUFLTCxXQUFlWTtBQUVmLFNBQVNULGNBQWNhLEtBQUssRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQU1qQixlQUFlaUIsU0FDZkMsaUJBQWlCbEIsYUFBYW1CLGlCQUFpQixJQUMvQ0MsbUJBQW1CcEIsYUFBYXFCLG1CQUFtQjtJQUV6REMsUUFBUUMsR0FBRyxDQUFDTCxnQkFBZ0JFO0FBQzlCO0FBRUEsU0FBU2YsY0FBY1csS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBTU8sWUFBWVAsUUFBUVEsWUFBWSxJQUNoQ0MsYUFBYVQsUUFBUVUsYUFBYTtJQUV4Q0wsUUFBUUMsR0FBRyxDQUFDQyxXQUFXRTtBQUN6QjtBQUVBLFNBQVNuQixhQUFhUyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNwQ0ssUUFBUUMsR0FBRyxDQUFDO0FBQ2Q7QUFFQSxTQUFTZCxZQUFZTyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNuQ0ssUUFBUUMsR0FBRyxDQUFDO0FBQ2QifQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5cbmNvbnN0IGNvbnRlbnQgPSBcIlwiLFxuICAgICAgYWN0aXZlUmljaFRleHRhcmVhID1cblxuICAgICAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfSBvblNjcm9sbD17c2Nyb2xsSGFuZGxlcn0gb25Gb2N1cz17Zm9jdXNIYW5kbGVyfSBvbkJsdXI9e2JsdXJIYW5kbGVyfSAvPlxuXG4gICAgICAsXG4gICAgICBpbmFjdGl2ZVJpY2hUZXh0YXJlYSA9XG5cbiAgICAgICAgPFJpY2hUZXh0YXJlYSAvPlxuXG4gICAgICA7XG5cbmFjdGl2ZVJpY2hUZXh0YXJlYS5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG5hY3RpdmVSaWNoVGV4dGFyZWEuYWN0aXZhdGUoKTtcblxuY29uc3QgVmlldyA9IChwcm9wZXJ0aWVzKSA9PlxuXG4gIDxkaXYgY2xhc3NOYW1lPVwidmlld1wiPlxuICAgIHthY3RpdmVSaWNoVGV4dGFyZWF9XG4gICAge2luYWN0aXZlUmljaFRleHRhcmVhfVxuICA8L2Rpdj5cblxuO1xuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuXG5mdW5jdGlvbiBjaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gYWN0aXZlUmljaFRleHRhcmVhLmhhc0NvbnRlbnRDaGFuZ2VkKCksXG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSBhY3RpdmVSaWNoVGV4dGFyZWEuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpO1xuXG4gIGNvbnNvbGUubG9nKGNvbnRlbnRDaGFuZ2VkLCBzZWxlY3Rpb25DaGFuZ2VkKVxuXG4gIGlmIChjb250ZW50Q2hhbmdlZCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhY3RpdmVSaWNoVGV4dGFyZWEuZ2V0Q29udGVudCgpO1xuXG4gICAgaW5hY3RpdmVSaWNoVGV4dGFyZWEuc2V0Q29udGVudChjb250ZW50KTtcbiAgfVxuXG4gIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gYWN0aXZlUmljaFRleHRhcmVhLmdldFNlbGVjdGlvbigpO1xuXG4gICAgaW5hY3RpdmVSaWNoVGV4dGFyZWEuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBzY3JvbGxUb3AgPSBhY3RpdmVSaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgIHNjcm9sbExlZnQgPSBhY3RpdmVSaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsTGVmdCgpO1xuXG4gIGluYWN0aXZlUmljaFRleHRhcmVhLnNldFNjcm9sbFRvcChzY3JvbGxUb3ApO1xuICBpbmFjdGl2ZVJpY2hUZXh0YXJlYS5zZXRTY3JvbGxMZWZ0KHNjcm9sbExlZnQpO1xufVxuXG5mdW5jdGlvbiBmb2N1c0hhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc29sZS5sb2coXCJmb2N1c1wiKVxufVxuXG5mdW5jdGlvbiBibHVySGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zb2xlLmxvZyhcImJsdXJcIilcbn1cbiJdLCJuYW1lcyI6WyJjb250ZW50IiwiYWN0aXZlUmljaFRleHRhcmVhIiwiUmljaFRleHRhcmVhIiwib25DaGFuZ2UiLCJjaGFuZ2VIYW5kbGVyIiwib25TY3JvbGwiLCJzY3JvbGxIYW5kbGVyIiwib25Gb2N1cyIsImZvY3VzSGFuZGxlciIsIm9uQmx1ciIsImJsdXJIYW5kbGVyIiwiaW5hY3RpdmVSaWNoVGV4dGFyZWEiLCJzZXRDb250ZW50IiwiYWN0aXZhdGUiLCJWaWV3IiwicHJvcGVydGllcyIsImRpdiIsImNsYXNzTmFtZSIsImV2ZW50IiwiZWxlbWVudCIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnNvbGUiLCJsb2ciLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwic2V0U2VsZWN0aW9uIiwic2Nyb2xsVG9wIiwiZ2V0U2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsImdldFNjcm9sbExlZnQiLCJzZXRTY3JvbGxUb3AiLCJzZXRTY3JvbGxMZWZ0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkE2QkE7OztlQUFBOzs7aUVBM0J5Qjs7Ozs7O0FBRXpCLElBQU1BLFVBQVUsSUFDVkMsbUNBRUUsb0JBQUNDLHFCQUFZO0lBQUNDLFVBQVVDO0lBQWVDLFVBQVVDO0lBQWVDLFNBQVNDO0lBQWNDLFFBQVFDO0lBR2pHQyxxQ0FFRSxvQkFBQ1QscUJBQVk7QUFJckJELG1CQUFtQlcsVUFBVSxDQUFDWjtBQUU5QkMsbUJBQW1CWSxRQUFRO0FBRTNCLElBQU1DLE9BQU8sU0FBQ0M7eUJBRVosb0JBQUNDO1FBQUlDLFdBQVU7T0FDWmhCLG9CQUNBVTs7SUFLTCxXQUFlRztBQUVmLFNBQVNWLGNBQWNjLEtBQUssRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQU1DLGlCQUFpQm5CLG1CQUFtQm9CLGlCQUFpQixJQUNyREMsbUJBQW1CckIsbUJBQW1Cc0IsbUJBQW1CO0lBRS9EQyxRQUFRQyxHQUFHLENBQUNMLGdCQUFnQkU7SUFFNUIsSUFBSUYsZ0JBQWdCO1FBQ2xCLElBQU1wQixVQUFVQyxtQkFBbUJ5QixVQUFVO1FBRTdDZixxQkFBcUJDLFVBQVUsQ0FBQ1o7SUFDbEMsQ0FBQztJQUVELElBQUlzQixrQkFBa0I7UUFDcEIsSUFBTUssWUFBWTFCLG1CQUFtQjJCLFlBQVk7UUFFakRqQixxQkFBcUJrQixZQUFZLENBQUNGO0lBQ3BDLENBQUM7QUFDSDtBQUVBLFNBQVNyQixjQUFjWSxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNyQyxJQUFNVyxZQUFZN0IsbUJBQW1COEIsWUFBWSxJQUMzQ0MsYUFBYS9CLG1CQUFtQmdDLGFBQWE7SUFFbkR0QixxQkFBcUJ1QixZQUFZLENBQUNKO0lBQ2xDbkIscUJBQXFCd0IsYUFBYSxDQUFDSDtBQUNyQztBQUVBLFNBQVN4QixhQUFhVSxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNwQ0ssUUFBUUMsR0FBRyxDQUFDO0FBQ2Q7QUFFQSxTQUFTZixZQUFZUSxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNuQ0ssUUFBUUMsR0FBRyxDQUFDO0FBQ2QifQ==
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Z_KEY_CODE", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Z_KEY_CODE;
9
+ }
10
+ });
11
+ var Z_KEY_CODE = 90;
12
+
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXlDb2Rlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpfS0VZX0NPREUgPSA5MDtcbiJdLCJuYW1lcyI6WyJaX0tFWV9DT0RFIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFFYUE7OztlQUFBQTs7O0FBQU4sSUFBTUEsYUFBYSJ9
package/lib/main.js CHANGED
@@ -56,4 +56,4 @@ function _interopRequireDefault(obj) {
56
56
  };
57
57
  }
58
58
 
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVtcHR5T3BlcmF0aW9uIH0gZnJvbSBcIi4vb3BlcmF0aW9uL2VtcHR5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEluc2VydE9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi9pbnNlcnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGVsZXRlT3BlcmF0aW9uIH0gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmFuc2Zvcm1Db250ZW50IH0gZnJvbSBcIi4vY29udGVudC90cmFuc2Zvcm1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3BlcmF0aW9uc1RvSlNPTiB9IGZyb20gXCIuL29wZXJhdGlvbnMvdG9KU09OXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9wZXJhdGlvbnNGcm9tSlNPTiB9IGZyb20gXCIuL29wZXJhdGlvbnMvZnJvbUpTT05cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2VuZXJhdGVPcGVyYXRpb25zIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy9nZW5lcmF0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0cmFuc2Zvcm1PcGVyYXRpb25zIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy90cmFuc2Zvcm1cIjtcbiJdLCJuYW1lcyI6WyJ0eXBlcyIsIlNlbGVjdGlvbiIsIkVtcHR5T3BlcmF0aW9uIiwiSW5zZXJ0T3BlcmF0aW9uIiwiRGVsZXRlT3BlcmF0aW9uIiwidHJhbnNmb3JtQ29udGVudCIsIm9wZXJhdGlvbnNUb0pTT04iLCJvcGVyYXRpb25zRnJvbUpTT04iLCJnZW5lcmF0ZU9wZXJhdGlvbnMiLCJ0cmFuc2Zvcm1PcGVyYXRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFFb0JBLEtBQUs7ZUFBTEEsY0FBSzs7SUFDTEMsU0FBUztlQUFUQSxrQkFBUzs7SUFDVEMsY0FBYztlQUFkQSxjQUFjOztJQUNkQyxlQUFlO2VBQWZBLGVBQWU7O0lBQ2ZDLGVBQWU7ZUFBZkEsZUFBZTs7SUFDZkMsZ0JBQWdCO2VBQWhCQSxrQkFBZ0I7O0lBQ2hCQyxnQkFBZ0I7ZUFBaEJBLGVBQWdCOztJQUNoQkMsa0JBQWtCO2VBQWxCQSxpQkFBa0I7O0lBQ2xCQyxrQkFBa0I7ZUFBbEJBLGlCQUFrQjs7SUFDbEJDLG1CQUFtQjtlQUFuQkEsbUJBQW1COzs7MERBVE47OERBQ0k7MERBQ0s7MkRBQ0M7MkRBQ0E7OERBQ0M7MkRBQ0E7NkRBQ0U7NkRBQ0E7K0RBQ0MifQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1wdHlPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb24vZW1wdHlcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5zZXJ0T3BlcmF0aW9uIH0gZnJvbSBcIi4vb3BlcmF0aW9uL2luc2VydFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWxldGVPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb24vZGVsZXRlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyYW5zZm9ybUNvbnRlbnQgfSBmcm9tIFwiLi9jb250ZW50L3RyYW5zZm9ybVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvcGVyYXRpb25zVG9KU09OIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy90b0pTT05cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3BlcmF0aW9uc0Zyb21KU09OIH0gZnJvbSBcIi4vb3BlcmF0aW9ucy9mcm9tSlNPTlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBnZW5lcmF0ZU9wZXJhdGlvbnMgfSBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRyYW5zZm9ybU9wZXJhdGlvbnMgfSBmcm9tIFwiLi9vcGVyYXRpb25zL3RyYW5zZm9ybVwiO1xuIl0sIm5hbWVzIjpbInR5cGVzIiwiU2VsZWN0aW9uIiwiRW1wdHlPcGVyYXRpb24iLCJJbnNlcnRPcGVyYXRpb24iLCJEZWxldGVPcGVyYXRpb24iLCJ0cmFuc2Zvcm1Db250ZW50Iiwib3BlcmF0aW9uc1RvSlNPTiIsIm9wZXJhdGlvbnNGcm9tSlNPTiIsImdlbmVyYXRlT3BlcmF0aW9ucyIsInRyYW5zZm9ybU9wZXJhdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUVvQkEsS0FBSztlQUFMQSxjQUFLOztJQUNMQyxTQUFTO2VBQVRBLGtCQUFTOztJQUVUQyxjQUFjO2VBQWRBLGNBQWM7O0lBQ2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFDZkMsZUFBZTtlQUFmQSxlQUFlOztJQUNmQyxnQkFBZ0I7ZUFBaEJBLGtCQUFnQjs7SUFDaEJDLGdCQUFnQjtlQUFoQkEsZUFBZ0I7O0lBQ2hCQyxrQkFBa0I7ZUFBbEJBLGlCQUFrQjs7SUFDbEJDLGtCQUFrQjtlQUFsQkEsaUJBQWtCOztJQUNsQkMsbUJBQW1CO2VBQW5CQSxtQkFBbUI7OzswREFWTjs4REFDSTswREFFSzsyREFDQzsyREFDQTs4REFDQzsyREFDQTs2REFDRTs2REFDQTsrREFDQyJ9
@@ -35,24 +35,37 @@ function _interopRequireDefault(obj) {
35
35
  };
36
36
  }
37
37
  var DeleteOperation = /*#__PURE__*/ function() {
38
- function DeleteOperation(type, length, position) {
38
+ function DeleteOperation(type, content, position) {
39
39
  _classCallCheck(this, DeleteOperation);
40
40
  this.type = type;
41
- this.length = length;
41
+ this.content = content;
42
42
  this.position = position;
43
43
  }
44
44
  _createClass(DeleteOperation, [
45
45
  {
46
- key: "clone",
47
- value: function clone() {
48
- return DeleteOperation.fromLengthAndPosition(this.length, this.position);
46
+ key: "getType",
47
+ value: function getType() {
48
+ return this.type;
49
+ }
50
+ },
51
+ {
52
+ key: "getContent",
53
+ value: function getContent() {
54
+ return this.content;
55
+ }
56
+ },
57
+ {
58
+ key: "getPosition",
59
+ value: function getPosition() {
60
+ return this.position;
49
61
  }
50
62
  },
51
63
  {
52
64
  key: "transformOperation",
53
65
  value: function transformOperation(operation) {
54
- switch(operation.type){
55
- case _types.insertType:
66
+ var type = operation.getType();
67
+ switch(type){
68
+ case _types.INSERT_TYPE:
56
69
  return function(tau, rho) {
57
70
  if (tau.position <= rho.position) {
58
71
  return [
@@ -60,68 +73,68 @@ var DeleteOperation = /*#__PURE__*/ function() {
60
73
  ];
61
74
  }
62
75
  if (tau.position > rho.position) {
63
- if (tau.position < rho.length + rho.position) {
76
+ if (tau.position < rho.content.length + rho.position) {
64
77
  return [
65
78
  tau.left(rho).shift(tau)
66
79
  ];
67
80
  }
68
- if (tau.position >= rho.length + rho.position) {
81
+ if (tau.position >= rho.content.length + rho.position) {
69
82
  return [
70
83
  rho.shift(tau)
71
84
  ];
72
85
  }
73
86
  }
74
87
  }(operation, this);
75
- case _types.deleteType:
88
+ case _types.DELETE_TYPE:
76
89
  return function(tau, rho) {
77
90
  if (tau.position < rho.position) {
78
- if (tau.length + tau.position <= rho.position) {
91
+ if (tau.content.length + tau.position <= rho.position) {
79
92
  return [
80
93
  tau.clone()
81
94
  ];
82
95
  }
83
- if (tau.length + tau.position <= rho.length + rho.position) {
96
+ if (tau.content.length + tau.position <= rho.content.length + rho.position) {
84
97
  return [
85
98
  rho.takenFrom(tau)
86
99
  ];
87
100
  }
88
- if (tau.length + tau.position > rho.length + rho.position) {
101
+ if (tau.content.length + tau.position > rho.content.length + rho.position) {
89
102
  return [
90
103
  rho.split(tau)
91
104
  ];
92
105
  }
93
106
  }
94
107
  if (tau.position === rho.position) {
95
- if (tau.length + tau.position <= rho.length + rho.position) {
108
+ if (tau.content.length + tau.position <= rho.content.length + rho.position) {
96
109
  return [
97
110
  _empty.default.fromNothing()
98
111
  ];
99
112
  }
100
- if (tau.length + tau.position > rho.length + rho.position) {
113
+ if (tau.content.length + tau.position > rho.content.length + rho.position) {
101
114
  return [
102
115
  rho.shift(rho.takenFrom(tau))
103
116
  ];
104
117
  }
105
118
  }
106
- if (tau.position >= rho.length + rho.position) {
119
+ if (tau.position >= rho.content.length + rho.position) {
107
120
  return [
108
121
  rho.shift(tau)
109
122
  ];
110
123
  }
111
124
  if (tau.position > rho.position) {
112
- if (tau.length + tau.position <= rho.length + rho.position) {
125
+ if (tau.content.length + tau.position <= rho.content.length + rho.position) {
113
126
  return [
114
127
  _empty.default.fromNothing()
115
128
  ];
116
129
  }
117
- if (tau.length + tau.position > rho.length + rho.position) {
130
+ if (tau.content.length + tau.position > rho.content.length + rho.position) {
118
131
  return [
119
132
  rho.shift(rho.takenFrom(tau))
120
133
  ];
121
134
  }
122
135
  }
123
136
  }(operation, this);
124
- case _types.emptyType:
137
+ case _types.EMPTY_TYPE:
125
138
  return function(tau, rho) {
126
139
  return [
127
140
  tau.clone()
@@ -133,35 +146,38 @@ var DeleteOperation = /*#__PURE__*/ function() {
133
146
  {
134
147
  key: "transformContent",
135
148
  value: function transformContent(content) {
136
- return content.substring(0, this.position) + content.substring(this.length + this.position);
149
+ var start, end;
150
+ start = 0;
151
+ end = this.position;
152
+ var leftContent = content.substring(start, end), contentLength = this.content.length;
153
+ start = this.position + contentLength;
154
+ var rightContent = content.substring(start), transformedContent = leftContent + rightContent;
155
+ return transformedContent;
137
156
  }
138
157
  },
139
158
  {
140
159
  key: "transformSelection",
141
160
  value: function transformSelection(selection) {
142
161
  var transformedSelection;
143
- var length = this.length, startPosition = this.position, endPosition = startPosition + length, selectionStartPosition = selection.getStartPosition(), selectionEndPosition = selection.getEndPosition();
144
- var offset, endOffset;
162
+ var selectionStartPosition = selection.getStartPosition(), selectionEndPosition = selection.getEndPosition(), contentLength = this.content.length, startPosition = this.position, endPosition = startPosition + contentLength;
145
163
  if (false) {
146
164
  ///
147
165
  } else if (selectionStartPosition >= endPosition) {
148
- offset = -length;
166
+ var offset = -contentLength;
149
167
  transformedSelection = selection.shifted(offset);
150
168
  } else if (selectionStartPosition >= startPosition) {
151
169
  if (selectionEndPosition > endPosition) {
152
- offset = startPosition - selectionStartPosition;
153
- endOffset = selectionStartPosition - endPosition;
154
- transformedSelection = selection.shifted(offset).endPositionShifted(endOffset);
170
+ var offset1 = startPosition - selectionStartPosition, endOffset = selectionStartPosition - endPosition;
171
+ transformedSelection = selection.shifted(offset1).endPositionShifted(endOffset);
155
172
  } else {
156
- var Selection = selection.constructor; ///
157
- transformedSelection = new Selection(startPosition, startPosition);
173
+ transformedSelection = selection.emptied();
158
174
  }
159
175
  } else if (selectionEndPosition > endPosition) {
160
- endOffset = -length;
161
- transformedSelection = selection.endPositionShifted(endOffset);
176
+ var endOffset1 = -contentLength;
177
+ transformedSelection = selection.endPositionShifted(endOffset1);
162
178
  } else if (selectionEndPosition > startPosition) {
163
- endOffset = startPosition - selectionEndPosition;
164
- transformedSelection = selection.endPositionShifted(endOffset);
179
+ var endOffset2 = startPosition - selectionEndPosition;
180
+ transformedSelection = selection.endPositionShifted(endOffset2);
165
181
  } else {
166
182
  transformedSelection = selection.clone();
167
183
  }
@@ -171,29 +187,33 @@ var DeleteOperation = /*#__PURE__*/ function() {
171
187
  {
172
188
  key: "shifted",
173
189
  value: function shifted(offset) {
174
- var length = this.length, position = this.position + offset, deleteOperation = DeleteOperation.fromLengthAndPosition(length, position);
190
+ var content = this.content, position = this.position + offset, deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
175
191
  return deleteOperation;
176
192
  }
177
193
  },
178
194
  {
179
195
  key: "shift",
180
196
  value: function shift(operation) {
181
- var offset = -this.length, shiftedOperation = operation.shifted(offset);
197
+ var contentLength = this.content.length, offset = -contentLength, shiftedOperation = operation.shifted(offset);
182
198
  return shiftedOperation;
183
199
  }
184
200
  },
185
201
  {
186
202
  key: "takenFrom",
187
203
  value: function takenFrom(deleteOperation) {
188
- var length = deleteOperation.length, position = deleteOperation.position;
189
- if (this.position > position && this.length + this.position >= length + position) {
190
- length = this.position - position;
191
- deleteOperation = DeleteOperation.fromLengthAndPosition(length, position);
204
+ var content = deleteOperation.getContent(), position = deleteOperation.getPosition();
205
+ var contentLength = content.length;
206
+ if (this.position > position && this.position + this.content.length >= position + contentLength) {
207
+ var contentLength1 = this.position - position, start = 0, end = start + contentLength1; ///
208
+ content = content.substring(start, end);
209
+ deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
192
210
  }
193
- if (this.position <= position && this.length + this.position < length + position) {
194
- length = length + position - this.position - this.length;
195
- position = this.length + this.position;
196
- deleteOperation = DeleteOperation.fromLengthAndPosition(length, position);
211
+ if (this.position <= position && this.position + this.content.length < position + contentLength) {
212
+ contentLength = position + contentLength - (this.position + this.content.length);
213
+ var start1 = this.position + this.content.length - position, end1 = start1 + contentLength; ///
214
+ position = this.position + this.content.length;
215
+ content = content.substring(start1, end1);
216
+ deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
197
217
  }
198
218
  return deleteOperation;
199
219
  }
@@ -201,18 +221,38 @@ var DeleteOperation = /*#__PURE__*/ function() {
201
221
  {
202
222
  key: "split",
203
223
  value: function split(deleteOperation) {
204
- var length = deleteOperation.length, position = deleteOperation.position;
205
- length = length - this.length;
206
- deleteOperation = DeleteOperation.fromLengthAndPosition(length, position);
224
+ var content = deleteOperation.getContent(), position = deleteOperation.getPosition();
225
+ var start, end;
226
+ start = 0;
227
+ end = this.position - position;
228
+ var leftContent = content.substring(start, end);
229
+ start = this.position - position + this.content.length;
230
+ var rightContent = content.substring(start);
231
+ content = leftContent + rightContent;
232
+ deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
233
+ return deleteOperation;
234
+ }
235
+ },
236
+ {
237
+ key: "invert",
238
+ value: function invert(InsertOperation, DeleteOperation) {
239
+ var insertOperation = InsertOperation.fromContentAndPosition(this.content, this.position);
240
+ return insertOperation;
241
+ }
242
+ },
243
+ {
244
+ key: "clone",
245
+ value: function clone() {
246
+ var deleteOperation = DeleteOperation.fromContentAndPosition(this.content, this.position);
207
247
  return deleteOperation;
208
248
  }
209
249
  },
210
250
  {
211
251
  key: "toJSON",
212
252
  value: function toJSON() {
213
- var type = this.type, length = this.length, position = this.position, json = {
253
+ var type = this.type, content = this.content, position = this.position, json = {
214
254
  type: type,
215
- length: length,
255
+ content: content,
216
256
  position: position
217
257
  };
218
258
  return json;
@@ -222,14 +262,23 @@ var DeleteOperation = /*#__PURE__*/ function() {
222
262
  {
223
263
  key: "fromJSON",
224
264
  value: function fromJSON(json) {
225
- var type = json.type, length = json.length, position = json.position, deleteOperation = new DeleteOperation(type, length, position);
265
+ var type = json.type, content = json.content, position = json.position, deleteOperation = new DeleteOperation(type, content, position);
266
+ return deleteOperation;
267
+ }
268
+ },
269
+ {
270
+ key: "fromContentAndPosition",
271
+ value: function fromContentAndPosition(content, position) {
272
+ var type = _types.DELETE_TYPE, deleteOperation = new DeleteOperation(type, content, position);
226
273
  return deleteOperation;
227
274
  }
228
275
  },
229
276
  {
230
- key: "fromLengthAndPosition",
231
- value: function fromLengthAndPosition(length, position) {
232
- var type = _types.deleteType, deleteOperation = new DeleteOperation(type, length, position);
277
+ key: "fromContentAndSelection",
278
+ value: function fromContentAndSelection(content, selection) {
279
+ var startPosition = selection.getStartPosition(), endPosition = selection.getEndPosition(), begin = startPosition, end = endPosition; ///
280
+ content = content.slice(begin, end); ///
281
+ var type = _types.DELETE_TYPE, position = startPosition, deleteOperation = new DeleteOperation(type, content, position);
233
282
  return deleteOperation;
234
283
  }
235
284
  }
@@ -237,4 +286,4 @@ var DeleteOperation = /*#__PURE__*/ function() {
237
286
  return DeleteOperation;
238
287
  }();
239
288
 
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb24vZGVsZXRlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZW1wdHlcIjtcclxuXHJcbmltcG9ydCB7IGluc2VydFR5cGUsIGRlbGV0ZVR5cGUsIGVtcHR5VHlwZSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBsZW5ndGgsIHBvc2l0aW9uKSB7XHJcblx0ICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpIHtcclxuICAgIHJldHVybiBEZWxldGVPcGVyYXRpb24uZnJvbUxlbmd0aEFuZFBvc2l0aW9uKHRoaXMubGVuZ3RoLCB0aGlzLnBvc2l0aW9uKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcclxuICAgICAgY2FzZSBpbnNlcnRUeXBlOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uIDwgcmhvLmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbdGF1LmxlZnQocmhvKS5zaGlmdCh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uID49IHJoby5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3Joby5zaGlmdCh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KShvcGVyYXRpb24sIHRoaXMpO1xyXG5cclxuICAgICAgY2FzZSBkZWxldGVUeXBlOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3RhdS5jbG9uZSgpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGF1Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA8PSByaG8ubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtyaG8udGFrZW5Gcm9tKHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0YXUubGVuZ3RoICsgdGF1LnBvc2l0aW9uID4gcmhvLmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNwbGl0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA9PT0gcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXUubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW0VtcHR5T3BlcmF0aW9uLmZyb21Ob3RoaW5nKCldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0YXUubGVuZ3RoICsgdGF1LnBvc2l0aW9uID4gcmhvLmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHJoby50YWtlbkZyb20odGF1KSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+PSByaG8ubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0YXUucG9zaXRpb24gPiByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRhdS5sZW5ndGggKyB0YXUucG9zaXRpb24gPD0gcmhvLmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbRW1wdHlPcGVyYXRpb24uZnJvbU5vdGhpbmcoKV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRhdS5sZW5ndGggKyB0YXUucG9zaXRpb24gPiByaG8ubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtyaG8uc2hpZnQocmhvLnRha2VuRnJvbSh0YXUpKV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSkob3BlcmF0aW9uLCB0aGlzKTtcclxuXHJcbiAgICAgIGNhc2UgZW1wdHlUeXBlOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBjb250ZW50LnN1YnN0cmluZygwLCB0aGlzLnBvc2l0aW9uKSArIGNvbnRlbnQuc3Vic3RyaW5nKHRoaXMubGVuZ3RoICsgdGhpcy5wb3NpdGlvbik7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcblxyXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGgsICAvLy9cclxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLCAvLy9cclxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGxlbmd0aCxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKTtcclxuXHJcbiAgICBsZXQgb2Zmc2V0LFxyXG4gICAgICAgIGVuZE9mZnNldDtcclxuXHJcbiAgICBpZiAoZmFsc2UpIHtcclxuICAgICAgLy8vXHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pIHtcclxuICAgICAgb2Zmc2V0ID0gLWxlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb247XHJcbiAgICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiAtIGVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zaGlmdGVkKG9mZnNldCkuZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgU2VsZWN0aW9uID0gc2VsZWN0aW9uLmNvbnN0cnVjdG9yOyAgLy8vXHJcblxyXG4gICAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgIGVuZE9mZnNldCA9IC1sZW5ndGg7XHJcblxyXG4gICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5lbmRQb3NpdGlvblNoaWZ0ZWQoZW5kT2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kUG9zaXRpb24gPiBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGVuZE9mZnNldCA9IHN0YXJ0UG9zaXRpb24gLSBzZWxlY3Rpb25FbmRQb3NpdGlvbjtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uY2xvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdGVkKG9mZnNldCkge1xyXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGgsXHJcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyBvZmZzZXQsXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUxlbmd0aEFuZFBvc2l0aW9uKGxlbmd0aCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdChvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IG9mZnNldCA9IC10aGlzLmxlbmd0aCxcclxuICAgICAgICAgIHNoaWZ0ZWRPcGVyYXRpb24gPSBvcGVyYXRpb24uc2hpZnRlZChvZmZzZXQpO1xyXG5cclxuICAgIHJldHVybiBzaGlmdGVkT3BlcmF0aW9uXHJcbiAgfVxyXG5cclxuICB0YWtlbkZyb20oZGVsZXRlT3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgbGVuZ3RoID0gZGVsZXRlT3BlcmF0aW9uLmxlbmd0aCxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAodGhpcy5wb3NpdGlvbiA+IHBvc2l0aW9uICYmIHRoaXMubGVuZ3RoICsgdGhpcy5wb3NpdGlvbiA+PSBsZW5ndGggKyBwb3NpdGlvbikge1xyXG4gICAgICBsZW5ndGggPSB0aGlzLnBvc2l0aW9uIC0gcG9zaXRpb247XHJcblxyXG4gICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUxlbmd0aEFuZFBvc2l0aW9uKGxlbmd0aCwgcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBvc2l0aW9uIDw9IHBvc2l0aW9uICYmIHRoaXMubGVuZ3RoICsgdGhpcy5wb3NpdGlvbiA8IGxlbmd0aCArIHBvc2l0aW9uKSB7XHJcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCArIHBvc2l0aW9uIC0gdGhpcy5wb3NpdGlvbiAtIHRoaXMubGVuZ3RoO1xyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMubGVuZ3RoICsgdGhpcy5wb3NpdGlvbjtcclxuXHJcbiAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tTGVuZ3RoQW5kUG9zaXRpb24obGVuZ3RoLCBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlbGV0ZU9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHNwbGl0KGRlbGV0ZU9wZXJhdGlvbikge1xyXG4gICAgbGV0IGxlbmd0aCA9IGRlbGV0ZU9wZXJhdGlvbi5sZW5ndGgsXHJcbiAgICAgICAgcG9zaXRpb24gPSBkZWxldGVPcGVyYXRpb24ucG9zaXRpb247XHJcblxyXG4gICAgbGVuZ3RoID0gbGVuZ3RoIC0gdGhpcy5sZW5ndGg7XHJcblxyXG4gICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21MZW5ndGhBbmRQb3NpdGlvbihsZW5ndGgsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZSxcclxuICAgICAgICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoLFxyXG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAganNvbiA9IHtcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgbGVuZ3RoLFxyXG4gICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xyXG4gICAgY29uc3QgeyB0eXBlLCBsZW5ndGgsIHBvc2l0aW9uIH0gPSBqc29uLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gbmV3IERlbGV0ZU9wZXJhdGlvbih0eXBlLCBsZW5ndGgsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21MZW5ndGhBbmRQb3NpdGlvbihsZW5ndGgsIHBvc2l0aW9uKSB7XHJcbiAgICBjb25zdCB0eXBlID0gZGVsZXRlVHlwZSwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGxlbmd0aCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG59XHJcbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRGVsZXRlT3BlcmF0aW9uIiwidHlwZSIsImxlbmd0aCIsInBvc2l0aW9uIiwiY2xvbmUiLCJmcm9tTGVuZ3RoQW5kUG9zaXRpb24iLCJ0cmFuc2Zvcm1PcGVyYXRpb24iLCJvcGVyYXRpb24iLCJpbnNlcnRUeXBlIiwidGF1IiwicmhvIiwibGVmdCIsInNoaWZ0IiwiZGVsZXRlVHlwZSIsInRha2VuRnJvbSIsInNwbGl0IiwiRW1wdHlPcGVyYXRpb24iLCJmcm9tTm90aGluZyIsImVtcHR5VHlwZSIsInRyYW5zZm9ybUNvbnRlbnQiLCJjb250ZW50Iiwic3Vic3RyaW5nIiwidHJhbnNmb3JtU2VsZWN0aW9uIiwic2VsZWN0aW9uIiwidHJhbnNmb3JtZWRTZWxlY3Rpb24iLCJzdGFydFBvc2l0aW9uIiwiZW5kUG9zaXRpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInNlbGVjdGlvbkVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJvZmZzZXQiLCJlbmRPZmZzZXQiLCJzaGlmdGVkIiwiZW5kUG9zaXRpb25TaGlmdGVkIiwiU2VsZWN0aW9uIiwiY29uc3RydWN0b3IiLCJkZWxldGVPcGVyYXRpb24iLCJzaGlmdGVkT3BlcmF0aW9uIiwidG9KU09OIiwianNvbiIsImZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQU1xQkE7OzswREFKTTtxQkFFdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbkMsSUFBQSxBQUFNQSxnQ0FBTjthQUFNQSxnQkFDUEMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLFFBQVE7OEJBRGZIO1FBRWxCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNYLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsUUFBUSxHQUFHQTs7aUJBSkNIOztZQU9uQkksS0FBQUE7bUJBQUFBLFNBQUFBLFFBQVE7Z0JBQ04sT0FBT0osQUFSVUEsZ0JBUU1LLHFCQUFxQixDQUFDLElBQUksQ0FBQ0gsTUFBTSxFQUFFLElBQUksQ0FBQ0MsUUFBUTtZQUN6RTs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQSxtQkFBbUJDLFNBQVMsRUFBRTtnQkFDNUIsT0FBUUEsVUFBVU4sSUFBSTtvQkFDcEIsS0FBS08saUJBQVU7d0JBQ2IsT0FBTyxBQUFDLFNBQUNDLEtBQUtDLEtBQVE7NEJBRXBCLElBQUlELElBQUlOLFFBQVEsSUFBSU8sSUFBSVAsUUFBUSxFQUFFO2dDQUNoQyxPQUFPO29DQUFDTSxJQUFJTCxLQUFLO2lDQUFHOzRCQUN0QixDQUFDOzRCQUVELElBQUlLLElBQUlOLFFBQVEsR0FBR08sSUFBSVAsUUFBUSxFQUFFO2dDQUMvQixJQUFJTSxJQUFJTixRQUFRLEdBQUdPLElBQUlSLE1BQU0sR0FBR1EsSUFBSVAsUUFBUSxFQUFFO29DQUM1QyxPQUFPO3dDQUFDTSxJQUFJRSxJQUFJLENBQUNELEtBQUtFLEtBQUssQ0FBQ0g7cUNBQUs7Z0NBQ25DLENBQUM7Z0NBQ0QsSUFBSUEsSUFBSU4sUUFBUSxJQUFJTyxJQUFJUixNQUFNLEdBQUdRLElBQUlQLFFBQVEsRUFBRTtvQ0FDN0MsT0FBTzt3Q0FBQ08sSUFBSUUsS0FBSyxDQUFDSDtxQ0FBSztnQ0FDekIsQ0FBQzs0QkFDSCxDQUFDO3dCQUVILEVBQUdGLFdBQVcsSUFBSTtvQkFFcEIsS0FBS00saUJBQVU7d0JBQ2IsT0FBTyxBQUFDLFNBQUNKLEtBQUtDLEtBQVE7NEJBRXBCLElBQUlELElBQUlOLFFBQVEsR0FBR08sSUFBSVAsUUFBUSxFQUFFO2dDQUMvQixJQUFJTSxJQUFJUCxNQUFNLEdBQUdPLElBQUlOLFFBQVEsSUFBSU8sSUFBSVAsUUFBUSxFQUFFO29DQUM3QyxPQUFPO3dDQUFDTSxJQUFJTCxLQUFLO3FDQUFHO2dDQUN0QixDQUFDO2dDQUNELElBQUlLLElBQUlQLE1BQU0sR0FBR08sSUFBSU4sUUFBUSxJQUFJTyxJQUFJUixNQUFNLEdBQUdRLElBQUlQLFFBQVEsRUFBRTtvQ0FDMUQsT0FBTzt3Q0FBQ08sSUFBSUksU0FBUyxDQUFDTDtxQ0FBSztnQ0FDN0IsQ0FBQztnQ0FDRCxJQUFJQSxJQUFJUCxNQUFNLEdBQUdPLElBQUlOLFFBQVEsR0FBR08sSUFBSVIsTUFBTSxHQUFHUSxJQUFJUCxRQUFRLEVBQUU7b0NBQ3pELE9BQU87d0NBQUNPLElBQUlLLEtBQUssQ0FBQ047cUNBQUs7Z0NBQ3pCLENBQUM7NEJBQ0gsQ0FBQzs0QkFFRCxJQUFJQSxJQUFJTixRQUFRLEtBQUtPLElBQUlQLFFBQVEsRUFBRTtnQ0FDakMsSUFBSU0sSUFBSVAsTUFBTSxHQUFHTyxJQUFJTixRQUFRLElBQUlPLElBQUlSLE1BQU0sR0FBR1EsSUFBSVAsUUFBUSxFQUFFO29DQUMxRCxPQUFPO3dDQUFDYSxjQUFjLENBQUNDLFdBQVc7cUNBQUc7Z0NBQ3ZDLENBQUM7Z0NBQ0QsSUFBSVIsSUFBSVAsTUFBTSxHQUFHTyxJQUFJTixRQUFRLEdBQUdPLElBQUlSLE1BQU0sR0FBR1EsSUFBSVAsUUFBUSxFQUFFO29DQUN6RCxPQUFPO3dDQUFDTyxJQUFJRSxLQUFLLENBQUNGLElBQUlJLFNBQVMsQ0FBQ0w7cUNBQU07Z0NBQ3hDLENBQUM7NEJBQ0gsQ0FBQzs0QkFFRCxJQUFJQSxJQUFJTixRQUFRLElBQUlPLElBQUlSLE1BQU0sR0FBR1EsSUFBSVAsUUFBUSxFQUFFO2dDQUM3QyxPQUFPO29DQUFDTyxJQUFJRSxLQUFLLENBQUNIO2lDQUFLOzRCQUN6QixDQUFDOzRCQUVELElBQUlBLElBQUlOLFFBQVEsR0FBR08sSUFBSVAsUUFBUSxFQUFFO2dDQUMvQixJQUFJTSxJQUFJUCxNQUFNLEdBQUdPLElBQUlOLFFBQVEsSUFBSU8sSUFBSVIsTUFBTSxHQUFHUSxJQUFJUCxRQUFRLEVBQUU7b0NBQzFELE9BQU87d0NBQUNhLGNBQWMsQ0FBQ0MsV0FBVztxQ0FBRztnQ0FDdkMsQ0FBQztnQ0FDRCxJQUFJUixJQUFJUCxNQUFNLEdBQUdPLElBQUlOLFFBQVEsR0FBR08sSUFBSVIsTUFBTSxHQUFHUSxJQUFJUCxRQUFRLEVBQUU7b0NBQ3pELE9BQU87d0NBQUNPLElBQUlFLEtBQUssQ0FBQ0YsSUFBSUksU0FBUyxDQUFDTDtxQ0FBTTtnQ0FDeEMsQ0FBQzs0QkFDSCxDQUFDO3dCQUVILEVBQUdGLFdBQVcsSUFBSTtvQkFFcEIsS0FBS1csZ0JBQVM7d0JBQ1osT0FBTyxBQUFDLFNBQUNULEtBQUtDLEtBQVE7NEJBRXBCLE9BQU87Z0NBQUNELElBQUlMLEtBQUs7NkJBQUc7d0JBRXRCLEVBQUdHLFdBQVcsSUFBSTtnQkFDdEI7WUFDRjs7O1lBRUFZLEtBQUFBO21CQUFBQSxTQUFBQSxpQkFBaUJDLE9BQU8sRUFBRTtnQkFDeEIsT0FBT0EsUUFBUUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDbEIsUUFBUSxJQUFJaUIsUUFBUUMsU0FBUyxDQUFDLElBQUksQ0FBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUNDLFFBQVE7WUFDNUY7OztZQUVBbUIsS0FBQUE7bUJBQUFBLFNBQUFBLG1CQUFtQkMsU0FBUyxFQUFFO2dCQUM1QixJQUFJQztnQkFFSixJQUFNdEIsU0FBUyxJQUFJLENBQUNBLE1BQU0sRUFDcEJ1QixnQkFBZ0IsSUFBSSxDQUFDdEIsUUFBUSxFQUM3QnVCLGNBQWNELGdCQUFnQnZCLFFBQzlCeUIseUJBQXlCSixVQUFVSyxnQkFBZ0IsSUFDbkRDLHVCQUF1Qk4sVUFBVU8sY0FBYztnQkFFckQsSUFBSUMsUUFDQUM7Z0JBRUosSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsR0FBRztnQkFDTCxPQUFPLElBQUlMLDBCQUEwQkQsYUFBYTtvQkFDaERLLFNBQVMsQ0FBQzdCO29CQUVWc0IsdUJBQXVCRCxVQUFVVSxPQUFPLENBQUNGO2dCQUMzQyxPQUFPLElBQUlKLDBCQUEwQkYsZUFBZTtvQkFDbEQsSUFBSUksdUJBQXVCSCxhQUFhO3dCQUN0Q0ssU0FBU04sZ0JBQWdCRTt3QkFDekJLLFlBQVlMLHlCQUF5QkQ7d0JBRXJDRix1QkFBdUJELFVBQVVVLE9BQU8sQ0FBQ0YsUUFBUUcsa0JBQWtCLENBQUNGO29CQUN0RSxPQUFPO3dCQUNMLElBQU1HLFlBQVlaLFVBQVVhLFdBQVcsRUFBRyxHQUFHO3dCQUU3Q1osdUJBQXVCLElBQUlXLFVBQVVWLGVBQWVBO29CQUN0RCxDQUFDO2dCQUNILE9BQU8sSUFBSUksdUJBQXVCSCxhQUFhO29CQUM3Q00sWUFBWSxDQUFDOUI7b0JBRWJzQix1QkFBdUJELFVBQVVXLGtCQUFrQixDQUFDRjtnQkFDdEQsT0FBTyxJQUFJSCx1QkFBdUJKLGVBQWU7b0JBQy9DTyxZQUFZUCxnQkFBZ0JJO29CQUU1QkwsdUJBQXVCRCxVQUFVVyxrQkFBa0IsQ0FBQ0Y7Z0JBQ3RELE9BQU87b0JBQ0xSLHVCQUF1QkQsVUFBVW5CLEtBQUs7Z0JBQ3hDLENBQUM7Z0JBRUQsT0FBT29CO1lBQ1Q7OztZQUVBUyxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUUYsTUFBTSxFQUFFO2dCQUNkLElBQU03QixTQUFTLElBQUksQ0FBQ0EsTUFBTSxFQUNwQkMsV0FBVyxJQUFJLENBQUNBLFFBQVEsR0FBRzRCLFFBQzNCTSxrQkFBa0JyQyxBQWxJUEEsZ0JBa0l1QksscUJBQXFCLENBQUNILFFBQVFDO2dCQUV0RSxPQUFPa0M7WUFDVDs7O1lBRUF6QixLQUFBQTttQkFBQUEsU0FBQUEsTUFBTUwsU0FBUyxFQUFFO2dCQUNmLElBQU13QixTQUFTLENBQUMsSUFBSSxDQUFDN0IsTUFBTSxFQUNyQm9DLG1CQUFtQi9CLFVBQVUwQixPQUFPLENBQUNGO2dCQUUzQyxPQUFPTztZQUNUOzs7WUFFQXhCLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVdUIsZUFBZSxFQUFFO2dCQUN6QixJQUFJbkMsU0FBU21DLGdCQUFnQm5DLE1BQU0sRUFDL0JDLFdBQVdrQyxnQkFBZ0JsQyxRQUFRO2dCQUV2QyxJQUFJLElBQUksQ0FBQ0EsUUFBUSxHQUFHQSxZQUFZLElBQUksQ0FBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQ0MsUUFBUSxJQUFJRCxTQUFTQyxVQUFVO29CQUNoRkQsU0FBUyxJQUFJLENBQUNDLFFBQVEsR0FBR0E7b0JBRXpCa0Msa0JBQWtCckMsQUFySkhBLGdCQXFKbUJLLHFCQUFxQixDQUFDSCxRQUFRQztnQkFDbEUsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQ0EsUUFBUSxJQUFJQSxZQUFZLElBQUksQ0FBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQ0MsUUFBUSxHQUFHRCxTQUFTQyxVQUFVO29CQUNoRkQsU0FBU0EsU0FBU0MsV0FBVyxJQUFJLENBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUNELE1BQU07b0JBQ3hEQyxXQUFXLElBQUksQ0FBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQ0MsUUFBUTtvQkFFdENrQyxrQkFBa0JyQyxBQTVKSEEsZ0JBNEptQksscUJBQXFCLENBQUNILFFBQVFDO2dCQUNsRSxDQUFDO2dCQUVELE9BQU9rQztZQUNUOzs7WUFFQXRCLEtBQUFBO21CQUFBQSxTQUFBQSxNQUFNc0IsZUFBZSxFQUFFO2dCQUNyQixJQUFJbkMsU0FBU21DLGdCQUFnQm5DLE1BQU0sRUFDL0JDLFdBQVdrQyxnQkFBZ0JsQyxRQUFRO2dCQUV2Q0QsU0FBU0EsU0FBUyxJQUFJLENBQUNBLE1BQU07Z0JBRTdCbUMsa0JBQWtCckMsQUF4S0RBLGdCQXdLaUJLLHFCQUFxQixDQUFDSCxRQUFRQztnQkFFaEUsT0FBT2tDO1lBQ1Q7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUEsU0FBUztnQkFDUCxJQUFNdEMsT0FBTyxJQUFJLENBQUNBLElBQUksRUFDaEJDLFNBQVMsSUFBSSxDQUFDQSxNQUFNLEVBQ3BCQyxXQUFXLElBQUksQ0FBQ0EsUUFBUSxFQUN4QnFDLE9BQU87b0JBQ0x2QyxNQUFBQTtvQkFDQUMsUUFBQUE7b0JBQ0FDLFVBQUFBO2dCQUNGO2dCQUVOLE9BQU9xQztZQUNUOzs7O1lBRU9DLEtBQUFBO21CQUFQLFNBQU9BLFNBQVNELElBQUksRUFBRTtnQkFDcEIsSUFBUXZDLE9BQTJCdUMsS0FBM0J2QyxNQUFNQyxTQUFxQnNDLEtBQXJCdEMsUUFBUUMsV0FBYXFDLEtBQWJyQyxVQUNoQmtDLGtCQUFrQixJQTVMUHJDLGdCQTRMMkJDLE1BQU1DLFFBQVFDO2dCQUUxRCxPQUFPa0M7WUFDVDs7O1lBRU9oQyxLQUFBQTttQkFBUCxTQUFPQSxzQkFBc0JILE1BQU0sRUFBRUMsUUFBUSxFQUFFO2dCQUM3QyxJQUFNRixPQUFPWSxpQkFBVSxFQUNqQndCLGtCQUFrQixJQW5NUHJDLGdCQW1NMkJDLE1BQU1DLFFBQVFDO2dCQUUxRCxPQUFPa0M7WUFDVDs7O1dBdE1tQnJDIn0=
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb24vZGVsZXRlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZW1wdHlcIjtcclxuXHJcbmltcG9ydCB7IElOU0VSVF9UWVBFLCBERUxFVEVfVFlQRSwgRU1QVFlfVFlQRSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBwb3NpdGlvbikge1xyXG5cdCAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBvcGVyYXRpb24uZ2V0VHlwZSgpO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIElOU0VSVF9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uIDwgcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFt0YXUubGVmdChyaG8pLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uID49IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcblxyXG4gICAgICBjYXNlIERFTEVURV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbdGF1LmNsb25lKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnRha2VuRnJvbSh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNwbGl0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA9PT0gcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPD0gcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtFbXB0eU9wZXJhdGlvbi5mcm9tTm90aGluZygpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHJoby50YWtlbkZyb20odGF1KSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+PSByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtyaG8uc2hpZnQodGF1KV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbRW1wdHlPcGVyYXRpb24uZnJvbU5vdGhpbmcoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPiByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3Joby5zaGlmdChyaG8udGFrZW5Gcm9tKHRhdSkpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KShvcGVyYXRpb24sIHRoaXMpO1xyXG5cclxuICAgICAgY2FzZSBFTVBUWV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpIHtcclxuICAgIGxldCBzdGFydCwgZW5kO1xyXG5cclxuICAgIHN0YXJ0ID0gMDtcclxuXHJcbiAgICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksXHJcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBzdGFydCA9IHRoaXMucG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkQ29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGgsXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAvLy9cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiAtIGVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zaGlmdGVkKG9mZnNldCkuZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZW1wdGllZCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkVuZFBvc2l0aW9uID4gZW5kUG9zaXRpb24pIHtcclxuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gLWNvbnRlbnRMZW5ndGg7XHJcblxyXG4gICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5lbmRQb3NpdGlvblNoaWZ0ZWQoZW5kT2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kUG9zaXRpb24gPiBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHN0YXJ0UG9zaXRpb24gLSBzZWxlY3Rpb25FbmRQb3NpdGlvbjtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uY2xvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdGVkKG9mZnNldCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCxcclxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiArIG9mZnNldCxcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2hpZnQob3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aCxcclxuICAgICAgICAgIG9mZnNldCA9IC1jb250ZW50TGVuZ3RoLFxyXG4gICAgICAgICAgc2hpZnRlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbi5zaGlmdGVkKG9mZnNldCk7XHJcblxyXG4gICAgcmV0dXJuIHNoaWZ0ZWRPcGVyYXRpb25cclxuICB9XHJcblxyXG4gIHRha2VuRnJvbShkZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gZGVsZXRlT3BlcmF0aW9uLmdldENvbnRlbnQoKSxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5nZXRQb3NpdGlvbigpO1xyXG5cclxuICAgIGxldCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKCh0aGlzLnBvc2l0aW9uID4gcG9zaXRpb24pICYmICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCA+PSBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLnBvc2l0aW9uIC0gcG9zaXRpb24sXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMCxcclxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb250ZW50TGVuZ3RoOyAgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCh0aGlzLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSAmJiAodGhpcy5wb3NpdGlvbiArIHRoaXMuY29udGVudC5sZW5ndGggPCBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpKSB7XHJcbiAgICAgIGNvbnRlbnRMZW5ndGggPSAocG9zaXRpb24gKyBjb250ZW50TGVuZ3RoKSAtICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydCA9ICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCkgLSBwb3NpdGlvbixcclxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb250ZW50TGVuZ3RoOyAgLy8vXHJcblxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoO1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzcGxpdChkZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gZGVsZXRlT3BlcmF0aW9uLmdldENvbnRlbnQoKSxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5nZXRQb3NpdGlvbigpO1xyXG5cclxuICAgIGxldCBzdGFydCxcclxuICAgICAgICBlbmQ7XHJcblxyXG4gICAgc3RhcnQgPSAwO1xyXG5cclxuICAgIGVuZCA9IHRoaXMucG9zaXRpb24gLSBwb3NpdGlvbjtcclxuXHJcbiAgICBjb25zdCBsZWZ0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbiAtIHBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBjb25zdCByaWdodENvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcblxyXG4gICAgY29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgaW52ZXJ0KEluc2VydE9wZXJhdGlvbiwgRGVsZXRlT3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbih0aGlzLmNvbnRlbnQsIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBpbnNlcnRPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKHRoaXMuY29udGVudCwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGRlbGV0ZU9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHRvSlNPTigpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGUsXHJcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAganNvbiA9IHtcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcclxuICAgIGNvbnN0IHsgdHlwZSwgY29udGVudCwgcG9zaXRpb24gfSA9IGpzb24sXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBERUxFVEVfVFlQRSwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbikge1xyXG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgYmVnaW4gPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbjsgIC8vL1xyXG5cclxuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKGJlZ2luLCBlbmQpOyAgLy8vXHJcblxyXG4gICAgY29uc3QgdHlwZSA9IERFTEVURV9UWVBFLCAvLy9cclxuICAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxufVxyXG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIkRlbGV0ZU9wZXJhdGlvbiIsInR5cGUiLCJjb250ZW50IiwicG9zaXRpb24iLCJnZXRUeXBlIiwiZ2V0Q29udGVudCIsImdldFBvc2l0aW9uIiwidHJhbnNmb3JtT3BlcmF0aW9uIiwib3BlcmF0aW9uIiwiSU5TRVJUX1RZUEUiLCJ0YXUiLCJyaG8iLCJjbG9uZSIsImxlbmd0aCIsImxlZnQiLCJzaGlmdCIsIkRFTEVURV9UWVBFIiwidGFrZW5Gcm9tIiwic3BsaXQiLCJFbXB0eU9wZXJhdGlvbiIsImZyb21Ob3RoaW5nIiwiRU1QVFlfVFlQRSIsInRyYW5zZm9ybUNvbnRlbnQiLCJzdGFydCIsImVuZCIsImxlZnRDb250ZW50Iiwic3Vic3RyaW5nIiwiY29udGVudExlbmd0aCIsInJpZ2h0Q29udGVudCIsInRyYW5zZm9ybWVkQ29udGVudCIsInRyYW5zZm9ybVNlbGVjdGlvbiIsInNlbGVjdGlvbiIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwic2VsZWN0aW9uU3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwib2Zmc2V0Iiwic2hpZnRlZCIsImVuZE9mZnNldCIsImVuZFBvc2l0aW9uU2hpZnRlZCIsImVtcHRpZWQiLCJkZWxldGVPcGVyYXRpb24iLCJmcm9tQ29udGVudEFuZFBvc2l0aW9uIiwic2hpZnRlZE9wZXJhdGlvbiIsImludmVydCIsIkluc2VydE9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsInRvSlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwiYmVnaW4iLCJzbGljZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFNcUJBOzs7MERBSk07cUJBRTBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLElBQUEsQUFBTUEsZ0NBQU47YUFBTUEsZ0JBQ1BDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFROzhCQURoQkg7UUFFbEIsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1gsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxRQUFRLEdBQUdBOztpQkFKQ0g7O1lBT25CSSxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVTtnQkFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtZQUNsQjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLE9BQU8sSUFBSSxDQUFDSCxPQUFPO1lBQ3JCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWM7Z0JB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