UNPKG

angular-xml-editor

Version:
162 lines (161 loc) 22.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { XMLCursorPositions } from './xmlCursorPos.class'; import { DomDummyNodeManager } from '../dummyNodes/domDummyNodeManager.class'; import { XmlToolbox } from '../xmlToolbox.class'; var XmlCursorPosSetter = /** @class */ (function () { function XmlCursorPosSetter() { } /** * @param {?} pos * @param {?} selectionAnchorNode * @param {?} selectionAnchorOffset * @param {?=} debugLog * @return {?} */ XmlCursorPosSetter.setFromSelection = /** * @param {?} pos * @param {?} selectionAnchorNode * @param {?} selectionAnchorOffset * @param {?=} debugLog * @return {?} */ function (pos, selectionAnchorNode, selectionAnchorOffset, debugLog) { if (debugLog === void 0) { debugLog = null; } if (selectionAnchorNode !== undefined && selectionAnchorNode !== null) { /** @type {?} */ var node = /** @type {?} */ (selectionAnchorNode); if (DomDummyNodeManager.IsDummyNode(selectionAnchorNode.parentElement)) { // clicked inside a dummy node node = /** @type {?} */ (selectionAnchorNode.parentElement); if (DomDummyNodeManager.IsBeforeFirstTagDummyNode(node)) { switch (selectionAnchorOffset) { case 0: if (debugLog) { debugLog.setInputSelection("(1) cursor here: #<tag> pos 0"); } pos.SetCursor(node.parentElement, XMLCursorPositions.CursorOnCompleteNode, 0); return; case 1: if (debugLog) { debugLog.setInputSelection("(2) cursor here: #<tag> pos 1"); } pos.SetCursor(node.parentElement, XMLCursorPositions.CursorInFrontOfNode, 0); return; default: throw new Error("selectionAnchorOffset=" + selectionAnchorOffset + "?!?"); } } if (node.parentElement.childNodes.length === 2) { if (debugLog) { debugLog.setInputSelection("(13, 14) cursor here: <tag>#</tag>"); } pos.SetCursor(node.parentElement, XMLCursorPositions.CursorInEmptyNode, 0); return; } if (node === node.parentElement.lastChild && selectionAnchorOffset === 1) { if (debugLog) { debugLog.setInputSelection("(8, 12) cursor here: #</tag>, selecting complete node"); } pos.SetCursor(node.parentElement, XMLCursorPositions.CursorOnCompleteNode, 0); return; } /** @type {?} */ var nextSibling = node.nextSibling; if (nextSibling) { if (debugLog) { debugLog.setInputSelection("(3, 4, 9, 10) cursor here: #Text or here #<tag>"); } pos.SetCursor(nextSibling, XMLCursorPositions.CursorInFrontOfNode, 0); return; } /** @type {?} */ var previousSibling = node.previousSibling; if (previousSibling) { if (debugLog) { debugLog.setInputSelection("(7, 11) cursor here: Text# or here <tag>#"); } pos.SetCursor(previousSibling, XMLCursorPositions.CursorBehindNode, 0); return; } } else { // is no dummy node if (selectionAnchorNode.nodeType === Node.TEXT_NODE) { if (selectionAnchorOffset === 0) { if (debugLog) { debugLog.setInputSelection("(6) cursor here: #Text"); } pos.SetCursor(selectionAnchorNode, XMLCursorPositions.CursorInsideTextNode, 0); return; } if (selectionAnchorOffset === selectionAnchorNode.textContent.length) { if (debugLog) { debugLog.setInputSelection("(7 Alternative) cursor here: Text#"); } pos.SetCursor(selectionAnchorNode, XMLCursorPositions.CursorInsideTextNode, selectionAnchorNode.textContent.length); return; } if (debugLog) { debugLog.setInputSelection("(5) cursor here: Text#Text"); } if (selectionAnchorOffset > selectionAnchorNode.textContent.length) { throw new Error("selectionAnchorOffset " + selectionAnchorOffset + " is > than text-lenght " + selectionAnchorNode.textContent.length + " of text '" + selectionAnchorNode.textContent + "' "); } pos.SetCursor(selectionAnchorNode, XMLCursorPositions.CursorInsideTextNode, selectionAnchorOffset); return; } } // if (DomDummyNodeManager.IsDummyNode(parentElem)) { // const dummyElement = parentElem; // const nextSibling = parentElem.nextSibling; // if (XmlToolbox.IstTextOderKommentarNode(nextSibling)) { // // cursor here: #text (# = red dummyNode) // pos.CursorSetzen(nextSibling, XMLCursorPositionen.CursorInnerhalbDesTextNodes, 0); // return; // } // const previousSibling = dummyElement.previousSibling; // if (!previousSibling) { // // pos.CursorSetzen(dummyElement.parentElement, XMLCursorPositionen.c, 0); // } // } // switch (node.nodeType) { // case Node.TEXT_NODE: // if (loopCount === 0) { // const nextSibling = parentElem.nextSibling; // if (nextSibling && nextSibling.nodeType === Node.TEXT_NODE && selectionAnchorOffset === 1) { // // set cursor at start of following textnode // pos.CursorSetzen(nextSibling, XMLCursorPositionen.CursorInnerhalbDesTextNodes, 0); // } else { // const previousSibling = parentElem.previousSibling; // if (previousSibling && previousSibling.nodeType === Node.TEXT_NODE && selectionAnchorOffset === 0) { // // set cursor at end of previous textnode // pos.CursorSetzen(previousSibling, XMLCursorPositionen.CursorInnerhalbDesTextNodes, previousSibling.nodeValue.length); // } // } // } else { // node = parentElem; // up to dummy node // } // } else { // pos.CursorSetzen(node, XMLCursorPositionen.CursorInnerhalbDesTextNodes, selectionAnchorOffset); // } // break; // case Node.ELEMENT_NODE: // if (DomDummyNodeManager.IsDummyNode(node)) { // // node = parentElem; // up to parent node // } else { // pos.CursorSetzen(node, XMLCursorPositionen.CursorAufNodeSelbstVorderesTag); // } // break; // default: // throw new Error(`unhandled nodeType '${node.nodeType}' of node ${XmlToolbox.GetNodeDebugContext(node)}`); // } } console.error("found no suiting cursor interpretation! For selectionAnchorNode=" + XmlToolbox.GetNodeDebugContext(selectionAnchorNode) + ", selectionAnchorOffset=" + selectionAnchorOffset); }; return XmlCursorPosSetter; }()); export { XmlCursorPosSetter }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sQ3Vyc29yUG9zU2V0dGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci14bWwtZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL2NvZGUvY3Vyc29yL3htbEN1cnNvclBvc1NldHRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRCxJQUFBOzs7Ozs7Ozs7O0lBQ2dCLG1DQUFnQjs7Ozs7OztjQUFDLEdBQWlCLEVBQUUsbUJBQXlCLEVBQUUscUJBQTZCLEVBQUUsUUFBa0M7UUFBbEMseUJBQUEsRUFBQSxlQUFrQztRQUM1SSxJQUFJLG1CQUFtQixLQUFLLFNBQVMsSUFBSSxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7O1lBQ3JFLElBQUksSUFBSSxxQkFBRyxtQkFBOEIsRUFBQztZQUMxQyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRTs7Z0JBRXRFLElBQUkscUJBQUcsbUJBQW1CLENBQUMsYUFBd0IsQ0FBQSxDQUFDO2dCQUVwRCxJQUFJLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN2RCxRQUFRLHFCQUFxQixFQUFFO3dCQUM3QixLQUFLLENBQUM7NEJBQ0osSUFBSSxRQUFRLEVBQUU7Z0NBQ1osUUFBUSxDQUFDLGlCQUFpQixDQUFDLCtCQUErQixDQUFDLENBQUM7NkJBQzdEOzRCQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsT0FBTzt3QkFFVCxLQUFLLENBQUM7NEJBQ0osSUFB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LENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTt3QkFDbEUsTUFBTSxJQUFJLEtBQUssQ0FDYiwyQkFBeUIscUJBQXFCLCtCQUEwQixtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxrQkFBYSxtQkFBbUIsQ0FBQyxXQUFXLE9BQUksQ0FDL0osQ0FBQztxQkFDSDtvQkFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLENBQUM7b0JBQ25HLE9BQU87aUJBQ1I7YUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBc0RGO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FDWCxxRUFBbUUsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLGdDQUEyQixxQkFBdUIsQ0FDekssQ0FBQzs7NkJBMUpOO0lBNEpDLENBQUE7QUF2SkQsOEJBdUpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWG1sQ3Vyc29yUG9zLCBYTUxDdXJzb3JQb3NpdGlvbnMgfSBmcm9tICcuL3htbEN1cnNvclBvcy5jbGFzcyc7XHJcbmltcG9ydCB7IERvbUR1bW15Tm9kZU1hbmFnZXIgfSBmcm9tICcuLi9kdW1teU5vZGVzL2RvbUR1bW15Tm9kZU1hbmFnZXIuY2xhc3MnO1xyXG5pbXBvcnQgeyBYbWxUb29sYm94IH0gZnJvbSAnLi4veG1sVG9vbGJveC5jbGFzcyc7XHJcbmltcG9ydCB7IFhtbEVkaXRvckRlYnVnZ2VyIH0gZnJvbSAnLi4veG1sRWRpdG9yRGVidWdnZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFhtbEN1cnNvclBvc1NldHRlciB7XHJcbiAgcHVibGljIHN0YXRpYyBzZXRGcm9tU2VsZWN0aW9uKHBvczogWG1sQ3Vyc29yUG9zLCBzZWxlY3Rpb25BbmNob3JOb2RlOiBOb2RlLCBzZWxlY3Rpb25BbmNob3JPZmZzZXQ6IG51bWJlciwgZGVidWdMb2c6IFhtbEVkaXRvckRlYnVnZ2VyID0gbnVsbCkge1xyXG4gICAgaWYgKHNlbGVjdGlvbkFuY2hvck5vZGUgIT09IHVuZGVmaW5lZCAmJiBzZWxlY3Rpb25BbmNob3JOb2RlICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBub2RlID0gc2VsZWN0aW9uQW5jaG9yTm9kZSBhcyBFbGVtZW50O1xyXG4gICAgICBpZiAoRG9tRHVtbXlOb2RlTWFuYWdlci5Jc0R1bW15Tm9kZShzZWxlY3Rpb25BbmNob3JOb2RlLnBhcmVudEVsZW1lbnQpKSB7XHJcbiAgICAgICAgLy8gY2xpY2tlZCBpbnNpZGUgYSBkdW1teSBub2RlXHJcbiAgICAgICAgbm9kZSA9IHNlbGVjdGlvbkFuY2hvck5vZGUucGFyZW50RWxlbWVudCBhcyBFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoRG9tRHVtbXlOb2RlTWFuYWdlci5Jc0JlZm9yZUZpcnN0VGFnRHVtbXlOb2RlKG5vZGUpKSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHNlbGVjdGlvbkFuY2hvck9mZnNldCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgaWYgKGRlYnVnTG9nKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZy5zZXRJbnB1dFNlbGVjdGlvbihgKDEpIGN1cnNvciBoZXJlOiAjPHRhZz4gcG9zIDBgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcG9zLlNldEN1cnNvcihub2RlLnBhcmVudEVsZW1lbnQsIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JPbkNvbXBsZXRlTm9kZSwgMCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgIGlmIChkZWJ1Z0xvZykge1xyXG4gICAgICAgICAgICAgICAgZGVidWdMb2cuc2V0SW5wdXRTZWxlY3Rpb24oYCgyKSBjdXJzb3IgaGVyZTogIzx0YWc+IHBvcyAxYCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHBvcy5TZXRDdXJzb3Iobm9kZS5wYXJlbnRFbGVtZW50LCBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5Gcm9udE9mTm9kZSwgMCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlbGVjdGlvbkFuY2hvck9mZnNldD0ke3NlbGVjdGlvbkFuY2hvck9mZnNldH0/IT9gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChub2RlLnBhcmVudEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgIGlmIChkZWJ1Z0xvZykge1xyXG4gICAgICAgICAgICBkZWJ1Z0xvZy5zZXRJbnB1dFNlbGVjdGlvbihgKDEzLCAxNCkgY3Vyc29yIGhlcmU6IDx0YWc+IzwvdGFnPmApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcG9zLlNldEN1cnNvcihub2RlLnBhcmVudEVsZW1lbnQsIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JJbkVtcHR5Tm9kZSwgMCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobm9kZSA9PT0gbm9kZS5wYXJlbnRFbGVtZW50Lmxhc3RDaGlsZCAmJiBzZWxlY3Rpb25BbmNob3JPZmZzZXQgPT09IDEpIHtcclxuICAgICAgICAgIGlmIChkZWJ1Z0xvZykge1xyXG4gICAgICAgICAgICBkZWJ1Z0xvZy5zZXRJbnB1dFNlbGVjdGlvbihgKDgsIDEyKSBjdXJzb3IgaGVyZTogIzwvdGFnPiwgc2VsZWN0aW5nIGNvbXBsZXRlIG5vZGVgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBvcy5TZXRDdXJzb3Iobm9kZS5wYXJlbnRFbGVtZW50LCBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29yT25Db21wbGV0ZU5vZGUsIDApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChuZXh0U2libGluZykge1xyXG4gICAgICAgICAgaWYgKGRlYnVnTG9nKSB7XHJcbiAgICAgICAgICAgIGRlYnVnTG9nLnNldElucHV0U2VsZWN0aW9uKGAoMywgNCwgOSwgMTApIGN1cnNvciBoZXJlOiAjVGV4dCBvciBoZXJlICM8dGFnPmApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcG9zLlNldEN1cnNvcihuZXh0U2libGluZywgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluRnJvbnRPZk5vZGUsIDApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzU2libGluZykge1xyXG4gICAgICAgICAgaWYgKGRlYnVnTG9nKSB7XHJcbiAgICAgICAgICAgIGRlYnVnTG9nLnNldElucHV0U2VsZWN0aW9uKGAoNywgMTEpIGN1cnNvciBoZXJlOiBUZXh0IyBvciBoZXJlIDx0YWc+I2ApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcG9zLlNldEN1cnNvcihwcmV2aW91c1NpYmxpbmcsIFhNTEN1cnNvclBvc2l0aW9ucy5DdXJzb3JCZWhpbmROb2RlLCAwKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaXMgbm8gZHVtbXkgbm9kZVxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25BbmNob3JOb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkFuY2hvck9mZnNldCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoZGVidWdMb2cpIHtcclxuICAgICAgICAgICAgICBkZWJ1Z0xvZy5zZXRJbnB1dFNlbGVjdGlvbihgKDYpIGN1cnNvciBoZXJlOiAjVGV4dGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBvcy5TZXRDdXJzb3Ioc2VsZWN0aW9uQW5jaG9yTm9kZSwgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlLCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzZWxlY3Rpb25BbmNob3JPZmZzZXQgPT09IHNlbGVjdGlvbkFuY2hvck5vZGUudGV4dENvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChkZWJ1Z0xvZykge1xyXG4gICAgICAgICAgICAgIGRlYnVnTG9nLnNldElucHV0U2VsZWN0aW9uKGAoNyBBbHRlcm5hdGl2ZSkgY3Vyc29yIGhlcmU6IFRleHQjYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcG9zLlNldEN1cnNvcihzZWxlY3Rpb25BbmNob3JOb2RlLCBYTUxDdXJzb3JQb3NpdGlvbnMuQ3Vyc29ySW5zaWRlVGV4dE5vZGUsIHNlbGVjdGlvbkFuY2hvck5vZGUudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkZWJ1Z0xvZykge1xyXG4gICAgICAgICAgICBkZWJ1Z0xvZy5zZXRJbnB1dFNlbGVjdGlvbihgKDUpIGN1cnNvciBoZXJlOiBUZXh0I1RleHRgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzZWxlY3Rpb25BbmNob3JPZmZzZXQgPiBzZWxlY3Rpb25BbmNob3JOb2RlLnRleHRDb250ZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYHNlbGVjdGlvbkFuY2hvck9mZnNldCAke3NlbGVjdGlvbkFuY2hvck9mZnNldH0gaXMgPiB0aGFuIHRleHQtbGVuZ2h0ICR7c2VsZWN0aW9uQW5jaG9yTm9kZS50ZXh0Q29udGVudC5sZW5ndGh9IG9mIHRleHQgJyR7c2VsZWN0aW9uQW5jaG9yTm9kZS50ZXh0Q29udGVudH0nIGBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBvcy5TZXRDdXJzb3Ioc2VsZWN0aW9uQW5jaG9yTm9kZSwgWE1MQ3Vyc29yUG9zaXRpb25zLkN1cnNvckluc2lkZVRleHROb2RlLCBzZWxlY3Rpb25BbmNob3JPZmZzZXQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgKERvbUR1bW15Tm9kZU1hbmFnZXIuSXNEdW1teU5vZGUocGFyZW50RWxlbSkpIHtcclxuICAgICAgLy8gICAgIGNvbnN0IGR1bW15RWxlbWVudCA9IHBhcmVudEVsZW07XHJcblxyXG4gICAgICAvLyAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBwYXJlbnRFbGVtLm5leHRTaWJsaW5nO1xyXG4gICAgICAvLyAgICAgaWYgKFhtbFRvb2xib3guSXN0VGV4dE9kZXJLb21tZW50YXJOb2RlKG5leHRTaWJsaW5nKSkge1xyXG4gICAgICAvLyAgICAgICAgIC8vIGN1cnNvciBoZXJlOiAjdGV4dCAoIyA9IHJlZCBkdW1teU5vZGUpXHJcbiAgICAgIC8vICAgICAgICAgcG9zLkN1cnNvclNldHplbihuZXh0U2libGluZywgWE1MQ3Vyc29yUG9zaXRpb25lbi5DdXJzb3JJbm5lcmhhbGJEZXNUZXh0Tm9kZXMsIDApO1xyXG4gICAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgICAgLy8gICAgIH1cclxuXHJcbiAgICAgIC8vICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBkdW1teUVsZW1lbnQucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAvLyAgICAgaWYgKCFwcmV2aW91c1NpYmxpbmcpIHtcclxuICAgICAgLy8gICAgIC8vICAgIHBvcy5DdXJzb3JTZXR6ZW4oZHVtbXlFbGVtZW50LnBhcmVudEVsZW1lbnQsIFhNTEN1cnNvclBvc2l0aW9uZW4uYywgMCk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xyXG5cclxuICAgICAgLy8gICAgIGNhc2UgTm9kZS5URVhUX05PREU6XHJcblxyXG4gICAgICAvLyBpZiAobG9vcENvdW50ID09PSAwKSB7XHJcbiAgICAgIC8vICAgICBjb25zdCBuZXh0U2libGluZyA9IHBhcmVudEVsZW0ubmV4dFNpYmxpbmc7XHJcbiAgICAgIC8vICAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHNlbGVjdGlvbkFuY2hvck9mZnNldCA9PT0gMSkge1xyXG4gICAgICAvLyAgICAgICAgIC8vIHNldCBjdXJzb3IgYXQgc3RhcnQgb2YgZm9sbG93aW5nIHRleHRub2RlXHJcbiAgICAgIC8vICAgICAgICAgcG9zLkN1cnNvclNldHplbihuZXh0U2libGluZywgWE1MQ3Vyc29yUG9zaXRpb25lbi5DdXJzb3JJbm5lcmhhbGJEZXNUZXh0Tm9kZXMsIDApO1xyXG4gICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBwYXJlbnRFbGVtLnByZXZpb3VzU2libGluZztcclxuICAgICAgLy8gICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIHByZXZpb3VzU2libGluZy5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgJiYgc2VsZWN0aW9uQW5jaG9yT2Zmc2V0ID09PSAwKSB7XHJcbiAgICAgIC8vICAgICAgICAgICAgIC8vIHNldCBjdXJzb3IgYXQgZW5kIG9mIHByZXZpb3VzIHRleHRub2RlXHJcbiAgICAgIC8vICAgICAgICAgICAgIHBvcy5DdXJzb3JTZXR6ZW4ocHJldmlvdXNTaWJsaW5nLCBYTUxDdXJzb3JQb3NpdGlvbmVuLkN1cnNvcklubmVyaGFsYkRlc1RleHROb2RlcywgcHJldmlvdXNTaWJsaW5nLm5vZGVWYWx1ZS5sZW5ndGgpO1xyXG4gICAgICAvLyAgICAgICAgIH1cclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICAgIG5vZGUgPSBwYXJlbnRFbGVtOyAvLyB1cCB0byBkdW1teSBub2RlXHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgICAgICAgICAgcG9zLkN1cnNvclNldHplbihub2RlLCBYTUxDdXJzb3JQb3NpdGlvbmVuLkN1cnNvcklubmVyaGFsYkRlc1RleHROb2Rlcywgc2VsZWN0aW9uQW5jaG9yT2Zmc2V0KTtcclxuICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgIC8vICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcclxuICAgICAgLy8gICAgICAgICBpZiAoRG9tRHVtbXlOb2RlTWFuYWdlci5Jc0R1bW15Tm9kZShub2RlKSkge1xyXG4gICAgICAvLyAgICAgICAgICAgICAvLyBub2RlID0gcGFyZW50RWxlbTsgLy8gdXAgdG8gcGFyZW50IG5vZGVcclxuICAgICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgICAgICAgICBwb3MuQ3Vyc29yU2V0emVuKG5vZGUsIFhNTEN1cnNvclBvc2l0aW9uZW4uQ3Vyc29yQXVmTm9kZVNlbGJzdFZvcmRlcmVzVGFnKTtcclxuICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgIC8vICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgICAgLy8gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBub2RlVHlwZSAnJHtub2RlLm5vZGVUeXBlfScgb2Ygbm9kZSAke1htbFRvb2xib3guR2V0Tm9kZURlYnVnQ29udGV4dChub2RlKX1gKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5lcnJvcihcclxuICAgICAgYGZvdW5kIG5vIHN1aXRpbmcgY3Vyc29yIGludGVycHJldGF0aW9uISBGb3Igc2VsZWN0aW9uQW5jaG9yTm9kZT0ke1htbFRvb2xib3guR2V0Tm9kZURlYnVnQ29udGV4dChzZWxlY3Rpb25BbmNob3JOb2RlKX0sIHNlbGVjdGlvbkFuY2hvck9mZnNldD0ke3NlbGVjdGlvbkFuY2hvck9mZnNldH1gXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=