easy-richtextarea 4.0.17 → 4.0.19

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.
@@ -232,6 +232,7 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
232
232
  });
233
233
  _defineProperty(_assertThisInitialized(_this), "selectChangeHandler", function(event, element) {
234
234
  if (_this.focused) {
235
+ element = _assertThisInitialized(_this); ///
235
236
  _this.intermediateHandler(event, element);
236
237
  }
237
238
  });
@@ -377,30 +378,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
377
378
  return active;
378
379
  }
379
380
  },
380
- {
381
- key: "undo",
382
- value: function undo(event, element) {
383
- var operation = this.undoBuffer.undo();
384
- if (operation !== null) {
385
- var undoable = false, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
386
- this.applyOperation(operation);
387
- this.setSelection(selection, setPreviousSelection);
388
- this.intermediateHandler(event, element, undoable);
389
- }
390
- }
391
- },
392
- {
393
- key: "redo",
394
- value: function redo(event, element) {
395
- var operation = this.undoBuffer.redo();
396
- if (operation !== null) {
397
- var undoable = false, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
398
- this.applyOperation(operation);
399
- this.setSelection(selection, setPreviousSelection);
400
- this.intermediateHandler(event, element, undoable);
401
- }
402
- }
403
- },
404
381
  {
405
382
  key: "getContent",
406
383
  value: function getContent() {
@@ -461,15 +438,30 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
461
438
  }
462
439
  },
463
440
  {
464
- key: "applyOperation",
465
- value: function applyOperation(operation) {
466
- var content = this.getContent(), selection = this.getSelection();
467
- var transformedContent = operation.transformContent(content), transformedSelection = operation.transformSelection(selection);
468
- content = transformedContent; ///
469
- selection = transformedSelection; ///
470
- var setPreviousContent = false, setPreviousSelection = false;
471
- this.setContent(content, setPreviousContent);
441
+ key: "undo",
442
+ value: function undo(event, element) {
443
+ var operation = this.undoBuffer.undo();
444
+ if (operation !== null) {
445
+ this.revert(event, element, operation);
446
+ }
447
+ }
448
+ },
449
+ {
450
+ key: "redo",
451
+ value: function redo(event, element) {
452
+ var operation = this.undoBuffer.redo();
453
+ if (operation !== null) {
454
+ this.revert(event, element, operation);
455
+ }
456
+ }
457
+ },
458
+ {
459
+ key: "revert",
460
+ value: function revert(event, element, operation) {
461
+ var undoable = false, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
462
+ this.applyOperation(operation);
472
463
  this.setSelection(selection, setPreviousSelection);
464
+ this.intermediateHandler(event, element, undoable);
473
465
  }
474
466
  },
475
467
  {
@@ -482,11 +474,46 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
482
474
  var setPreviousContent = false, setPreviousSelection = false;
483
475
  this.setContent(content, setPreviousContent);
484
476
  this.setSelection(selection, setPreviousSelection);
485
- this.undoBuffer.transform(transformedPendingOperations);
477
+ this.undoBuffer.transform(operations);
486
478
  var event = null, element = this, undoable = false, eventType = CHANGE_EVENT_TYPE;
487
479
  this.intermediateHandler(event, element, undoable, eventType);
488
480
  }
489
481
  },
482
+ {
483
+ key: "callHandlers",
484
+ value: function callHandlers(eventType) {
485
+ for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
486
+ remainingArguments[_key - 1] = arguments[_key];
487
+ }
488
+ var _this = this;
489
+ var eventListeners = this.findEventListeners(eventType);
490
+ eventListeners.forEach(function(eventListener) {
491
+ var element = eventListener.element;
492
+ var handler = eventListener.handler, handlerElement = element; ///
493
+ element = _this; ///
494
+ if (handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler) {
495
+ var _handler;
496
+ (_handler = handler).call.apply(_handler, [
497
+ handlerElement
498
+ ].concat(_toConsumableArray(remainingArguments), [
499
+ element
500
+ ]));
501
+ }
502
+ });
503
+ }
504
+ },
505
+ {
506
+ key: "applyOperation",
507
+ value: function applyOperation(operation) {
508
+ var content = this.getContent(), selection = this.getSelection();
509
+ var transformedContent = operation.transformContent(content), transformedSelection = operation.transformSelection(selection);
510
+ content = transformedContent; ///
511
+ selection = transformedSelection; ///
512
+ var setPreviousContent = false, setPreviousSelection = false;
513
+ this.setContent(content, setPreviousContent);
514
+ this.setSelection(selection, setPreviousSelection);
515
+ }
516
+ },
490
517
  {
491
518
  key: "activate",
492
519
  value: function activate() {
@@ -565,29 +592,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
565
592
  this.removeEventListener(eventType, handler, element);
566
593
  }
567
594
  },
