easy-richtextarea 4.0.3 → 4.0.5
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.
- package/README.md +0 -8
- package/example.js +1535 -1039
- package/lib/browser.js +9 -5
- package/lib/constants.js +13 -4
- package/lib/contentCompare.js +34 -0
- package/lib/example/richTextarea.js +2 -2
- package/lib/example/view.js +18 -9
- package/lib/keyCodes.js +13 -0
- package/lib/main.js +9 -5
- package/lib/operation/delete.js +101 -52
- package/lib/operation/empty.js +21 -6
- package/lib/operation/insert.js +78 -31
- package/lib/operations/fromJSON.js +4 -4
- package/lib/operations/generate.js +3 -3
- package/lib/richTextarea.js +258 -153
- package/lib/selection.js +55 -13
- package/lib/transform/content.js +19 -0
- package/lib/{operations/transform.js → transform/operations.js} +3 -7
- package/lib/transform/selection.js +19 -0
- package/lib/types.js +13 -13
- package/lib/undoBuffer.js +140 -0
- package/package.json +3 -2
- package/src/browser.js +3 -3
- package/src/constants.js +1 -0
- package/src/contentCompare.js +34 -0
- package/src/example/richTextarea.js +11 -9
- package/src/example/view.js +28 -10
- package/src/keyCodes.js +3 -0
- package/src/main.js +3 -2
- package/src/operation/delete.js +135 -58
- package/src/operation/empty.js +19 -14
- package/src/operation/insert.js +97 -39
- package/src/operations/fromJSON.js +4 -4
- package/src/operations/generate.js +8 -4
- package/src/richTextarea.js +343 -181
- package/src/selection.js +53 -9
- package/src/transform/content.js +11 -0
- package/src/{operations/transform.js → transform/operations.js} +3 -3
- package/src/transform/selection.js +11 -0
- package/src/types.js +6 -6
- package/src/undoBuffer.js +105 -0
- package/test/content/transform.js +9 -11
- package/test/helpers.js +27 -21
- package/test/operation/delete.js +187 -147
- package/test/operation/empty.js +3 -5
- package/test/operation/insert.js +134 -118
- package/test/operations/generate.js +19 -22
- package/test/operations/transform.js +37 -98
- package/lib/content/transform.js +0 -17
- package/lib/stringCompare.js +0 -33
- package/src/content/transform.js +0 -5
- package/src/stringCompare.js +0 -33
package/lib/richTextarea.js
CHANGED
|
@@ -10,6 +10,14 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _easy = require("easy");
|
|
12
12
|
var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
|
|
13
|
+
var _undoBuffer = /*#__PURE__*/ _interopRequireDefault(require("./undoBuffer"));
|
|
14
|
+
var _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
|
|
15
|
+
var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
|
|
16
|
+
var _content = /*#__PURE__*/ _interopRequireDefault(require("./transform/content"));
|
|
17
|
+
var _selection1 = /*#__PURE__*/ _interopRequireDefault(require("./transform/selection"));
|
|
18
|
+
var _generate = /*#__PURE__*/ _interopRequireDefault(require("./operations/generate"));
|
|
19
|
+
var _keyCodes = require("./keyCodes");
|
|
20
|
+
var _constants = require("./constants");
|
|
13
21
|
function _arrayLikeToArray(arr, len) {
|
|
14
22
|
if (len == null || len > arr.length) len = arr.length;
|
|
15
23
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
@@ -195,75 +203,173 @@ function _createSuper(Derived) {
|
|
|
195
203
|
return _possibleConstructorReturn(this, result);
|
|
196
204
|
};
|
|
197
205
|
}
|
|
198
|
-
var
|
|
199
|
-
var defer = function(func) {
|
|
200
|
-
return setTimeout(func, 0);
|
|
201
|
-
};
|
|
206
|
+
var CUT_EVENT_TYPE = _easy.eventTypes.CUT_EVENT_TYPE, COPY_EVENT_TYPE = _easy.eventTypes.COPY_EVENT_TYPE, BLUR_EVENT_TYPE = _easy.eventTypes.BLUR_EVENT_TYPE, PASTE_EVENT_TYPE = _easy.eventTypes.PASTE_EVENT_TYPE, INPUT_EVENT_TYPE = _easy.eventTypes.INPUT_EVENT_TYPE, FOCUS_EVENT_TYPE = _easy.eventTypes.FOCUS_EVENT_TYPE, CHANGE_EVENT_TYPE = _easy.eventTypes.CHANGE_EVENT_TYPE, SCROLL_EVENT_TYPE = _easy.eventTypes.SCROLL_EVENT_TYPE, KEYDOWN_EVENT_TYPE = _easy.eventTypes.KEYDOWN_EVENT_TYPE, CONTEXTMENU_EVENT_TYPE = _easy.eventTypes.CONTEXTMENU_EVENT_TYPE, SELECTIONCHANGE_EVENT_TYPE = _easy.eventTypes.SELECTIONCHANGE_EVENT_TYPE;
|
|
202
207
|
var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
203
208
|
_inherits(RichTextarea, Element);
|
|
204
209
|
var _super = _createSuper(RichTextarea);
|
|
205
|
-
function RichTextarea() {
|
|
210
|
+
function RichTextarea(selector, focused, readOnly, undoBuffer, previousContent, previousSelection) {
|
|
206
211
|
_classCallCheck(this, RichTextarea);
|
|
207
212
|
var _this;
|
|
208
|
-
_this = _super.
|
|
209
|
-
_defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element
|
|
210
|
-
var
|
|
211
|
-
if (readOnly) {
|
|
212
|
-
var
|
|
213
|
+
_this = _super.call(this, selector);
|
|
214
|
+
_defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element) {
|
|
215
|
+
var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
|
|
216
|
+
if (_this.readOnly) {
|
|
217
|
+
var content = _this.previousContent; ///
|
|
213
218
|
_this.setContent(content);
|
|
214
219
|
}
|
|
215
|
-
var
|
|
216
|
-
if (changed
|
|
220
|
+
var content1 = _this.getContent(), selection = _this.getSelection(), contentChanged = _this.hasContentChanged(), changed = contentChanged || selectionChanged;
|
|
221
|
+
if (changed) {
|
|
217
222
|
_this.callHandlers(eventType, event, element);
|
|
218
223
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
_this.
|
|
226
|
-
|
|
227
|
-
return _this.intermediateHandler(event, element, eventType, forced);
|
|
228
|
-
});
|
|
224
|
+
if (undoable) {
|
|
225
|
+
if (contentChanged) {
|
|
226
|
+
var operations = (0, _generate.default)(_this.previousContent, content1);
|
|
227
|
+
_this.undoBuffer.addOperations(operations);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
_this.previousContent = content1; ///
|
|
231
|
+
_this.previousSelection = selection; ///
|
|
229
232
|
});
|
|
230
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
_this.intermediateHandler(event, element, eventTYpe, forced);
|
|
233
|
+
_defineProperty(_assertThisInitialized(_this), "selectChangeHandler", function(event, element) {
|
|
234
|
+
if (_this.focused) {
|
|
235
|
+
_this.intermediateHandler(event, element);
|
|
234
236
|
}
|
|
235
237
|
});
|
|
236
|
-
_defineProperty(_assertThisInitialized(_this), "
|
|
237
|
-
|
|
238
|
-
_this.setMouseDown(mouseDown);
|
|
238
|
+
_defineProperty(_assertThisInitialized(_this), "contextmenuHandler", function(event, element) {
|
|
239
|
+
event.preventDefault();
|
|
239
240
|
});
|
|
240
241
|
_defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
|
|
241
|
-
var
|
|
242
|
+
var keyCode = event.keyCode;
|
|
243
|
+
if (keyCode === _keyCodes.Z_KEY_CODE) {
|
|
244
|
+
var ctrlKey = event.ctrlKey, metaKey = event.metaKey;
|
|
245
|
+
if (ctrlKey || metaKey) {
|
|
246
|
+
var shiftKey = event.shiftKey;
|
|
247
|
+
shiftKey ? _this.redo(event, element) : _this.undo(event, element);
|
|
248
|
+
event.preventDefault();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
242
252
|
defer(function() {
|
|
243
|
-
|
|
253
|
+
_this.intermediateHandler(event, element);
|
|
244
254
|
});
|
|
245
255
|
});
|
|
246
|
-
_defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
|
|
247
|
-
var forced = false, eventType = CHANGE_EVENT_TYPE;
|
|
248
|
-
_this.intermediateHandler(event, element, eventType, forced);
|
|
249
|
-
});
|
|
250
256
|
_defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
|
|
251
257
|
var eventType = SCROLL_EVENT_TYPE;
|
|
252
258
|
_this.callHandlers(eventType, event, element);
|
|
253
259
|
});
|
|
254
260
|
_defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
|
|
255
|
-
|
|
261
|
+
_this.focused = true;
|
|
256
262
|
defer(function() {
|
|
257
|
-
|
|
263
|
+
var undoable = true, eventType = FOCUS_EVENT_TYPE, selectionChanged = true;
|
|
264
|
+
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
258
265
|
});
|
|
259
266
|
});
|
|
260
267
|
_defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
|
|
261
|
-
|
|
262
|
-
|
|
268
|
+
_this.focused = false;
|
|
269
|
+
var undoable = true, eventType = BLUR_EVENT_TYPE, selectionChanged = true;
|
|
270
|
+
_this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
|
|
271
|
+
});
|
|
272
|
+
_defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
|
|
273
|
+
_this.intermediateHandler(event, element);
|
|
274
|
+
});
|
|
275
|
+
_defineProperty(_assertThisInitialized(_this), "pasteHandler", function(event, element) {
|
|
276
|
+
var clipboardData = event.clipboardData, textData = clipboardData.getData(_constants.TEXT);
|
|
277
|
+
if (textData === _constants.EMPTY_STRING) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
|
|
281
|
+
if (!selectionEmpty) {
|
|
282
|
+
var content = _this.getContent(), deleteOperation = _delete.default.fromContentAndSelection(content, selection), operation = deleteOperation;
|
|
283
|
+
_this.applyOperation(operation);
|
|
284
|
+
}
|
|
285
|
+
var content1 = textData, insertOperation = _insert.default.fromContentAndSelection(content1, selection), operation1 = insertOperation; ///
|
|
286
|
+
_this.applyOperation(operation1);
|
|
287
|
+
_this.intermediateHandler(event, element);
|
|
288
|
+
event.preventDefault();
|
|
289
|
+
});
|
|
290
|
+
_defineProperty(_assertThisInitialized(_this), "copyHandler", function(event, element) {
|
|
291
|
+
var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
|
|
292
|
+
if (selectionEmpty) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
var selectedContent = _this.getSelectedContent();
|
|
296
|
+
navigator.clipboard.writeText(selectedContent);
|
|
297
|
+
event.preventDefault();
|
|
263
298
|
});
|
|
299
|
+
_defineProperty(_assertThisInitialized(_this), "cutHandler", function(event, element) {
|
|
300
|
+
var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
|
|
301
|
+
if (selectionEmpty) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
var selectedContent = _this.getSelectedContent();
|
|
305
|
+
navigator.clipboard.writeText(selectedContent);
|
|
306
|
+
var content = _this.getContent(), deleteOperation = _delete.default.fromContentAndSelection(content, selection), operation = deleteOperation; ///
|
|
307
|
+
_this.applyOperation(operation);
|
|
308
|
+
_this.intermediateHandler(event, element);
|
|
309
|
+
event.preventDefault();
|
|
310
|
+
});
|
|
311
|
+
_this.focused = focused;
|
|
312
|
+
_this.readOnly = readOnly;
|
|
313
|
+
_this.undoBuffer = undoBuffer;
|
|
314
|
+
_this.previousContent = previousContent;
|
|
315
|
+
_this.previousSelection = previousSelection;
|
|
264
316
|
return _this;
|
|
265
317
|
}
|
|
266
318
|
_createClass(RichTextarea, [
|
|
319
|
+
{
|
|
320
|
+
key: "isFocused",
|
|
321
|
+
value: function isFocused() {
|
|
322
|
+
return this.focused;
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
key: "isReadOnly",
|
|
327
|
+
value: function isReadOnly() {
|
|
328
|
+
return this.readOnly;
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
key: "getUndoBuffer",
|
|
333
|
+
value: function getUndoBuffer() {
|
|
334
|
+
return this.undoBuffer;
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
key: "getPreviousContent",
|
|
339
|
+
value: function getPreviousContent() {
|
|
340
|
+
return this.prevousContent;
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
key: "getPreviousSelection",
|
|
345
|
+
value: function getPreviousSelection() {
|
|
346
|
+
return this.previousSelection;
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
key: "setFocused",
|
|
351
|
+
value: function setFocused(focused) {
|
|
352
|
+
this.focused = focused;
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
key: "setReadOnly",
|
|
357
|
+
value: function setReadOnly(readOnly) {
|
|
358
|
+
this.readOnly = readOnly;
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
key: "setPreviousContent",
|
|
363
|
+
value: function setPreviousContent(previousContent) {
|
|
364
|
+
this.previousContent = previousContent;
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
key: "setPreviousSelection",
|
|
369
|
+
value: function setPreviousSelection(previousSelection) {
|
|
370
|
+
this.previousSelection = previousSelection;
|
|
371
|
+
}
|
|
372
|
+
},
|
|
267
373
|
{
|
|
268
374
|
key: "isActive",
|
|
269
375
|
value: function isActive() {
|
|
@@ -271,6 +377,28 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
271
377
|
return active;
|
|
272
378
|
}
|
|
273
379
|
},
|
|
380
|
+
{
|
|
381
|
+
key: "undo",
|
|
382
|
+
value: function undo(event, element) {
|
|
383
|
+
var operation = this.undoBuffer.undo();
|
|
384
|
+
if (operation !== null) {
|
|
385
|
+
var undoable = false;
|
|
386
|
+
this.applyOperation(operation);
|
|
387
|
+
this.intermediateHandler(event, element, undoable);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
key: "redo",
|
|
393
|
+
value: function redo(event, element) {
|
|
394
|
+
var operation = this.undoBuffer.redo();
|
|
395
|
+
if (operation !== null) {
|
|
396
|
+
var undoable = false;
|
|
397
|
+
this.applyOperation(operation);
|
|
398
|
+
this.intermediateHandler(event, element, undoable);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
},
|
|
274
402
|
{
|
|
275
403
|
key: "getContent",
|
|
276
404
|
value: function getContent() {
|
|
@@ -285,56 +413,81 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
285
413
|
return selection;
|
|
286
414
|
}
|
|
287
415
|
},
|
|
416
|
+
{
|
|
417
|
+
key: "getSelectedContent",
|
|
418
|
+
value: function getSelectedContent() {
|
|
419
|
+
var content = this.getContent(), selection = this.getSelection(), endPosition = selection.getEndPosition(), startPosition = selection.getStartPosition(), start = startPosition, end = endPosition, selectedContent = content.slice(start, end);
|
|
420
|
+
return selectedContent;
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
key: "hasContentChanged",
|
|
425
|
+
value: function hasContentChanged() {
|
|
426
|
+
var content = this.getContent(), contentPreviousContent = content === this.previousContent, contentChanged = !contentPreviousContent;
|
|
427
|
+
return contentChanged;
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
key: "hasSelectionChanged",
|
|
432
|
+
value: function hasSelectionChanged() {
|
|
433
|
+
var selection = this.getSelection(), selectionPreviousSelection = selection.isEqualTo(this.previousSelection), selectionChanged = !selectionPreviousSelection; ///
|
|
434
|
+
return selectionChanged;
|
|
435
|
+
}
|
|
436
|
+
},
|
|
288
437
|
{
|
|
289
438
|
key: "setContent",
|
|
290
439
|
value: function setContent(content) {
|
|
291
|
-
var
|
|
440
|
+
var setPreviousContent = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
|
|
441
|
+
var value = content, domElement = this.getDOMElement();
|
|
292
442
|
Object.assign(domElement, {
|
|
293
443
|
value: value
|
|
294
444
|
});
|
|
295
|
-
|
|
445
|
+
if (setPreviousContent) {
|
|
446
|
+
this.previousContent = content; ///
|
|
447
|
+
}
|
|
296
448
|
}
|
|
297
449
|
},
|
|
298
450
|
{
|
|
299
451
|
key: "setSelection",
|
|
300
452
|
value: function setSelection(selection) {
|
|
301
|
-
var
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
453
|
+
var setPreviousSelection = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
|
|
454
|
+
var selectionStartPosition = selection.getStartPosition(), selectionEndPosition = selection.getEndPosition(), selectionStart = selectionStartPosition, selectionEnd = selectionEndPosition, domElement = this.getDOMElement();
|
|
455
|
+
domElement.setSelectionRange(selectionStart, selectionEnd);
|
|
456
|
+
if (setPreviousSelection) {
|
|
457
|
+
this.previousSelection = selection; ///
|
|
458
|
+
}
|
|
307
459
|
}
|
|
308
460
|
},
|
|
309
461
|
{
|
|
310
|
-
key: "
|
|
311
|
-
value: function
|
|
312
|
-
var
|
|
313
|
-
|
|
462
|
+
key: "applyOperation",
|
|
463
|
+
value: function applyOperation(operation) {
|
|
464
|
+
var content = this.getContent(), selection = this.getSelection();
|
|
465
|
+
var transformedContent = operation.transformContent(content), transformedSelection = operation.transformSelection(selection);
|
|
466
|
+
content = transformedContent; ///
|
|
467
|
+
selection = transformedSelection; ///
|
|
468
|
+
var setPreviousContent = false, setPreviousSelection = false;
|
|
469
|
+
this.setContent(content, setPreviousContent);
|
|
470
|
+
this.setSelection(selection, setPreviousSelection);
|
|
314
471
|
}
|
|
315
472
|
},
|
|
316
473
|
{
|
|
317
|
-
key: "
|
|
318
|
-
value: function
|
|
319
|
-
var content = this.getContent(),
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
474
|
+
key: "transform",
|
|
475
|
+
value: function transform(transformedPendingOperations) {
|
|
476
|
+
var content = this.getContent(), selection = this.getSelection();
|
|
477
|
+
var operations = transformedPendingOperations, transformedContent = (0, _content.default)(content, operations), transformedSelection = (0, _selection1.default)(selection, operations);
|
|
478
|
+
content = transformedContent; ///
|
|
479
|
+
selection = transformedSelection; ///
|
|
480
|
+
var setPreviousContent = false, setPreviousSelection = false;
|
|
481
|
+
this.setContent(content, setPreviousContent);
|
|
482
|
+
this.setSelection(selection, setPreviousSelection);
|
|
483
|
+
this.undoBuffer.transform(transformedPendingOperations);
|
|
484
|
+
var event = null, element = this, undoable = false, eventType = CHANGE_EVENT_TYPE;
|
|
485
|
+
this.intermediateHandler(event, element, undoable, eventType);
|
|
328
486
|
}
|
|
329
487
|
},
|
|
330
488
|
{
|
|
331
489
|
key: "activate",
|
|
332
490
|
value: function activate() {
|
|
333
|
-
var mouseDown = false;
|
|
334
|
-
this.setMouseDown(mouseDown);
|
|
335
|
-
_easy.window.on("".concat(BLUR_EVENT_TYPE, " ").concat(MOUSEUP_EVENT_TYPE, " ").concat(CONTEXTMENU_EVENT_TYPE), this.mouseUpHandler, this); ///
|
|
336
|
-
this.on(MOUSEDOWN_EVENT_TYPE, this.mouseDownHandler, this);
|
|
337
|
-
this.on(MOUSEMOVE_EVENT_TYPE, this.mouseMoveHandler, this);
|
|
338
491
|
this.on(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
|
|
339
492
|
this.on(INPUT_EVENT_TYPE, this.inputHandler, this);
|
|
340
493
|
this.on(SCROLL_EVENT_TYPE, this.scrollHandler, this);
|
|
@@ -346,11 +499,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
346
499
|
{
|
|
347
500
|
key: "deactivate",
|
|
348
501
|
value: function deactivate() {
|
|
349
|
-
var mouseDown = false;
|
|
350
|
-
this.setMouseDown(mouseDown);
|
|
351
|
-
_easy.window.off("".concat(BLUR_EVENT_TYPE, " ").concat(MOUSEUP_EVENT_TYPE, " ").concat(CONTEXTMENU_EVENT_TYPE), this.mouseUpHandler, this); ///
|
|
352
|
-
this.off(MOUSEDOWN_EVENT_TYPE, this.mouseDownHandler, this);
|
|
353
|
-
this.off(MOUSEMOVE_EVENT_TYPE, this.mouseMoveHandler, this);
|
|
354
502
|
this.off(KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
|
|
355
503
|
this.off(INPUT_EVENT_TYPE, this.inputHandler, this);
|
|
356
504
|
this.off(SCROLL_EVENT_TYPE, this.scrollHandler, this);
|
|
@@ -424,7 +572,9 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
424
572
|
var _this = this;
|
|
425
573
|
var eventListeners = this.findEventListeners(eventType);
|
|
426
574
|
eventListeners.forEach(function(eventListener) {
|
|
427
|
-
var
|
|
575
|
+
var element = eventListener.element;
|
|
576
|
+
var handler = eventListener.handler, handlerElement = element; ///
|
|
577
|
+
element = _this; ///
|
|
428
578
|
if (handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler) {
|
|
429
579
|
var _handler;
|
|
430
580
|
(_handler = handler).call.apply(_handler, [
|
|
@@ -436,89 +586,22 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
436
586
|
});
|
|
437
587
|
}
|
|
438
588
|
},
|
|
439
|
-
{
|
|
440
|
-
key: "isReadOnly",
|
|
441
|
-
value: function isReadOnly() {
|
|
442
|
-
var readOnly = this.getState().readOnly;
|
|
443
|
-
return readOnly;
|
|
444
|
-
}
|
|
445
|
-
},
|
|
446
|
-
{
|
|
447
|
-
key: "isMouseDown",
|
|
448
|
-
value: function isMouseDown() {
|
|
449
|
-
var mouseDown = this.getState().mouseDown;
|
|
450
|
-
return mouseDown;
|
|
451
|
-
}
|
|
452
|
-
},
|
|
453
|
-
{
|
|
454
|
-
key: "getPreviousContent",
|
|
455
|
-
value: function getPreviousContent() {
|
|
456
|
-
var previousContent = this.getState().previousContent;
|
|
457
|
-
return previousContent;
|
|
458
|
-
}
|
|
459
|
-
},
|
|
460
|
-
{
|
|
461
|
-
key: "getPreviousSelection",
|
|
462
|
-
value: function getPreviousSelection() {
|
|
463
|
-
var previousSelection = this.getState().previousSelection;
|
|
464
|
-
return previousSelection;
|
|
465
|
-
}
|
|
466
|
-
},
|
|
467
|
-
{
|
|
468
|
-
key: "setReadOnly",
|
|
469
|
-
value: function setReadOnly(readOnly) {
|
|
470
|
-
this.updateState({
|
|
471
|
-
readOnly: readOnly
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
},
|
|
475
|
-
{
|
|
476
|
-
key: "setMouseDown",
|
|
477
|
-
value: function setMouseDown(mouseDown) {
|
|
478
|
-
this.updateState({
|
|
479
|
-
mouseDown: mouseDown
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
},
|
|
483
|
-
{
|
|
484
|
-
key: "setPreviousContent",
|
|
485
|
-
value: function setPreviousContent(previousContent) {
|
|
486
|
-
this.updateState({
|
|
487
|
-
previousContent: previousContent
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
},
|
|
491
|
-
{
|
|
492
|
-
key: "setPreviousSelection",
|
|
493
|
-
value: function setPreviousSelection(previousSelection) {
|
|
494
|
-
this.updateState({
|
|
495
|
-
previousSelection: previousSelection
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
},
|
|
499
|
-
{
|
|
500
|
-
key: "setInitialState",
|
|
501
|
-
value: function setInitialState() {
|
|
502
|
-
var readOnly = false, mouseDown = false, previousContent = null, previousSelection = null;
|
|
503
|
-
this.setState({
|
|
504
|
-
readOnly: readOnly,
|
|
505
|
-
mouseDown: mouseDown,
|
|
506
|
-
previousContent: previousContent,
|
|
507
|
-
previousSelection: previousSelection
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
},
|
|
511
589
|
{
|
|
512
590
|
key: "didMount",
|
|
513
591
|
value: function didMount() {
|
|
514
592
|
var _this_properties = this.properties, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, onFocus = _this_properties.onFocus, onBlur = _this_properties.onBlur, changeHandler = onChange, scrollHandler = onScroll, focusHandler = onFocus, blurHandler = onBlur; ///
|
|
593
|
+
var content = this.getContent(), selection = this.getSelection();
|
|
594
|
+
this.previousContent = content; ///
|
|
595
|
+
this.previousSelection = selection; ///
|
|
515
596
|
changeHandler && this.onChange(changeHandler, this);
|
|
516
597
|
scrollHandler && this.onScroll(scrollHandler, this);
|
|
517
598
|
focusHandler && this.onFocus(focusHandler, this);
|
|
518
599
|
blurHandler && this.onBlur(blurHandler, this);
|
|
519
|
-
|
|
520
|
-
this.
|
|
521
|
-
this.
|
|
600
|
+
this.on(CUT_EVENT_TYPE, this.cutHandler);
|
|
601
|
+
this.on(COPY_EVENT_TYPE, this.copyHandler);
|
|
602
|
+
this.on(PASTE_EVENT_TYPE, this.pasteHandler);
|
|
603
|
+
this.on(CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
604
|
+
_easy.document.on(SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
522
605
|
}
|
|
523
606
|
},
|
|
524
607
|
{
|
|
@@ -529,16 +612,35 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
529
612
|
scrollHandler && this.offScroll(scrollHandler, this);
|
|
530
613
|
focusHandler && this.offFocus(focusHandler, this);
|
|
531
614
|
blurHandler && this.offBlur(blurHandler, this);
|
|
615
|
+
this.off(CUT_EVENT_TYPE, this.cutHandler);
|
|
616
|
+
this.off(COPY_EVENT_TYPE, this.copyHandler);
|
|
617
|
+
this.off(PASTE_EVENT_TYPE, this.pasteHandler);
|
|
618
|
+
this.off(CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
|
|
619
|
+
_easy.document.off(SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
|
|
532
620
|
var active = this.isActive();
|
|
533
621
|
if (active) {
|
|
534
622
|
this.deactivate();
|
|
535
623
|
}
|
|
536
624
|
}
|
|
537
|
-
}
|
|
625
|
+
}
|
|
626
|
+
], [
|
|
538
627
|
{
|
|
539
|
-
key: "
|
|
540
|
-
value: function
|
|
541
|
-
|
|
628
|
+
key: "fromClass",
|
|
629
|
+
value: function fromClass(Class, properties) {
|
|
630
|
+
for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
|
|
631
|
+
remainingArguments[_key - 2] = arguments[_key];
|
|
632
|
+
}
|
|
633
|
+
var _Element;
|
|
634
|
+
var focused = false, readOnly = false, undoBuffer = _undoBuffer.default.fromNothing(), previousContent = null, previousSelection = null, richTextarea = (_Element = _easy.Element).fromClass.apply(_Element, [
|
|
635
|
+
Class,
|
|
636
|
+
properties,
|
|
637
|
+
focused,
|
|
638
|
+
readOnly,
|
|
639
|
+
undoBuffer,
|
|
640
|
+
previousContent,
|
|
641
|
+
previousSelection
|
|
642
|
+
].concat(_toConsumableArray(remainingArguments)));
|
|
643
|
+
return richTextarea;
|
|
542
644
|
}
|
|
543
645
|
}
|
|
544
646
|
]);
|
|
@@ -554,5 +656,8 @@ _defineProperty(RichTextarea, "ignoredProperties", [
|
|
|
554
656
|
_defineProperty(RichTextarea, "defaultProperties", {
|
|
555
657
|
className: "rich"
|
|
556
658
|
});
|
|
659
|
+
function defer(func) {
|
|
660
|
+
setTimeout(func, 0);
|
|
661
|
+
}
|
|
557
662
|
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyB3aW5kb3csIEVsZW1lbnQsIGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xyXG5cclxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIlxyXG5cclxuY29uc3QgeyBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRVVQX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcztcclxuXHJcbmNvbnN0IGRlZmVyID0gKGZ1bmMpID0+IHNldFRpbWVvdXQoZnVuYywgMCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBpbnRlcm1lZGlhdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkgPT4ge1xyXG4gICAgY29uc3QgcmVhZE9ubHkgPSB0aGlzLmlzUmVhZE9ubHkoKTtcclxuXHJcbiAgICBpZiAocmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgICAgY29udGVudCA9IHByZXZpb3VzQ29udGVudDsgIC8vL1xyXG5cclxuICAgICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmhhc0NoYW5nZWQoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCB8fCBmb3JjZWQpIHtcclxuICAgICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgbW91c2VEb3duSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgICBtb3VzZURvd24gPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5zZXRNb3VzZURvd24obW91c2VEb3duKTtcclxuXHJcbiAgICBkZWZlcigoKSA9PiB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIGV2ZW50VHlwZSwgZm9yY2VkKSk7XHJcbiAgfVxyXG5cclxuICBtb3VzZU1vdmVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSBmYWxzZSxcclxuICAgICAgICAgIG1vdXNlRG93biA9IHRoaXMuaXNNb3VzZURvd24oKSxcclxuICAgICAgICAgIGV2ZW50VFlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIGlmIChtb3VzZURvd24pIHtcclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFRZcGUsIGZvcmNlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZVVwSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgbW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRNb3VzZURvd24obW91c2VEb3duKTtcclxuICB9O1xyXG5cclxuICBrZXlEb3duSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBkZWZlcigoKSA9PiB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIGV2ZW50VHlwZSwgZm9yY2VkKSk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgYmx1ckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCk7XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHZhbHVlIH0gPSBkb21FbGVtZW50LFxyXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbikge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25FbmRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb24sICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uU3RhcnQsXHJcbiAgICAgIHNlbGVjdGlvbkVuZFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBoYXNDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudENoYW5nZWQgPSB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5oYXNTZWxlY3Rpb25DaGFuZ2VkKCksXHJcbiAgICAgICAgICBjaGFuZ2VkID0gKGNvbnRlbnRDaGFuZ2VkIHx8IHNlbGVjdGlvbkNoYW5nZWQpO1xyXG5cclxuICAgIHJldHVybiBjaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzQ29udGVudENoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSB0aGlzLmdldFByZXZpb3VzQ29udGVudCgpLFxyXG4gICAgICAgICAgY29udGVudERpZmZlcmVudFRvUHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgIT09IHByZXZpb3VzQ29udGVudCksXHJcbiAgICAgICAgICBjb250ZW50Q2hhbmdlZCA9IGNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudDsgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb24uaXNEaWZmZXJlbnRUbyhwcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gc2VsZWN0aW9uRGlmZmVyZW50VG9QcmV2aW91c1NlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIGNvbnN0IG1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcblxyXG4gICAgd2luZG93Lm9uKGAke0JMVVJfRVZFTlRfVFlQRX0gJHtNT1VTRVVQX0VWRU5UX1RZUEV9ICR7Q09OVEVYVE1FTlVfRVZFTlRfVFlQRX1gLCB0aGlzLm1vdXNlVXBIYW5kbGVyLCB0aGlzKTsgLy8vXHJcblxyXG4gICAgdGhpcy5vbihNT1VTRURPV05fRVZFTlRfVFlQRSwgdGhpcy5tb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKE1PVVNFTU9WRV9FVkVOVF9UWVBFLCB0aGlzLm1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oS0VZRE9XTl9FVkVOVF9UWVBFLCB0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKFNDUk9MTF9FVkVOVF9UWVBFLCB0aGlzLnNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIGNvbnN0IG1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcblxyXG4gICAgd2luZG93Lm9mZihgJHtCTFVSX0VWRU5UX1RZUEV9ICR7TU9VU0VVUF9FVkVOVF9UWVBFfSAke0NPTlRFWFRNRU5VX0VWRU5UX1RZUEV9YCwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7IC8vL1xyXG5cclxuICAgIHRoaXMub2ZmKE1PVVNFRE9XTl9FVkVOVF9UWVBFLCB0aGlzLm1vdXNlRG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKE1PVVNFTU9WRV9FVkVOVF9UWVBFLCB0aGlzLm1vdXNlTW92ZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCB0aGlzLnNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmQmx1cihibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZGb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGNoYW5nZUhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcclxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTtcclxuXHJcbiAgICBldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudDogaGFuZGxlckVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXIsXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIGlmICgoaGFuZGxlciAhPT0gdGhpcy5ibHVySGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuZm9jdXNIYW5kbGVyKSAmJiAoaGFuZGxlciAhPT0gdGhpcy5zY3JvbGxIYW5kbGVyKSkge1xyXG4gICAgICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1JlYWRPbmx5KCkge1xyXG4gICAgY29uc3QgeyByZWFkT25seSB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xyXG5cclxuICAgIHJldHVybiByZWFkT25seTtcclxuICB9XHJcblxyXG4gIGlzTW91c2VEb3duKCkge1xyXG4gICAgY29uc3QgeyBtb3VzZURvd24gfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gbW91c2VEb3duO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c0NvbnRlbnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICByZWFkT25seVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZURvd24obW91c2VEb3duKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgbW91c2VEb3duXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCByZWFkT25seSA9IGZhbHNlLFxyXG4gICAgICAgICAgbW91c2VEb3duID0gZmFsc2UsXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBudWxsLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICByZWFkT25seSxcclxuICAgICAgbW91c2VEb3duLFxyXG4gICAgICBwcmV2aW91c0NvbnRlbnQsXHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9uRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgd2lsbFVubW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uQ2hhbmdlLCBvblNjcm9sbCwgb25Gb2N1cywgb25CbHVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG5cclxuICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXNlKCkge1xyXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICBcIm9uU2Nyb2xsXCIsXHJcbiAgICBcIm9uRm9jdXNcIixcclxuICAgIFwib25CbHVyXCJcclxuICBdO1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFwicmljaFwiXHJcbiAgfTtcclxufVxyXG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsIkJMVVJfRVZFTlRfVFlQRSIsImV2ZW50VHlwZXMiLCJJTlBVVF9FVkVOVF9UWVBFIiwiRk9DVVNfRVZFTlRfVFlQRSIsIkNIQU5HRV9FVkVOVF9UWVBFIiwiU0NST0xMX0VWRU5UX1RZUEUiLCJLRVlET1dOX0VWRU5UX1RZUEUiLCJNT1VTRVVQX0VWRU5UX1RZUEUiLCJNT1VTRURPV05fRVZFTlRfVFlQRSIsIk1PVVNFTU9WRV9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsImRlZmVyIiwiZnVuYyIsInNldFRpbWVvdXQiLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwiZXZlbnRUeXBlIiwiZm9yY2VkIiwicmVhZE9ubHkiLCJpc1JlYWRPbmx5IiwicHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNDb250ZW50IiwiY29udGVudCIsInNldENvbnRlbnQiLCJjaGFuZ2VkIiwiaGFzQ2hhbmdlZCIsImNhbGxIYW5kbGVycyIsImdldENvbnRlbnQiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJwcmV2aW91c1NlbGVjdGlvbiIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwibW91c2VEb3duSGFuZGxlciIsIm1vdXNlRG93biIsInNldE1vdXNlRG93biIsIm1vdXNlTW92ZUhhbmRsZXIiLCJpc01vdXNlRG93biIsImV2ZW50VFlwZSIsIm1vdXNlVXBIYW5kbGVyIiwia2V5RG93bkhhbmRsZXIiLCJpbnB1dEhhbmRsZXIiLCJzY3JvbGxIYW5kbGVyIiwiZm9jdXNIYW5kbGVyIiwiYmx1ckhhbmRsZXIiLCJpc0FjdGl2ZSIsImFjdGl2ZSIsImhhc0NsYXNzIiwiZG9tRWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJ2YWx1ZSIsIlNlbGVjdGlvbiIsImZyb21ET01FbGVtZW50IiwiT2JqZWN0IiwiYXNzaWduIiwic2V0U2VsZWN0aW9uIiwic2VsZWN0aW9uU3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwic2VsZWN0aW9uQ2hhbmdlZCIsImhhc1NlbGVjdGlvbkNoYW5nZWQiLCJjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQiLCJnZXRQcmV2aW91c1NlbGVjdGlvbiIsInNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb24iLCJpc0RpZmZlcmVudFRvIiwiYWN0aXZhdGUiLCJ3aW5kb3ciLCJvbiIsImFkZENsYXNzIiwiZGVhY3RpdmF0ZSIsIm9mZiIsInJlbW92ZUNsYXNzIiwib25CbHVyIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvZmZCbHVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uRm9jdXMiLCJvZmZGb2N1cyIsIm9uU2Nyb2xsIiwib2ZmU2Nyb2xsIiwib25DaGFuZ2UiLCJjaGFuZ2VIYW5kbGVyIiwib2ZmQ2hhbmdlIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImdldFN0YXRlIiwic2V0UmVhZE9ubHkiLCJ1cGRhdGVTdGF0ZSIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiZGlkTW91bnQiLCJwcm9wZXJ0aWVzIiwid2lsbFVubW91bnQiLCJpbml0aWFsaXNlIiwiRWxlbWVudCIsInRhZ05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsImRlZmF1bHRQcm9wZXJ0aWVzIiwiY2xhc3NOYW1lIl0sIm1hcHBp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
|
|
663
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCwgZXZlbnRUeXBlcyB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgVEVYVCwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5jb25zdCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgUEFTVEVfRVZFTlRfVFlQRSxcclxuICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgIENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSA9IGV2ZW50VHlwZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJldm91c0NvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmV2aW91c1NlbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMucHJldmlvdXNDb250ZW50ID0gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMucHJldmlvdXNTZWxlY3Rpb24gPSBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGludGVybWVkaWF0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlID0gdHJ1ZSwgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZWQgPSB0aGlzLmhhc1NlbGVjdGlvbkNoYW5nZWQoKSkgPT4ge1xyXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJldmlvdXNDb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodW5kb2FibGUpIHtcclxuICAgICAgaWYgKGNvbnRlbnRDaGFuZ2VkKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGdlbmVyYXRlT3BlcmF0aW9ucyh0aGlzLnByZXZpb3VzQ29udGVudCwgY29udGVudCk7XHJcblxyXG4gICAgICAgIHRoaXMudW5kb0J1ZmZlci5hZGRPcGVyYXRpb25zKG9wZXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2hhbmdlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dG1lbnVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGtleUNvZGUgPT09IFpfS0VZX0NPREUpIHtcclxuICAgICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgIGlmIChjdHJsS2V5IHx8IG1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCB7IHNoaWZ0S2V5IH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgc2hpZnRLZXkgP1xyXG4gICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgIHRoaXMudW5kbyhldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmx1ckhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwYXN0ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHsgY2xpcGJvYXJkRGF0YSB9ID0gZXZlbnQsXHJcbiAgICAgICAgICB0ZXh0RGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShURVhUKTtcclxuXHJcbiAgICBpZiAodGV4dERhdGEgPT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uLmlzRW1wdHkoKTtcclxuXHJcbiAgICBpZiAoIXNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbjtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGV4dERhdGEsIC8vL1xyXG4gICAgICAgICAgaW5zZXJ0T3BlcmF0aW9uID0gSW5zZXJ0T3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBpbnNlcnRPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICB1bmRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIudW5kbygpO1xyXG5cclxuICAgIGlmIChvcGVyYXRpb24gIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgdW5kb2FibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVkbyhldmVudCwgZWxlbWVudCkge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnJlZG8oKTtcclxuXHJcbiAgICBpZiAob3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHZhbHVlIH0gPSBkb21FbGVtZW50LFxyXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBzZWxlY3RlZENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnRQcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCA9PT0gdGhpcy5wcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSAhY29udGVudFByZXZpb3VzQ29udGVudDtcclxuXHJcbiAgICByZXR1cm4gY29udGVudENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3Rpb25DaGFuZ2VkKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRXF1YWxUbyh0aGlzLnByZXZpb3VzU2VsZWN0aW9uKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSAhc2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQgPSB0cnVlKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGRvbUVsZW1lbnQsIHtcclxuICAgICAgdmFsdWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c0NvbnRlbnQpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBkb21FbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZENvbnRlbnQgPSBvcGVyYXRpb24udHJhbnNmb3JtQ29udGVudChjb250ZW50KSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gb3BlcmF0aW9uLnRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0odHJhbnNmb3JtZWRQZW5kaW5nT3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1lZFBlbmRpbmdPcGVyYXRpb25zLCAgLy8vXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZENvbnRlbnQgPSB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQsIG9wZXJhdGlvbnMpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uLCBvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMudW5kb0J1ZmZlci50cmFuc2Zvcm0odHJhbnNmb3JtZWRQZW5kaW5nT3BlcmF0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZXZlbnQgPSBudWxsLFxyXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMsXHJcbiAgICAgICAgICB1bmRvYWJsZSA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vZmYoS0VZRE9XTl9FVkVOVF9UWVBFLCB0aGlzLmtleURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZCbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZvY3VzKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGJsdXJIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IGNoYW5nZUhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGNhbGxIYW5kbGVycyhldmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhldmVudFR5cGUpO1xyXG5cclxuICAgIGV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcclxuICAgICAgbGV0IHsgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcjtcclxuXHJcbiAgICAgIGNvbnN0IHsgaGFuZGxlciB9ID0gZXZlbnRMaXN0ZW5lcixcclxuICAgICAgICAgICAgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cclxuXHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIGlmICgoaGFuZGxlciAhPT0gdGhpcy5ibHVySGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuZm9jdXNIYW5kbGVyKSAmJiAoaGFuZGxlciAhPT0gdGhpcy5zY3JvbGxIYW5kbGVyKSkge1xyXG4gICAgICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uU2Nyb2xsLCBvbkZvY3VzLCBvbkJsdXIgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgZm9jdXNIYW5kbGVyID0gb25Gb2N1cywgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1cjsgLy8vXHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICB0aGlzLnByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgYmx1ckhhbmRsZXIgJiYgdGhpcy5vbkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub24oQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihDT1BZX0VWRU5UX1RZUEUsIHRoaXMuY29weUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oUEFTVEVfRVZFTlRfVFlQRSwgdGhpcy5wYXN0ZUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9uKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCB0aGlzLnNlbGVjdENoYW5nZUhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgd2lsbFVubW91bnQoKSB7XHJcbiAgICBjb25zdCB7IG9uQ2hhbmdlLCBvblNjcm9sbCwgb25Gb2N1cywgb25CbHVyIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vZmZGb2N1cyhmb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICBcIm9uU2Nyb2xsXCIsXHJcbiAgICBcIm9uRm9jdXNcIixcclxuICAgIFwib25CbHVyXCJcclxuICBdO1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFwicmljaFwiXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBmb2N1c2VkID0gZmFsc2UsXHJcbiAgICAgICAgICByZWFkT25seSA9IGZhbHNlLFxyXG4gICAgICAgICAgdW5kb0J1ZmZlciA9IFVuZG9CdWZmZXIuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IG51bGwsXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IG51bGwsXHJcbiAgICAgICAgICByaWNoVGV4dGFyZWEgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIHByZXZpb3VzQ29udGVudCwgcHJldmlvdXNTZWxlY3Rpb24sIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHJpY2hUZXh0YXJlYTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmVyKGZ1bmMpIHtcclxuICBzZXRUaW1lb3V0KGZ1bmMsIDApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSaWNoVGV4dGFyZWEiLCJDVVRfRVZFTlRfVFlQRSIsImV2ZW50VHlwZXMiLCJDT1BZX0VWRU5UX1RZUEUiLCJCTFVSX0VWRU5UX1RZUEUiLCJQQVNURV9FVkVOVF9UWVBFIiwiSU5QVVRfRVZFTlRfVFlQRSIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJDSEFOR0VfRVZFTlRfVFlQRSIsIlNDUk9MTF9FVkVOVF9UWVBFIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsIlNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIiwic2VsZWN0b3IiLCJmb2N1c2VkIiwicmVhZE9ubHkiLCJ1bmRvQnVmZmVyIiwicHJldmlvdXNDb250ZW50IiwicHJldmlvdXNTZWxlY3Rpb24iLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwidW5kb2FibGUiLCJldmVudFR5cGUiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnRlbnQiLCJzZXRDb250ZW50IiwiZ2V0Q29udGVudCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJjaGFuZ2VkIiwiY2FsbEhhbmRsZXJzIiwib3BlcmF0aW9ucyIsImdlbmVyYXRlT3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiY29udGV4dG1lbnVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJrZXlEb3duSGFuZGxlciIsImtleUNvZGUiLCJaX0tFWV9DT0RFIiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSIsInJlZG8iLCJ1bmRvIiwiZGVmZXIiLCJzY3JvbGxIYW5kbGVyIiwiZm9jdXNIYW5kbGVyIiwiYmx1ckhhbmRsZXIiLCJpbnB1dEhhbmRsZXIiLCJwYXN0ZUhhbmRsZXIiLCJjbGlwYm9hcmREYXRhIiwidGV4dERhdGEiLCJnZXREYXRhIiwiVEVYVCIsIkVNUFRZX1NUUklORyIsInNlbGVjdGlvbkVtcHR5IiwiaXNFbXB0eSIsImRlbGV0ZU9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwib3BlcmF0aW9uIiwiYXBwbHlPcGVyYXRpb24iLCJpbnNlcnRPcGVyYXRpb24iLCJJbnNlcnRPcGVyYXRpb24iLCJjb3B5SGFuZGxlciIsInNlbGVjdGVkQ29udGVudCIsImdldFNlbGVjdGVkQ29udGVudCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImN1dEhhbmRsZXIiLCJpc0ZvY3VzZWQiLCJpc1JlYWRPbmx5IiwiZ2V0VW5kb0J1ZmZlciIsImdldFByZXZpb3VzQ29udGVudCIsInByZXZvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZXRGb2N1c2VkIiwic2V0UmVhZE9ubHkiLCJzZXRQcmV2aW91c0NvbnRlbnQiLCJzZXRQcmV2aW91c1NlbGVjdGlvbiIsImlzQWN0aXZlIiwiYWN0aXZlIiwiaGFzQ2xhc3MiLCJkb21FbGVtZW50IiwiZ2V0RE9NRWxlbWVudCIsInZhbHVlIiwiU2VsZWN0aW9uIiwiZnJvbURPTUVsZW1lbnQiLCJlbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzdGFydCIsImVuZCIsInNsaWNlIiwiY29udGVudFByZXZpb3VzQ29udGVudCIsInNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uIiwiaXNFcXVhbFRvIiwiT2JqZWN0IiwiYXNzaWduIiwic2V0U2VsZWN0aW9uIiwic2VsZWN0aW9uU3RhcnRQb3NpdGlvbiIsInNlbGVjdGlvbkVuZFBvc2l0aW9uIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsInRyYW5zZm9ybWVkQ29udGVudCIsInRyYW5zZm9ybUNvbnRlbnQiLCJ0cmFuc2Zvcm1lZFNlbGVjdGlvbiIsInRyYW5zZm9ybVNlbGVjdGlvbiIsInRyYW5zZm9ybSIsInRyYW5zZm9ybWVkUGVuZGluZ09wZXJhdGlvbnMiLCJhY3RpdmF0ZSIsIm9uIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkJsdXIiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZkJsdXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25Gb2N1cyIsIm9mZkZvY3VzIiwib25TY3JvbGwiLCJvZmZTY3JvbGwiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvZmZDaGFuZ2UiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlckVsZW1lbnQiLCJjYWxsIiwiZGlkTW91bnQiLCJwcm9wZXJ0aWVzIiwiZG9jdW1lbnQiLCJ3aWxsVW5tb3VudCIsImZyb21DbGFzcyIsIkNsYXNzIiwiRWxlbWVudCIsIlVuZG9CdWZmZXIiLCJmcm9tTm90aGluZyIsInJpY2hUZXh0YXJlYSIsInRhZ05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsImRlZmF1bHRQcm9wZXJ0aWVzIiwiY2xhc3NOYW1lIiwiZnVuYyIsInNldFRpbWVvdXQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBMkJxQkE7OztvQkF6QnlCOzhEQUV4QjsrREFD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
|