568
- {
569
- key: "callHandlers",
570
- value: function callHandlers(eventType) {
571
- for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
572
- remainingArguments[_key - 1] = arguments[_key];
573
- }
574
- var _this = this;
575
- var eventListeners = this.findEventListeners(eventType);
576
- eventListeners.forEach(function(eventListener) {
577
- var element = eventListener.element;
578
- var handler = eventListener.handler, handlerElement = element; ///
579
- element = _this; ///
580
- if (handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler) {
581
- var _handler;
582
- (_handler = handler).call.apply(_handler, [
583
- handlerElement
584
- ].concat(_toConsumableArray(remainingArguments), [
585
- element
586
- ]));
587
- }
588
- });
589
- }
590
- },
591
595
  {
592
596
  key: "didMount",
593
597
  value: function didMount() {
@@ -662,4 +666,4 @@ function defer(func) {
662
666
  setTimeout(func, 0);
663
667
  }
664
668
 
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgVEVYVCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5jb25zdCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgUEFTVEVfRVZFTlRfVFlQRSxcclxuICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSA9IGV2ZW50VHlwZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IFpfS0VZX0NPREUpIHtcclxuICAgICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgIGlmIChjdHJsS2V5IHx8IG1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgc2hpZnRLZXkgP1xyXG4gICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmx1ckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwYXN0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsgY2xpcGJvYXJkRGF0YSB9ID0gZXZlbnQsXHJcbiAgICAgICAgICB0ZXh0RGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShURVhUKTtcclxuXHJcbiAgICBpZiAodGV4dERhdGEgPT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoIXNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGV4dERhdGEsIC8vL1xyXG4gICAgICAgICAgaW5zZXJ0T3BlcmF0aW9uID0gSW5zZXJ0T3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBpbnNlcnRPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICB1bmRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIudW5kbygpO1xyXG5cclxuICAgIGlmIChvcGVyYXRpb24gIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgdW5kb2FibGUgPSBmYWxzZSxcclxuICAgICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21PcGVyYXRpb24ob3BlcmF0aW9uKSxcclxuICAgICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIucmVkbygpO1xyXG5cclxuICAgIGlmIChvcGVyYXRpb24gIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgdW5kb2FibGUgPSBmYWxzZSxcclxuICAgICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21PcGVyYXRpb24ob3BlcmF0aW9uKSxcclxuICAgICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0ZWRDb250ZW50ID0gY29udGVudC5zbGljZShzdGFydCwgZW5kKTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgaGFzQ29udGVudENoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50UHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgPT09IHRoaXMucHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gIWNvbnRlbnRQcmV2aW91c0NvbnRlbnQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0VxdWFsVG8odGhpcy5wcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gIXNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNDb250ZW50KSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gY29udGVudDsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgZG9tRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKG9wZXJhdGlvbnMpIHtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZENvbnRlbnQgPSB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQsIG9wZXJhdGlvbnMpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uLCBvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMudW5kb0J1ZmZlci50cmFuc2Zvcm0odHJhbnNmb3JtZWRQZW5kaW5nT3BlcmF0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZXZlbnQgPSBudWxsLFxyXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMsXHJcbiAgICAgICAgICB1bmRvYWJsZSA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCB0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZCbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZvY3VzKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGNoYW5nZUhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xyXG5cclxuICAgIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcclxuICAgICAgbGV0IHsgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcjtcclxuXHJcbiAgICAgIGNvbnN0IHsgaGFuZGxlciB9ID0gZXZlbnRMaXN0ZW5lcixcclxuICAgICAgICAgICAgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cclxuXHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIGlmICgoaGFuZGxlciAhPT0gdGhpcy5ibHVySGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuZm9jdXNIYW5kbGVyKSAmJiAoaGFuZGxlciAhPT0gdGhpcy5zY3JvbGxIYW5kbGVyKSkge1xyXG4gICAgICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uU2Nyb2xsLCBvbkZvY3VzLCBvbkJsdXIgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgZm9jdXNIYW5kbGVyID0gb25Gb2N1cywgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1cjsgLy8vXHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgYmx1ckhhbmRsZXIgJiYgdGhpcy5vbkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihDT1BZX0VWRU5UX1RZUEUsIHRoaXMuY29weUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oUEFTVEVfRVZFTlRfVFlQRSwgdGhpcy5wYXN0ZUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9uKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCB0aGlzLnNlbGVjdENoYW5nZUhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgd2lsbFVubW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uQ2hhbmdlLCBvblNjcm9sbCwgb25Gb2N1cywgb25CbHVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vZmZGb2N1cyhmb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICBcIm9uU2Nyb2xsXCIsXHJcbiAgICBcIm9uRm9jdXNcIixcclxuICAgIFwib25CbHVyXCJcclxuICBdO1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFwicmljaFwiXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBmb2N1c2VkID0gZmFsc2UsXHJcbiAgICAgICAgICByZWFkT25seSA9IGZhbHNlLFxyXG4gICAgICAgICAgdW5kb0J1ZmZlciA9IFVuZG9CdWZmZXIuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IG51bGwsXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IG51bGwsXHJcbiAgICAgICAgICByaWNoVGV4dGFyZWEgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHJpY2hUZXh0YXJlYTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmVyKGZ1bmMpIHtcclxuICBzZXRUaW1lb3V0KGZ1bmMsIDApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSaWNoVGV4dGFyZWEiLCJDVVRfRVZFTlRfVFlQRSIsImV2ZW50VHlwZXMiLCJDT1BZX0VWRU5UX1RZUEUiLCJCTFVSX0VWRU5UX1RZUEUiLCJQQVNURV9FVkVOVF9UWVBFIiwiSU5QVVRfRVZFTlRfVFlQRSIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJDSEFOR0VfRVZFTlRfVFlQRSIsIlNDUk9MTF9FVkVOVF9UWVBFIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsIlNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIiwic2VsZWN0b3IiLCJmb2N1c2VkIiwicmVhZE9ubHkiLCJ1bmRvQnVmZmVyIiwicHJldmlvdXNDb250ZW50IiwicHJldmlvdXNTZWxlY3Rpb24iLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwidW5kb2FibGUiLCJldmVudFR5cGUiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnRlbnQiLCJzZXRDb250ZW50IiwiZ2V0Q29udGVudCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJjaGFuZ2VkIiwiY2FsbEhhbmRsZXJzIiwib3BlcmF0aW9ucyIsImdlbmVyYXRlT3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiY29udGV4dG1lbnVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJrZXlEb3duSGFuZGxlciIsImtleUNvZGUiLCJaX0tFWV9DT0RFIiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSIsInJlZG8iLCJ1bmRvIiwiZGVmZXIiLCJzY3JvbGxIYW5kbGVyIiwiZm9jdXNIYW5kbGVyIiwiYmx1ckhhbmRsZXIiLCJpbnB1dEhhbmRsZXIiLCJwYXN0ZUhhbmRsZXIiLCJjbGlwYm9hcmREYXRhIiwidGV4dERhdGEiLCJnZXREYXRhIiwiVEVYVCIsIkVNUFRZX1NUUklORyIsInNlbGVjdGlvbkVtcHR5IiwiaXNFbXB0eSIsImRlbGV0ZU9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwib3BlcmF0aW9uIiwiYXBwbHlPcGVyYXRpb24iLCJpbnNlcnRPcGVyYXRpb24iLCJJbnNlcnRPcGVyYXRpb24iLCJjb3B5SGFuZGxlciIsInNlbGVjdGVkQ29udGVudCIsImdldFNlbGVjdGVkQ29udGVudCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImN1dEhhbmRsZXIiLCJpc0ZvY3VzZWQiLCJpc1JlYWRPbmx5IiwiZ2V0VW5kb0J1ZmZlciIsImdldFByZXZpb3VzQ29udGVudCIsInByZXZvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZXRGb2N1c2VkIiwic2V0UmVhZE9ubHkiLCJzZXRQcmV2aW91c0NvbnRlbnQiLCJzZXRQcmV2aW91c1NlbGVjdGlvbiIsImlzQWN0aXZlIiwiYWN0aXZlIiwiaGFzQ2xhc3MiLCJTZWxlY3Rpb24iLCJmcm9tT3BlcmF0aW9uIiwic2V0U2VsZWN0aW9uIiwiZG9tRWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJ2YWx1ZSIsImZyb21ET01FbGVtZW50IiwiZW5kUG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iLCJnZXRTdGFydFBvc2l0aW9uIiwic3RhcnQiLCJlbmQiLCJzbGljZSIsImNvbnRlbnRQcmV2aW91c0NvbnRlbnQiLCJzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiIsImlzRXF1YWxUbyIsIk9iamVjdCIsImFzc2lnbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJ0cmFuc2Zvcm1lZENvbnRlbnQiLCJ0cmFuc2Zvcm1Db250ZW50IiwidHJhbnNmb3JtZWRTZWxlY3Rpb24iLCJ0cmFuc2Zvcm1TZWxlY3Rpb24iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1lZFBlbmRpbmdPcGVyYXRpb25zIiwiYWN0aXZhdGUiLCJvbiIsImFkZENsYXNzIiwiZGVhY3RpdmF0ZSIsIm9mZiIsInJlbW92ZUNsYXNzIiwib25CbHVyIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvZmZCbHVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uRm9jdXMiLCJvZmZGb2N1cyIsIm9uU2Nyb2xsIiwib2ZmU2Nyb2xsIiwib25DaGFuZ2UiLCJjaGFuZ2VIYW5kbGVyIiwib2ZmQ2hhbmdlIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImRpZE1vdW50IiwicHJvcGVydGllcyIsImRvY3VtZW50Iiwid2lsbFVubW91bnQiLCJmcm9tQ2xhc3MiLCJDbGFzcyIsIkVsZW1lbnQiLCJVbmRvQnVmZmVyIiwiZnJvbU5vdGhpbmciLCJyaWNoVGV4dGFyZWEiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSIsImZ1bmMiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQTJCcUJBOzs7b0JBekJ5Qjs4REFFeEI7K0RBQ0M7MkRBQ0s7MkRBQ0E7NERBQ0M7K0RBQ0U7NkRBQ0E7d0JBRUo7eUJBQ1E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQyxJQUFRQyxpQkFVK0JDLGdCQUFVLENBVnpDRCxnQkFDQUUsa0JBUytCRCxnQkFBVSxDQVR6Q0MsaUJBQ0FDLGtCQVErQkYsZ0JBQVUsQ0FSekNFLGlCQUNBQyxtQkFPK0JILGdCQUFVLENBUHpDRyxrQkFDQUMsbUJBTStCSixnQkFBVSxDQU56Q0ksa0JBQ0FDLG1CQUsrQkwsZ0JBQVUsQ0FMekNLLGtCQUNBQyxvQkFJK0JOLGdCQUFVLENBSnpDTSxtQkFDQUMsb0JBRytCUCxnQkFBVSxDQUh6Q08sbUJBQ0FDLHFCQUUrQlIsZ0JBQVUsQ0FGekNRLG9CQUNBQyx5QkFDK0JULGdCQUFVLENBRHpDUyx3QkFDQUMsNkJBQStCVixnQkFBVSxDQUF6Q1U7QUFFTyxJQUFBLEFBQU1aLDZCQTRpQnBCLEFBNWlCYztjQUFNQTs4QkFBQUE7YUFBQUEsYUFDUGEsUUFBUSxFQUFFQyxPQUFPLEVB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
669
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgVEVYVCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5jb25zdCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgUEFTVEVfRVZFTlRfVFlQRSxcclxuICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSA9IGV2ZW50VHlwZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IFpfS0VZX0NPREUpIHtcclxuICAgICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgIGlmIChjdHJsS2V5IHx8IG1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgc2hpZnRLZXkgP1xyXG4gICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmx1ckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwYXN0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsgY2xpcGJvYXJkRGF0YSB9ID0gZXZlbnQsXHJcbiAgICAgICAgICB0ZXh0RGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShURVhUKTtcclxuXHJcbiAgICBpZiAodGV4dERhdGEgPT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoIXNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGV4dERhdGEsIC8vL1xyXG4gICAgICAgICAgaW5zZXJ0T3BlcmF0aW9uID0gSW5zZXJ0T3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBpbnNlcnRPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0ZWRDb250ZW50ID0gY29udGVudC5zbGljZShzdGFydCwgZW5kKTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgaGFzQ29udGVudENoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50UHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgPT09IHRoaXMucHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gIWNvbnRlbnRQcmV2aW91c0NvbnRlbnQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0VxdWFsVG8odGhpcy5wcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gIXNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNDb250ZW50KSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gY29udGVudDsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgZG9tRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5kbyhldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnVuZG8oKTtcclxuXHJcbiAgICBpZiAob3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkbyhldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnJlZG8oKTtcclxuXHJcbiAgICBpZiAob3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbU9wZXJhdGlvbihvcGVyYXRpb24pLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0ob3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucyksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24sIG9wZXJhdGlvbnMpO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy51bmRvQnVmZmVyLnRyYW5zZm9ybShvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBldmVudCA9IG51bGwsXHJcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcyxcclxuICAgICAgICAgIHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBsZXQgeyBlbGVtZW50IH0gPSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgICAgY29uc3QgeyBoYW5kbGVyIH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uQ2hhbmdlLCBvblNjcm9sbCwgb25Gb2N1cywgb25CbHVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub25TY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub25Gb2N1cyhmb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vbihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKENPUFlfRVZFTlRfVFlQRSwgdGhpcy5jb3B5SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoUEFTVEVfRVZFTlRfVFlQRSwgdGhpcy5wYXN0ZUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vZmYoU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHRoaXMuc2VsZWN0Q2hhbmdlSGFuZGxlcik7XHJcblxyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG5cclxuICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZm9jdXNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIHVuZG9CdWZmZXIgPSBVbmRvQnVmZmVyLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBudWxsLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBudWxsLFxyXG4gICAgICAgICAgcmljaFRleHRhcmVhID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIGZvY3VzZWQsIHJlYWRPbmx5LCB1bmRvQnVmZmVyLCBwcmV2aW91c0NvbnRlbnQsIHByZXZpb3VzU2VsZWN0aW9uLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xyXG5cclxuICAgIHJldHVybiByaWNoVGV4dGFyZWE7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZlcihmdW5jKSB7XHJcbiAgc2V0VGltZW91dChmdW5jLCAwKTtcclxufVxyXG4iXSwibmFtZXMiOlsiUmljaFRleHRhcmVhIiwiQ1VUX0VWRU5UX1RZUEUiLCJldmVudFR5cGVzIiwiQ09QWV9FVkVOVF9UWVBFIiwiQkxVUl9FVkVOVF9UWVBFIiwiUEFTVEVfRVZFTlRfVFlQRSIsIklOUFVUX0VWRU5UX1RZUEUiLCJGT0NVU19FVkVOVF9UWVBFIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJTQ1JPTExfRVZFTlRfVFlQRSIsIktFWURPV05fRVZFTlRfVFlQRSIsIkNPTlRFWFRNRU5VX0VWRU5UX1RZUEUiLCJTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSIsInNlbGVjdG9yIiwiZm9jdXNlZCIsInJlYWRPbmx5IiwidW5kb0J1ZmZlciIsInByZXZpb3VzQ29udGVudCIsInByZXZpb3VzU2VsZWN0aW9uIiwiaW50ZXJtZWRpYXRlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsInVuZG9hYmxlIiwiZXZlbnRUeXBlIiwic2VsZWN0aW9uQ2hhbmdlZCIsImhhc1NlbGVjdGlvbkNoYW5nZWQiLCJjb250ZW50Iiwic2V0Q29udGVudCIsImdldENvbnRlbnQiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwiY2hhbmdlZCIsImNhbGxIYW5kbGVycyIsIm9wZXJhdGlvbnMiLCJnZW5lcmF0ZU9wZXJhdGlvbnMiLCJhZGRPcGVyYXRpb25zIiwic2VsZWN0Q2hhbmdlSGFuZGxlciIsImNvbnRleHRtZW51SGFuZGxlciIsInByZXZlbnREZWZhdWx0Iiwia2V5RG93bkhhbmRsZXIiLCJrZXlDb2RlIiwiWl9LRVlfQ09ERSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJyZWRvIiwidW5kbyIsImRlZmVyIiwic2Nyb2xsSGFuZGxlciIsImZvY3VzSGFuZGxlciIsImJsdXJIYW5kbGVyIiwiaW5wdXRIYW5kbGVyIiwicGFzdGVIYW5kbGVyIiwiY2xpcGJvYXJkRGF0YSIsInRleHREYXRhIiwiZ2V0RGF0YSIsIlRFWFQiLCJFTVBUWV9TVFJJTkciLCJzZWxlY3Rpb25FbXB0eSIsImlzRW1wdHkiLCJkZWxldGVPcGVyYXRpb24iLCJEZWxldGVPcGVyYXRpb24iLCJmcm9tQ29udGVudEFuZFNlbGVjdGlvbiIsIm9wZXJhdGlvbiIsImFwcGx5T3BlcmF0aW9uIiwiaW5zZXJ0T3BlcmF0aW9uIiwiSW5zZXJ0T3BlcmF0aW9uIiwiY29weUhhbmRsZXIiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJjdXRIYW5kbGVyIiwiaXNGb2N1c2VkIiwiaXNSZWFkT25seSIsImdldFVuZG9CdWZmZXIiLCJnZXRQcmV2aW91c0NvbnRlbnQiLCJwcmV2b3VzQ29udGVudCIsImdldFByZXZpb3VzU2VsZWN0aW9uIiwic2V0Rm9jdXNlZCIsInNldFJlYWRPbmx5Iiwic2V0UHJldmlvdXNDb250ZW50Iiwic2V0UHJldmlvdXNTZWxlY3Rpb24iLCJpc0FjdGl2ZSIsImFjdGl2ZSIsImhhc0NsYXNzIiwiZG9tRWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJ2YWx1ZSIsIlNlbGVjdGlvbiIsImZyb21ET01FbGVtZW50IiwiZW5kUG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iLCJnZXRTdGFydFBvc2l0aW9uIiwic3RhcnQiLCJlbmQiLCJzbGljZSIsImNvbnRlbnRQcmV2aW91c0NvbnRlbnQiLCJzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiIsImlzRXF1YWxUbyIsIk9iamVjdCIsImFzc2lnbiIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJyZXZlcnQiLCJmcm9tT3BlcmF0aW9uIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtQ29udGVudCIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwidHJhbnNmb3JtU2VsZWN0aW9uIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXIiLCJoYW5kbGVyRWxlbWVudCIsImNhbGwiLCJhY3RpdmF0ZSIsIm9uIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkJsdXIiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmQmx1ciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkZvY3VzIiwib2ZmRm9jdXMiLCJvblNjcm9sbCIsIm9mZlNjcm9sbCIsIm9uQ2hhbmdlIiwiY2hhbmdlSGFuZGxlciIsIm9mZkNoYW5nZSIsImRpZE1vdW50IiwicHJvcGVydGllcyIsImRvY3VtZW50Iiwid2lsbFVubW91bnQiLCJmcm9tQ2xhc3MiLCJDbGFzcyIsIkVsZW1lbnQiLCJVbmRvQnVmZmVyIiwiZnJvbU5vdGhpbmciLCJyaWNoVGV4dGFyZWEiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZh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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "easy-richtextarea",
3
3
  "author": "James Smith",
4
- "version": "4.0.17",
4
+ "version": "4.0.19",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/easy-richtextarea",
7
7
  "description": "A textarea element that handles and hands off events well.",
@@ -103,6 +103,8 @@ export default class RichTextarea extends Element {
103
103
 
104
104
  selectChangeHandler = (event, element) => {
105
105
  if (this.focused) {
106
+ element = this; ///
107
+
106
108
  this.intermediateHandler(event, element);
107
109
  }
108
110
  }
@@ -241,38 +243,6 @@ export default class RichTextarea extends Element {
241
243
  return active;
242
244
  }
243
245
 
244
- undo(event, element) {
245
- const operation = this.undoBuffer.undo();
246
-
247
- if (operation !== null) {
248
- const undoable = false,
249
- selection = Selection.fromOperation(operation),
250
- setPreviousSelection = false;
251
-
252
- this.applyOperation(operation);
253
-
254
- this.setSelection(selection, setPreviousSelection);
255
-
256
- this.intermediateHandler(event, element, undoable);
257
- }
258
- }
259
-
260
- redo(event, element) {
261
- const operation = this.undoBuffer.redo();
262
-
263
- if (operation !== null) {
264
- const undoable = false,
265
- selection = Selection.fromOperation(operation),
266
- setPreviousSelection = false;
267
-
268
- this.applyOperation(operation);
269
-
270
- this.setSelection(selection, setPreviousSelection);
271
-
272
- this.intermediateHandler(event, element, undoable);
273
- }
274
- }
275
-
276
246
  getContent() {
277
247
  const domElement = this.getDOMElement(),
278
248
  { value } = domElement,
@@ -343,23 +313,32 @@ export default class RichTextarea extends Element {
343
313
  }
344
314
  }
345
315
 
346
- applyOperation(operation) {
347
- let content = this.getContent(),
348
- selection = this.getSelection();
316
+ undo(event, element) {
317
+ const operation = this.undoBuffer.undo();
349
318
 
350
- const transformedContent = operation.transformContent(content),
351
- transformedSelection = operation.transformSelection(selection);
319
+ if (operation !== null) {
320
+ this.revert(event, element, operation);
321
+ }
322
+ }
352
323
 
353
- content = transformedContent; ///
324
+ redo(event, element) {
325
+ const operation = this.undoBuffer.redo();
354
326
 
355
- selection = transformedSelection; ///
327
+ if (operation !== null) {
328
+ this.revert(event, element, operation);
329
+ }
330
+ }
356
331
 
357
- const setPreviousContent = false,
332
+ revert(event, element, operation) {
333
+ const undoable = false,
334
+ selection = Selection.fromOperation(operation),
358
335
  setPreviousSelection = false;
359
336
 
360
- this.setContent(content, setPreviousContent);
337
+ this.applyOperation(operation);
361
338
 
362
339
  this.setSelection(selection, setPreviousSelection);
340
+
341
+ this.intermediateHandler(event, element, undoable);
363
342
  }
364
343
 
365
344
  transform(operations) {
@@ -380,7 +359,7 @@ export default class RichTextarea extends Element {
380
359
 
381
360
  this.setSelection(selection, setPreviousSelection);
382
361
 
383
- this.undoBuffer.transform(transformedPendingOperations);
362
+ this.undoBuffer.transform(operations);
384
363
 
385
364
  const event = null,
386
365
  element = this,
@@ -390,6 +369,42 @@ export default class RichTextarea extends Element {
390
369
  this.intermediateHandler(event, element, undoable, eventType);
391
370
  }
392
371
 
372
+ callHandlers(eventType, ...remainingArguments) {
373
+ const eventListeners = this.findEventListeners(eventType);
374
+
375
+ eventListeners.forEach((eventListener) => {
376
+ let { element } = eventListener;
377
+
378
+ const { handler } = eventListener,
379
+ handlerElement = element; ///
380
+
381
+ element = this; ///
382
+
383
+ if ((handler !== this.blurHandler) && (handler !== this.focusHandler) && (handler !== this.scrollHandler)) {
384
+ handler.call(handlerElement, ...remainingArguments, element);
385
+ }
386
+ });
387
+ }
388
+
389
+ applyOperation(operation) {
390
+ let content = this.getContent(),
391
+ selection = this.getSelection();
392
+
393
+ const transformedContent = operation.transformContent(content),
394
+ transformedSelection = operation.transformSelection(selection);
395
+
396
+ content = transformedContent; ///
397
+
398
+ selection = transformedSelection; ///
399
+
400
+ const setPreviousContent = false,
401
+ setPreviousSelection = false;
402
+
403
+ this.setContent(content, setPreviousContent);
404
+
405
+ this.setSelection(selection, setPreviousSelection);
406
+ }
407
+
393
408
  activate() {
394
409
  this.on(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
395
410
 
@@ -474,23 +489,6 @@ export default class RichTextarea extends Element {
474
489
  this.removeEventListener(eventType, handler, element);
475
490
  }
476
491
 
477
- callHandlers(eventType, ...remainingArguments) {
478
- const eventListeners = this.findEventListeners(eventType);
479
-
480
- eventListeners.forEach((eventListener) => {
481
- let { element } = eventListener;
482
-
483
- const { handler } = eventListener,
484
- handlerElement = element; ///
485
-
486
- element = this; ///
487
-
488
- if ((handler !== this.blurHandler) && (handler !== this.focusHandler) && (handler !== this.scrollHandler)) {
489
- handler.call(handlerElement, ...remainingArguments, element);
490
- }
491
- });
492
- }
493
-
494
492
  didMount() {
495
493
  const { onChange, onScroll, onFocus, onBlur } = this.properties,
496
494
  changeHandler = onChange, ///