From a5f3757d883f63db415e28af6f73782907c7116c Mon Sep 17 00:00:00 2001 From: Nedya Prakasa Date: Tue, 16 Dec 2025 17:34:03 +0700 Subject: [PATCH 1/6] feat: update deps, documents and add helpers --- Dockerfile | 12 +- README.md | 42 ++-- front/dist/bundle.js | 239 +++++++++++++++++++++- front/index.html | 24 +-- front/index.js | 8 +- front/package-lock.json | 425 +++++++++++++++++++++++++++++++++++----- front/package.json | 16 +- front/webpack.config.js | 30 ++- go.mod | 10 +- go.sum | 7 + handler.go | 61 +++--- helper.go | 11 ++ log.go | 26 +++ main.go | 13 +- scripts/backend-dev.sh | 5 + scripts/build-docker.sh | 3 + scripts/build.sh | 10 + scripts/docker-dev.sh | 8 + scripts/frontend-dev.sh | 5 + 19 files changed, 817 insertions(+), 138 deletions(-) create mode 100644 helper.go create mode 100644 log.go create mode 100755 scripts/backend-dev.sh create mode 100755 scripts/build-docker.sh create mode 100755 scripts/build.sh create mode 100755 scripts/docker-dev.sh create mode 100755 scripts/frontend-dev.sh diff --git a/Dockerfile b/Dockerfile index 40dfd4a..9ed2df6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,23 @@ -FROM golang:1.17-alpine AS go-env +FROM golang:1.25.3-alpine AS go-env WORKDIR /go/src/github.com/wuchihsu/go-ssh-web-client/ COPY . ./ -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app . +RUN CGO_ENABLED=0 GOOS=linux go build -o app . -FROM node:14.17-alpine AS node-env +FROM node:18.20-alpine AS node-env WORKDIR /usr/src/ COPY front ./front RUN cd front && npm install --production # FROM alpine:latest FROM scratch + +# set workdir to non-root user home WORKDIR /root/ + +# copy app and front to non-root user home COPY --from=go-env /go/src/github.com/wuchihsu/go-ssh-web-client/app ./ COPY --from=node-env /usr/src/front ./front + +# expose and run app as non-root user EXPOSE 8080/tcp ENTRYPOINT ["./app"] diff --git a/README.md b/README.md index 1596631..fa90e1d 100644 --- a/README.md +++ b/README.md @@ -4,42 +4,46 @@ A simple SSH web client using Go, WebSocket and Xterm.js. ## Getting Started -There are two ways to install and run the project, using Go and using Docker. +After cloning the project, copy [config.toml.sample](config.toml.sample) to config.toml. Modify the host, port, user and password attributes to match the target SSH server in [config.toml.sample](config.toml.sample), then save the file config.toml. -### Go +There are two ways to install and run the project, using build script and using Docker. -After cloning the project, go into its `front` folder and install npm packages: +### 1. Script -```bash -cd go-ssh-web-client/front -npm install --production -``` +Prerequisites: +- [Go](https://golang.org/doc/install) +- [Node.js](https://nodejs.org/en/download/) +- [npm](https://www.npmjs.com/get-npm) -Then go back to main folder, add configuration file and modify it: +First, execute script to run frontend dev server: ```bash -cd .. -cp config.toml.sample config.toml -vim config.toml +./scripts/front-dev.sh ``` -Modify the host, port, user and password attributes to match the target SSH server, then save the file. Finally, run the program: +Then run the backend program: ```bash -go run . +./scripts/backend-dev.sh ``` Now, the HTTP server is running on port 8080, open http://localhost:8080 to use it (use http at your own risk). -### Docker +### 2. Docker + +Prerequisites: +- [Docker](https://docs.docker.com/get-docker/) + +In current directory, run the prebuilt image: + +```bash +./scripts/build-docker.sh +``` -First, prepare a configuration file, like [config.toml.sample](config.toml.sample). After preparing `config.toml` in current directory, run the prebuilt image: +Then, run the container: ```bash -docker run --name go-ssh -d \ - -v `pwd`/config.toml:/root/config.toml \ - -p 8080:8080 \ - wuchihsu/go-ssh-web-client +./scripts/docker-dev.sh ``` Now, the HTTP server is running on port 8080, open http://localhost:8080 to use it (use http at your own risk). diff --git a/front/dist/bundle.js b/front/dist/bundle.js index 2b49a2f..0cf50e6 100644 --- a/front/dist/bundle.js +++ b/front/dist/bundle.js @@ -1 +1,238 @@ -(()=>{var e={334:e=>{window,e.exports=function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AttachAddon=void 0;var i=function(){function e(e,t){this._disposables=[],this._socket=e,this._socket.binaryType="arraybuffer",this._bidirectional=!t||!1!==t.bidirectional}return e.prototype.activate=function(e){var t=this;this._disposables.push(n(this._socket,"message",(function(t){var r=t.data;e.write("string"==typeof r?r:new Uint8Array(r))}))),this._bidirectional&&(this._disposables.push(e.onData((function(e){return t._sendData(e)}))),this._disposables.push(e.onBinary((function(e){return t._sendBinary(e)})))),this._disposables.push(n(this._socket,"close",(function(){return t.dispose()}))),this._disposables.push(n(this._socket,"error",(function(){return t.dispose()})))},e.prototype.dispose=function(){this._disposables.forEach((function(e){return e.dispose()}))},e.prototype._sendData=function(e){1===this._socket.readyState&&this._socket.send(e)},e.prototype._sendBinary=function(e){if(1===this._socket.readyState){for(var t=new Uint8Array(e.length),r=0;r{self,e.exports=(()=>{"use strict";var e={775:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FitAddon=void 0;var r=function(){function e(){}return e.prototype.activate=function(e){this._terminal=e},e.prototype.dispose=function(){},e.prototype.fit=function(){var e=this.proposeDimensions();if(e&&this._terminal){var t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}},e.prototype.proposeDimensions=function(){if(this._terminal&&this._terminal.element&&this._terminal.element.parentElement){var e=this._terminal._core;if(0!==e._renderService.dimensions.actualCellWidth&&0!==e._renderService.dimensions.actualCellHeight){var t=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(t.getPropertyValue("height")),i=Math.max(0,parseInt(t.getPropertyValue("width"))),n=window.getComputedStyle(this._terminal.element),o=r-(parseInt(n.getPropertyValue("padding-top"))+parseInt(n.getPropertyValue("padding-bottom"))),s=i-(parseInt(n.getPropertyValue("padding-right"))+parseInt(n.getPropertyValue("padding-left")))-e.viewport.scrollBarWidth;return{cols:Math.max(2,Math.floor(s/e._renderService.dimensions.actualCellWidth)),rows:Math.max(1,Math.floor(o/e._renderService.dimensions.actualCellHeight))}}}},e}();t.FitAddon=r}},t={};return function r(i){if(t[i])return t[i].exports;var n=t[i]={exports:{}};return e[i](n,n.exports,r),n.exports}(775)})()},320:e=>{self,e.exports=(()=>{"use strict";var e={4567:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.AccessibilityManager=void 0;var o=r(9042),s=r(6114),a=r(9924),c=r(3656),l=r(844),h=r(5596),u=r(9631),f=function(e){function t(t,r){var i=e.call(this)||this;i._terminal=t,i._renderService=r,i._liveRegionLineCount=0,i._charsToConsume=[],i._charsToAnnounce="",i._accessibilityTreeRoot=document.createElement("div"),i._accessibilityTreeRoot.setAttribute("role","document"),i._accessibilityTreeRoot.classList.add("xterm-accessibility"),i._accessibilityTreeRoot.tabIndex=0,i._rowContainer=document.createElement("div"),i._rowContainer.setAttribute("role","list"),i._rowContainer.classList.add("xterm-accessibility-tree"),i._rowElements=[];for(var n=0;ne;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()},t.prototype._createAccessibilityTreeNode=function(){var e=document.createElement("div");return e.setAttribute("role","listitem"),e.tabIndex=-1,this._refreshRowDimensions(e),e},t.prototype._onTab=function(e){for(var t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,"\n"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent+=o.tooMuchOutput)),s.isMac&&this._liveRegion.textContent&&this._liveRegion.textContent.length>0&&!this._liveRegion.parentNode&&setTimeout((function(){t._accessibilityTreeRoot.appendChild(t._liveRegion)}),0))},t.prototype._clearLiveRegion=function(){this._liveRegion.textContent="",this._liveRegionLineCount=0,s.isMac&&(0,u.removeElementFromParent)(this._liveRegion)},t.prototype._onKey=function(e){this._clearLiveRegion(),this._charsToConsume.push(e)},t.prototype._refreshRows=function(e,t){this._renderRowsDebouncer.refresh(e,t,this._terminal.rows)},t.prototype._renderRows=function(e,t){for(var r=this._terminal.buffer,i=r.lines.length.toString(),n=e;n<=t;n++){var o=r.translateBufferLineToString(r.ydisp+n,!0),s=(r.ydisp+n+1).toString(),a=this._rowElements[n];a&&(0===o.length?a.innerText=" ":a.textContent=o,a.setAttribute("aria-posinset",s),a.setAttribute("aria-setsize",i))}this._announceCharacters()},t.prototype._refreshRowsDimensions=function(){if(this._renderService.dimensions.actualCellHeight){this._rowElements.length!==this._terminal.rows&&this._onResize(this._terminal.rows);for(var e=0;e{function r(e){return e.replace(/\r?\n/g,"\r")}function i(e,t){return t?"[200~"+e+"[201~":e}function n(e,t,n){e=i(e=r(e),n.decPrivateModes.bracketedPasteMode),n.triggerDataEvent(e,!0),t.value=""}function o(e,t,r){var i=r.getBoundingClientRect(),n=e.clientX-i.left-10,o=e.clientY-i.top-10;t.style.width="20px",t.style.height="20px",t.style.left=n+"px",t.style.top=o+"px",t.style.zIndex="1000",t.focus()}Object.defineProperty(t,"__esModule",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=r,t.bracketTextForPaste=i,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData("text/plain",t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,r){e.stopPropagation(),e.clipboardData&&n(e.clipboardData.getData("text/plain"),t,r)},t.paste=n,t.moveTextAreaUnderMouseCursor=o,t.rightClickHandler=function(e,t,r,i,n){o(e,t,r),n&&i.rightClickSelect(e),t.value=i.selectionText,t.select()}},4774:(e,t)=>{var r,i,n,o;function s(e){var t=e.toString(16);return t.length<2?"0"+t:t}function a(e,t){return e>>0}}(r=t.channels||(t.channels={})),(i=t.color||(t.color={})).blend=function(e,t){var i=(255&t.rgba)/255;if(1===i)return{css:t.css,rgba:t.rgba};var n=t.rgba>>24&255,o=t.rgba>>16&255,s=t.rgba>>8&255,a=e.rgba>>24&255,c=e.rgba>>16&255,l=e.rgba>>8&255,h=a+Math.round((n-a)*i),u=c+Math.round((o-c)*i),f=l+Math.round((s-l)*i);return{css:r.toCss(h,u,f),rgba:r.toRgba(h,u,f)}},i.isOpaque=function(e){return 255==(255&e.rgba)},i.ensureContrastRatio=function(e,t,r){var i=o.ensureContrastRatio(e.rgba,t.rgba,r);if(i)return o.toColor(i>>24&255,i>>16&255,i>>8&255)},i.opaque=function(e){var t=(255|e.rgba)>>>0,i=o.toChannels(t),n=i[0],s=i[1],a=i[2];return{css:r.toCss(n,s,a),rgba:t}},i.opacity=function(e,t){var i=Math.round(255*t),n=o.toChannels(e.rgba),s=n[0],a=n[1],c=n[2];return{css:r.toCss(s,a,c,i),rgba:r.toRgba(s,a,c,i)}},i.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]},(t.css||(t.css={})).toColor=function(e){switch(e.length){case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}throw new Error("css.toColor: Unsupported css format")},function(e){function t(e,t,r){var i=e/255,n=t/255,o=r/255;return.2126*(i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(n=t.rgb||(t.rgb={})),function(e){function t(e,t,r){for(var i=e>>24&255,o=e>>16&255,s=e>>8&255,c=t>>24&255,l=t>>16&255,h=t>>8&255,u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));u0||l>0||h>0);)c-=Math.max(0,Math.ceil(.1*c)),l-=Math.max(0,Math.ceil(.1*l)),h-=Math.max(0,Math.ceil(.1*h)),u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));return(c<<24|l<<16|h<<8|255)>>>0}function i(e,t,r){for(var i=e>>24&255,o=e>>16&255,s=e>>8&255,c=t>>24&255,l=t>>16&255,h=t>>8&255,u=a(n.relativeLuminance2(c,h,l),n.relativeLuminance2(i,o,s));u>>0}e.ensureContrastRatio=function(e,r,o){var s=n.relativeLuminance(e>>8),c=n.relativeLuminance(r>>8);if(a(s,c)>24&255,e>>16&255,e>>8&255,255&e]},e.toColor=function(e,t,i){return{css:r.toCss(e,t,i),rgba:r.toRgba(e,t,i)}}}(o=t.rgba||(t.rgba={})),t.toPaddedHex=s,t.contrastRatio=a},7239:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorContrastCache=void 0;var r=function(){function e(){this._color={},this._rgba={}}return e.prototype.clear=function(){this._color={},this._rgba={}},e.prototype.setCss=function(e,t,r){this._rgba[e]||(this._rgba[e]={}),this._rgba[e][t]=r},e.prototype.getCss=function(e,t){return this._rgba[e]?this._rgba[e][t]:void 0},e.prototype.setColor=function(e,t,r){this._color[e]||(this._color[e]={}),this._color[e][t]=r},e.prototype.getColor=function(e,t){return this._color[e]?this._color[e][t]:void 0},e}();t.ColorContrastCache=r},5680:function(e,t,r){var i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.removeElementFromParent=void 0,t.removeElementFromParent=function(){for(var e,t=[],r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,r,i){e.addEventListener(t,r,i);var n=!1;return{dispose:function(){n||(n=!0,e.removeEventListener(t,r,i))}}}},3551:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseZone=t.Linkifier=void 0;var o=r(8460),s=r(2585),a=function(){function e(e,t,r){this._bufferService=e,this._logService=t,this._unicodeService=r,this._linkMatchers=[],this._nextLinkMatcherId=0,this._onShowLinkUnderline=new o.EventEmitter,this._onHideLinkUnderline=new o.EventEmitter,this._onLinkTooltip=new o.EventEmitter,this._rowsToLinkify={start:void 0,end:void 0}}return Object.defineProperty(e.prototype,"onShowLinkUnderline",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onHideLinkUnderline",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onLinkTooltip",{get:function(){return this._onLinkTooltip.event},enumerable:!1,configurable:!0}),e.prototype.attachToDom=function(e,t){this._element=e,this._mouseZoneManager=t},e.prototype.linkifyRows=function(t,r){var i=this;this._mouseZoneManager&&(void 0===this._rowsToLinkify.start||void 0===this._rowsToLinkify.end?(this._rowsToLinkify.start=t,this._rowsToLinkify.end=r):(this._rowsToLinkify.start=Math.min(this._rowsToLinkify.start,t),this._rowsToLinkify.end=Math.max(this._rowsToLinkify.end,r)),this._mouseZoneManager.clearAll(t,r),this._rowsTimeoutId&&clearTimeout(this._rowsTimeoutId),this._rowsTimeoutId=setTimeout((function(){return i._linkifyRows()}),e._timeBeforeLatency))},e.prototype._linkifyRows=function(){this._rowsTimeoutId=void 0;var e=this._bufferService.buffer;if(void 0!==this._rowsToLinkify.start&&void 0!==this._rowsToLinkify.end){var t=e.ydisp+this._rowsToLinkify.start;if(!(t>=e.lines.length)){for(var r=e.ydisp+Math.min(this._rowsToLinkify.end,this._bufferService.rows)+1,i=Math.ceil(2e3/this._bufferService.cols),n=this._bufferService.buffer.iterator(!1,t,r,i,i);n.hasNext();)for(var o=n.next(),s=0;s=0;t--)if(e.priority<=this._linkMatchers[t].priority)return void this._linkMatchers.splice(t+1,0,e);this._linkMatchers.splice(0,0,e)}else this._linkMatchers.push(e)},e.prototype.deregisterLinkMatcher=function(e){for(var t=0;t>9&511:void 0;r.validationCallback?r.validationCallback(a,(function(e){n._rowsTimeoutId||e&&n._addLink(l[1],l[0]-n._bufferService.buffer.ydisp,a,r,f)})):c._addLink(l[1],l[0]-c._bufferService.buffer.ydisp,a,r,f)},c=this;null!==(i=o.exec(t))&&"break"!==a(););},e.prototype._addLink=function(e,t,r,i,n){var o=this;if(this._mouseZoneManager&&this._element){var s=this._unicodeService.getStringCellWidth(r),a=e%this._bufferService.cols,l=t+Math.floor(e/this._bufferService.cols),h=(a+s)%this._bufferService.cols,u=l+Math.floor((a+s)/this._bufferService.cols);0===h&&(h=this._bufferService.cols,u--),this._mouseZoneManager.add(new c(a+1,l+1,h+1,u+1,(function(e){if(i.handler)return i.handler(e,r);var t=window.open();t?(t.opener=null,t.location.href=r):console.warn("Opening link blocked as opener could not be cleared")}),(function(){o._onShowLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.add("xterm-cursor-pointer")}),(function(e){o._onLinkTooltip.fire(o._createLinkHoverEvent(a,l,h,u,n)),i.hoverTooltipCallback&&i.hoverTooltipCallback(e,r,{start:{x:a,y:l},end:{x:h,y:u}})}),(function(){o._onHideLinkUnderline.fire(o._createLinkHoverEvent(a,l,h,u,n)),o._element.classList.remove("xterm-cursor-pointer"),i.hoverLeaveCallback&&i.hoverLeaveCallback()}),(function(e){return!i.willLinkActivate||i.willLinkActivate(e,r)})))}},e.prototype._createLinkHoverEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},e._timeBeforeLatency=200,e=i([n(0,s.IBufferService),n(1,s.ILogService),n(2,s.IUnicodeService)],e)}();t.Linkifier=a;var c=function(e,t,r,i,n,o,s,a,c){this.x1=e,this.y1=t,this.x2=r,this.y2=i,this.clickCallback=n,this.hoverCallback=o,this.tooltipCallback=s,this.leaveCallback=a,this.willLinkActivate=c};t.MouseZone=c},6465:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Linkifier2=void 0;var a=r(2585),c=r(8460),l=r(844),h=r(3656),u=function(e){function t(t){var r=e.call(this)||this;return r._bufferService=t,r._linkProviders=[],r._linkCacheDisposables=[],r._isMouseOut=!0,r._activeLine=-1,r._onShowLinkUnderline=r.register(new c.EventEmitter),r._onHideLinkUnderline=r.register(new c.EventEmitter),r.register((0,l.getDisposeArrayDisposable)(r._linkCacheDisposables)),r}return n(t,e),Object.defineProperty(t.prototype,"currentLink",{get:function(){return this._currentLink},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onShowLinkUnderline",{get:function(){return this._onShowLinkUnderline.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onHideLinkUnderline",{get:function(){return this._onHideLinkUnderline.event},enumerable:!1,configurable:!0}),t.prototype.registerLinkProvider=function(e){var t=this;return this._linkProviders.push(e),{dispose:function(){var r=t._linkProviders.indexOf(e);-1!==r&&t._linkProviders.splice(r,1)}}},t.prototype.attachToDom=function(e,t,r){var i=this;this._element=e,this._mouseService=t,this._renderService=r,this.register((0,h.addDisposableDomListener)(this._element,"mouseleave",(function(){i._isMouseOut=!0,i._clearCurrentLink()}))),this.register((0,h.addDisposableDomListener)(this._element,"mousemove",this._onMouseMove.bind(this))),this.register((0,h.addDisposableDomListener)(this._element,"click",this._onClick.bind(this)))},t.prototype._onMouseMove=function(e){if(this._lastMouseEvent=e,this._element&&this._mouseService){var t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(t){this._isMouseOut=!1;for(var r=e.composedPath(),i=0;ie?this._bufferService.cols:s.link.range.end.x,l=a;l<=c;l++){if(r.has(l)){n.splice(o--,1);break}r.add(l)}}},t.prototype._checkLinkProviderResult=function(e,t,r){var i,n=this;if(!this._activeProviderReplies)return r;for(var o=this._activeProviderReplies.get(e),s=!1,a=0;a=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,l.disposeArray)(this._linkCacheDisposables))},t.prototype._handleNewLink=function(e){var t=this;if(this._element&&this._lastMouseEvent&&this._mouseService){var r=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);r&&this._linkAtPosition(e.link,r)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.pointerCursor},set:function(e){var r,i;(null===(r=t._currentLink)||void 0===r?void 0:r.state)&&t._currentLink.state.decorations.pointerCursor!==e&&(t._currentLink.state.decorations.pointerCursor=e,t._currentLink.state.isHovered&&(null===(i=t._element)||void 0===i||i.classList.toggle("xterm-cursor-pointer",e)))}},underline:{get:function(){var e,r;return null===(r=null===(e=t._currentLink)||void 0===e?void 0:e.state)||void 0===r?void 0:r.decorations.underline},set:function(r){var i,n,o;(null===(i=t._currentLink)||void 0===i?void 0:i.state)&&(null===(o=null===(n=t._currentLink)||void 0===n?void 0:n.state)||void 0===o?void 0:o.decorations.underline)!==r&&(t._currentLink.state.decorations.underline=r,t._currentLink.state.isHovered&&t._fireUnderlineEvent(e.link,r))}}}),this._renderService&&this._linkCacheDisposables.push(this._renderService.onRenderedBufferChange((function(e){var r=0===e.start?0:e.start+1+t._bufferService.buffer.ydisp;t._clearCurrentLink(r,e.end+1+t._bufferService.buffer.ydisp)}))))}},t.prototype._linkHover=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),t.hover&&t.hover(r,t.text)},t.prototype._fireUnderlineEvent=function(e,t){var r=e.range,i=this._bufferService.buffer.ydisp,n=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-i-1,r.end.x,r.end.y-i-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(n)},t.prototype._linkLeave=function(e,t,r){var i;(null===(i=this._currentLink)||void 0===i?void 0:i.state)&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),t.leave&&t.leave(r,t.text)},t.prototype._linkAtPosition=function(e,t){var r=e.range.start.y===e.range.end.y,i=e.range.start.yt.y;return(r&&e.range.start.x<=t.x&&e.range.end.x>=t.x||i&&e.range.end.x>=t.x||n&&e.range.start.x<=t.x||i&&n)&&e.range.start.y<=t.y&&e.range.end.y>=t.y},t.prototype._positionFromMouseEvent=function(e,t,r){var i=r.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}},t.prototype._createLinkUnderlineEvent=function(e,t,r,i,n){return{x1:e,y1:t,x2:r,y2:i,cols:this._bufferService.cols,fg:n}},o([s(0,a.IBufferService)],t)}(l.Disposable);t.Linkifier2=u},9042:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel="Terminal input",t.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},6954:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseZoneManager=void 0;var a=r(844),c=r(3656),l=r(4725),h=r(2585),u=function(e){function t(t,r,i,n,o,s){var a=e.call(this)||this;return a._element=t,a._screenElement=r,a._bufferService=i,a._mouseService=n,a._selectionService=o,a._optionsService=s,a._zones=[],a._areZonesActive=!1,a._lastHoverCoords=[void 0,void 0],a._initialSelectionLength=0,a.register((0,c.addDisposableDomListener)(a._element,"mousedown",(function(e){return a._onMouseDown(e)}))),a._mouseMoveListener=function(e){return a._onMouseMove(e)},a._mouseLeaveListener=function(e){return a._onMouseLeave(e)},a._clickListener=function(e){return a._onClick(e)},a}return n(t,e),t.prototype.dispose=function(){e.prototype.dispose.call(this),this._deactivate()},t.prototype.add=function(e){this._zones.push(e),1===this._zones.length&&this._activate()},t.prototype.clearAll=function(e,t){if(0!==this._zones.length){e&&t||(e=0,t=this._bufferService.rows-1);for(var r=0;re&&i.y1<=t+1||i.y2>e&&i.y2<=t+1||i.y1t+1)&&(this._currentZone&&this._currentZone===i&&(this._currentZone.leaveCallback(),this._currentZone=void 0),this._zones.splice(r--,1))}0===this._zones.length&&this._deactivate()}},t.prototype._activate=function(){this._areZonesActive||(this._areZonesActive=!0,this._element.addEventListener("mousemove",this._mouseMoveListener),this._element.addEventListener("mouseleave",this._mouseLeaveListener),this._element.addEventListener("click",this._clickListener))},t.prototype._deactivate=function(){this._areZonesActive&&(this._areZonesActive=!1,this._element.removeEventListener("mousemove",this._mouseMoveListener),this._element.removeEventListener("mouseleave",this._mouseLeaveListener),this._element.removeEventListener("click",this._clickListener))},t.prototype._onMouseMove=function(e){this._lastHoverCoords[0]===e.pageX&&this._lastHoverCoords[1]===e.pageY||(this._onHover(e),this._lastHoverCoords=[e.pageX,e.pageY])},t.prototype._onHover=function(e){var t=this,r=this._findZoneEventAt(e);r!==this._currentZone&&(this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout)),r&&(this._currentZone=r,r.hoverCallback&&r.hoverCallback(e),this._tooltipTimeout=window.setTimeout((function(){return t._onTooltip(e)}),this._optionsService.rawOptions.linkTooltipHoverDuration)))},t.prototype._onTooltip=function(e){this._tooltipTimeout=void 0;var t=this._findZoneEventAt(e);null==t||t.tooltipCallback(e)},t.prototype._onMouseDown=function(e){if(this._initialSelectionLength=this._getSelectionLength(),this._areZonesActive){var t=this._findZoneEventAt(e);(null==t?void 0:t.willLinkActivate(e))&&(e.preventDefault(),e.stopImmediatePropagation())}},t.prototype._onMouseLeave=function(e){this._currentZone&&(this._currentZone.leaveCallback(),this._currentZone=void 0,this._tooltipTimeout&&clearTimeout(this._tooltipTimeout))},t.prototype._onClick=function(e){var t=this._findZoneEventAt(e),r=this._getSelectionLength();t&&r===this._initialSelectionLength&&(t.clickCallback(e),e.preventDefault(),e.stopImmediatePropagation())},t.prototype._getSelectionLength=function(){var e=this._selectionService.selectionText;return e?e.length:0},t.prototype._findZoneEventAt=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows);if(t)for(var r=t[0],i=t[1],n=0;n=o.x1&&r=o.x1||i===o.y2&&ro.y1&&i{Object.defineProperty(t,"__esModule",{value:!0}),t.RenderDebouncer=void 0;var r=function(){function e(e){this._renderCallback=e}return e.prototype.dispose=function(){this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){return i._innerRefresh()})))},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._animationFrame=void 0,this._renderCallback(e,t)}},e}();t.RenderDebouncer=r},5596:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.ScreenDprMonitor=void 0;var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._currentDevicePixelRatio=window.devicePixelRatio,t}return n(t,e),t.prototype.setListener=function(e){var t=this;this._listener&&this.clearListener(),this._listener=e,this._outerListener=function(){t._listener&&(t._listener(window.devicePixelRatio,t._currentDevicePixelRatio),t._updateDpr())},this._updateDpr()},t.prototype.dispose=function(){e.prototype.dispose.call(this),this.clearListener()},t.prototype._updateDpr=function(){var e;this._outerListener&&(null===(e=this._resolutionMediaMatchList)||void 0===e||e.removeListener(this._outerListener),this._currentDevicePixelRatio=window.devicePixelRatio,this._resolutionMediaMatchList=window.matchMedia("screen and (resolution: "+window.devicePixelRatio+"dppx)"),this._resolutionMediaMatchList.addListener(this._outerListener))},t.prototype.clearListener=function(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)},t}(r(844).Disposable);t.ScreenDprMonitor=o},3236:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.Terminal=void 0;var o=r(2950),s=r(1680),a=r(3614),c=r(2584),l=r(5435),h=r(3525),u=r(3551),f=r(9312),_=r(6114),d=r(3656),p=r(9042),v=r(357),g=r(6954),y=r(4567),m=r(1296),S=r(7399),C=r(8460),b=r(8437),w=r(5680),L=r(3230),E=r(4725),x=r(428),M=r(8934),k=r(6465),A=r(5114),R=r(8969),O=r(4774),T=r(4269),B=r(5941),D="undefined"!=typeof window?window.document:null,P=function(e){function t(t){void 0===t&&(t={});var r=e.call(this,t)||this;return r.browser=_,r._keyDownHandled=!1,r._keyPressHandled=!1,r._unprocessedDeadKey=!1,r._onCursorMove=new C.EventEmitter,r._onKey=new C.EventEmitter,r._onRender=new C.EventEmitter,r._onSelectionChange=new C.EventEmitter,r._onTitleChange=new C.EventEmitter,r._onBell=new C.EventEmitter,r._onFocus=new C.EventEmitter,r._onBlur=new C.EventEmitter,r._onA11yCharEmitter=new C.EventEmitter,r._onA11yTabEmitter=new C.EventEmitter,r._setup(),r.linkifier=r._instantiationService.createInstance(u.Linkifier),r.linkifier2=r.register(r._instantiationService.createInstance(k.Linkifier2)),r.register(r._inputHandler.onRequestBell((function(){return r.bell()}))),r.register(r._inputHandler.onRequestRefreshRows((function(e,t){return r.refresh(e,t)}))),r.register(r._inputHandler.onRequestSendFocus((function(){return r._reportFocus()}))),r.register(r._inputHandler.onRequestReset((function(){return r.reset()}))),r.register(r._inputHandler.onRequestWindowsOptionsReport((function(e){return r._reportWindowsOptions(e)}))),r.register(r._inputHandler.onColor((function(e){return r._handleColorEvent(e)}))),r.register((0,C.forwardEvent)(r._inputHandler.onCursorMove,r._onCursorMove)),r.register((0,C.forwardEvent)(r._inputHandler.onTitleChange,r._onTitleChange)),r.register((0,C.forwardEvent)(r._inputHandler.onA11yChar,r._onA11yCharEmitter)),r.register((0,C.forwardEvent)(r._inputHandler.onA11yTab,r._onA11yTabEmitter)),r.register(r._bufferService.onResize((function(e){return r._afterResize(e.cols,e.rows)}))),r}return n(t,e),Object.defineProperty(t.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onKey",{get:function(){return this._onKey.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRender",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBell",{get:function(){return this._onBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onFocus",{get:function(){return this._onFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBlur",{get:function(){return this._onBlur.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yChar",{get:function(){return this._onA11yCharEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yTab",{get:function(){return this._onA11yTabEmitter.event},enumerable:!1,configurable:!0}),t.prototype._handleColorEvent=function(e){var t,r;if(this._colorManager){for(var i=0,n=e;i4)&&t.coreMouseService.triggerMouseEvent({col:n.x-33,row:n.y-33,button:r,action:i,ctrl:e.ctrlKey,alt:e.altKey,shift:e.shiftKey})}var n={mouseup:null,wheel:null,mousedrag:null,mousemove:null},o=function(t){return i(t),t.buttons||(e._document.removeEventListener("mouseup",n.mouseup),n.mousedrag&&e._document.removeEventListener("mousemove",n.mousedrag)),e.cancel(t)},s=function(t){return i(t),e.cancel(t,!0)},a=function(e){e.buttons&&i(e)},l=function(e){e.buttons||i(e)};this.register(this.coreMouseService.onProtocolChange((function(t){t?("debug"===e.optionsService.rawOptions.logLevel&&e._logService.debug("Binding to mouse events:",e.coreMouseService.explainEvents(t)),e.element.classList.add("enable-mouse-events"),e._selectionService.disable()):(e._logService.debug("Unbinding from mouse events."),e.element.classList.remove("enable-mouse-events"),e._selectionService.enable()),8&t?n.mousemove||(r.addEventListener("mousemove",l),n.mousemove=l):(r.removeEventListener("mousemove",n.mousemove),n.mousemove=null),16&t?n.wheel||(r.addEventListener("wheel",s,{passive:!1}),n.wheel=s):(r.removeEventListener("wheel",n.wheel),n.wheel=null),2&t?n.mouseup||(n.mouseup=o):(e._document.removeEventListener("mouseup",n.mouseup),n.mouseup=null),4&t?n.mousedrag||(n.mousedrag=a):(e._document.removeEventListener("mousemove",n.mousedrag),n.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,d.addDisposableDomListener)(r,"mousedown",(function(t){if(t.preventDefault(),e.focus(),e.coreMouseService.areMouseEventsActive&&!e._selectionService.shouldForceSelection(t))return i(t),n.mouseup&&e._document.addEventListener("mouseup",n.mouseup),n.mousedrag&&e._document.addEventListener("mousemove",n.mousedrag),e.cancel(t)}))),this.register((0,d.addDisposableDomListener)(r,"wheel",(function(t){if(!n.wheel){if(!e.buffer.hasScrollback){var r=e.viewport.getLinesScrolled(t);if(0===r)return;for(var i=c.C0.ESC+(e.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(t.deltaY<0?"A":"B"),o="",s=0;s47)},t.prototype._keyUp=function(e){this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)},t.prototype._keyPress=function(e){var t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))},t.prototype._inputEvent=function(e){if(e.data&&"insertText"===e.inputType&&!e.composed&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;var t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1},t.prototype.bell=function(){var e;this._soundBell()&&(null===(e=this._soundService)||void 0===e||e.playBellSound()),this._onBell.fire()},t.prototype.resize=function(t,r){t!==this.cols||r!==this.rows?e.prototype.resize.call(this,t,r):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()},t.prototype._afterResize=function(e,t){var r,i;null===(r=this._charSizeService)||void 0===r||r.measure(),null===(i=this.viewport)||void 0===i||i.syncScrollArea(!0)},t.prototype.clear=function(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(var e=1;e{Object.defineProperty(t,"__esModule",{value:!0}),t.TimeBasedDebouncer=void 0;var r=function(){function e(e,t){void 0===t&&(t=1e3),this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}return e.prototype.dispose=function(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)},e.prototype.refresh=function(e,t,r){var i=this;this._rowCount=r,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;var n=Date.now();if(n-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=n,this._innerRefresh();else if(!this._additionalRefreshRequested){var o=n-this._lastRefreshMs,s=this._debounceThresholdMS-o;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((function(){i._lastRefreshMs=Date.now(),i._innerRefresh(),i._additionalRefreshRequested=!1,i._refreshTimeoutID=void 0}),s)}},e.prototype._innerRefresh=function(){if(void 0!==this._rowStart&&void 0!==this._rowEnd&&void 0!==this._rowCount){var e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}},e}();t.TimeBasedDebouncer=r},1680:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Viewport=void 0;var a=r(844),c=r(3656),l=r(4725),h=r(2585),u=function(e){function t(t,r,i,n,o,s,a,l){var h=e.call(this)||this;return h._scrollLines=t,h._viewportElement=r,h._scrollArea=i,h._element=n,h._bufferService=o,h._optionsService=s,h._charSizeService=a,h._renderService=l,h.scrollBarWidth=0,h._currentRowHeight=0,h._currentScaledCellHeight=0,h._lastRecordedBufferLength=0,h._lastRecordedViewportHeight=0,h._lastRecordedBufferHeight=0,h._lastTouchY=0,h._lastScrollTop=0,h._lastHadScrollBar=!1,h._wheelPartialScroll=0,h._refreshAnimationFrame=null,h._ignoreNextScrollEvent=!1,h.scrollBarWidth=h._viewportElement.offsetWidth-h._scrollArea.offsetWidth||15,h._lastHadScrollBar=!0,h.register((0,c.addDisposableDomListener)(h._viewportElement,"scroll",h._onScroll.bind(h))),h._activeBuffer=h._bufferService.buffer,h.register(h._bufferService.buffers.onBufferActivate((function(e){return h._activeBuffer=e.activeBuffer}))),h._renderDimensions=h._renderService.dimensions,h.register(h._renderService.onDimensionsChange((function(e){return h._renderDimensions=e}))),setTimeout((function(){return h.syncScrollArea()}),0),h}return n(t,e),t.prototype.onThemeChange=function(e){this._viewportElement.style.backgroundColor=e.background.css},t.prototype._refresh=function(e){var t=this;if(e)return this._innerRefresh(),void(null!==this._refreshAnimationFrame&&cancelAnimationFrame(this._refreshAnimationFrame));null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=requestAnimationFrame((function(){return t._innerRefresh()})))},t.prototype._innerRefresh=function(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderService.dimensions.scaledCellHeight/window.devicePixelRatio,this._currentScaledCellHeight=this._renderService.dimensions.scaledCellHeight,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;var e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderService.dimensions.canvasHeight);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+"px")}var t=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==t&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=t),0===this._optionsService.rawOptions.scrollback?this.scrollBarWidth=0:this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this._lastHadScrollBar=this.scrollBarWidth>0;var r=window.getComputedStyle(this._element),i=parseInt(r.paddingLeft)+parseInt(r.paddingRight);this._viewportElement.style.width=(this._renderService.dimensions.actualCellWidth*this._bufferService.cols+this.scrollBarWidth+(this._lastHadScrollBar?i:0)).toString()+"px",this._refreshAnimationFrame=null},t.prototype.syncScrollArea=function(e){if(void 0===e&&(e=!1),this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);this._lastRecordedViewportHeight===this._renderService.dimensions.canvasHeight&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.scaledCellHeight===this._currentScaledCellHeight?this._lastHadScrollBar!==this._optionsService.rawOptions.scrollback>0&&this._refresh(e):this._refresh(e)},t.prototype._onScroll=function(e){if(this._lastScrollTop=this._viewportElement.scrollTop,this._viewportElement.offsetParent){if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._scrollLines(0);var t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._scrollLines(t)}},t.prototype._bubbleScroll=function(e,t){var r=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&0!==this._viewportElement.scrollTop||t>0&&r0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t},t.prototype._applyScrollModifier=function(e,t){var r=this._optionsService.rawOptions.fastScrollModifier;return"alt"===r&&t.altKey||"ctrl"===r&&t.ctrlKey||"shift"===r&&t.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity},t.prototype.onTouchStart=function(e){this._lastTouchY=e.touches[0].pageY},t.prototype.onTouchMove=function(e){var t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))},o([s(4,h.IBufferService),s(5,h.IOptionsService),s(6,l.ICharSizeService),s(7,l.IRenderService)],t)}(a.Disposable);t.Viewport=u},2950:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CompositionHelper=void 0;var o=r(4725),s=r(2585),a=function(){function e(e,t,r,i,n,o){this._textarea=e,this._compositionView=t,this._bufferService=r,this._optionsService=i,this._coreService=n,this._renderService=o,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=""}return Object.defineProperty(e.prototype,"isComposing",{get:function(){return this._isComposing},enumerable:!1,configurable:!0}),e.prototype.compositionstart=function(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")},e.prototype.compositionupdate=function(e){var t=this;this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((function(){t._compositionPosition.end=t._textarea.value.length}),0)},e.prototype.compositionend=function(){this._finalizeComposition(!0)},e.prototype.keydown=function(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)},e.prototype._finalizeComposition=function(e){var t=this;if(this._compositionView.classList.remove("active"),this._isComposing=!1,e){var r={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((function(){var e;t._isSendingComposition&&(t._isSendingComposition=!1,r.start+=t._dataAlreadySent.length,(e=t._isComposing?t._textarea.value.substring(r.start,r.end):t._textarea.value.substring(r.start)).length>0&&t._coreService.triggerDataEvent(e,!0))}),0)}else{this._isSendingComposition=!1;var i=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(i,!0)}},e.prototype._handleAnyTextareaChanges=function(){var e=this,t=this._textarea.value;setTimeout((function(){if(!e._isComposing){var r=e._textarea.value.replace(t,"");r.length>0&&(e._dataAlreadySent=r,e._coreService.triggerDataEvent(r,!0))}}),0)},e.prototype.updateCompositionElements=function(e){var t=this;if(this._isComposing){if(this._bufferService.buffer.isCursorInViewport){var r=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1),i=this._renderService.dimensions.actualCellHeight,n=this._bufferService.buffer.y*this._renderService.dimensions.actualCellHeight,o=r*this._renderService.dimensions.actualCellWidth;this._compositionView.style.left=o+"px",this._compositionView.style.top=n+"px",this._compositionView.style.height=i+"px",this._compositionView.style.lineHeight=i+"px",this._compositionView.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._compositionView.style.fontSize=this._optionsService.rawOptions.fontSize+"px";var s=this._compositionView.getBoundingClientRect();this._textarea.style.left=o+"px",this._textarea.style.top=n+"px",this._textarea.style.width=Math.max(s.width,1)+"px",this._textarea.style.height=Math.max(s.height,1)+"px",this._textarea.style.lineHeight=s.height+"px"}e||setTimeout((function(){return t.updateCompositionElements(!0)}),0)}},i([n(2,s.IBufferService),n(3,s.IOptionsService),n(4,s.ICoreService),n(5,o.IRenderService)],e)}();t.CompositionHelper=a},9806:(e,t)=>{function r(e,t){var r=t.getBoundingClientRect();return[e.clientX-r.left,e.clientY-r.top]}Object.defineProperty(t,"__esModule",{value:!0}),t.getRawByteCoords=t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=r,t.getCoords=function(e,t,i,n,o,s,a,c){if(o){var l=r(e,t);if(l)return l[0]=Math.ceil((l[0]+(c?s/2:0))/s),l[1]=Math.ceil(l[1]/a),l[0]=Math.min(Math.max(l[0],1),i+(c?1:0)),l[1]=Math.min(Math.max(l[1],1),n),l}},t.getRawByteCoords=function(e){if(e)return{x:e[0]+32,y:e[1]+32}}},9504:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.moveToCellSequence=void 0;var i=r(2584);function n(e,t,r,i){var n=e-o(r,e),a=t-o(r,t),h=Math.abs(n-a)-function(e,t,r){for(var i=0,n=e-o(r,e),a=t-o(r,t),c=0;c=0&&tt?"A":"B"}function a(e,t,r,i,n,o){for(var s=e,a=t,c="";s!==r||a!==i;)s+=n?1:-1,n&&s>o.cols-1?(c+=o.buffer.translateBufferLineToString(a,!1,e,s),s=0,e=0,a++):!n&&s<0&&(c+=o.buffer.translateBufferLineToString(a,!1,0,e+1),e=s=o.cols-1,a--);return c+o.buffer.translateBufferLineToString(a,!1,e,s)}function c(e,t){var r=t?"O":"[";return i.C0.ESC+r+e}function l(e,t){e=Math.floor(e);for(var r="",i=0;i0?i-o(s,i):t;var f=i,_=function(e,t,r,i,s,a){var c;return c=n(r,i,s,a).length>0?i-o(s,i):t,e=r&&ce?"D":"C",l(Math.abs(h-e),c(s,i));s=u>t?"D":"C";var f=Math.abs(u-t);return l(function(e,t){return t.cols-e}(u>t?e:h,r)+(f-1)*r.cols+1+((u>t?h:e)-1),c(s,i))}},4389:function(e,t,r){var i=this&&this.__assign||function(){return i=Object.assign||function(e){for(var t,r=1,i=arguments.length;r{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseRenderLayer=void 0;var i=r(643),n=r(8803),o=r(1420),s=r(3734),a=r(1752),c=r(4774),l=r(9631),h=r(8978),u=function(){function e(e,t,r,i,n,o,s,a){this._container=e,this._alpha=i,this._colors=n,this._rendererId=o,this._bufferService=s,this._optionsService=a,this._scaledCharWidth=0,this._scaledCharHeight=0,this._scaledCellWidth=0,this._scaledCellHeight=0,this._scaledCharLeft=0,this._scaledCharTop=0,this._currentGlyphIdentifier={chars:"",code:0,bg:0,fg:0,bold:!1,dim:!1,italic:!1},this._canvas=document.createElement("canvas"),this._canvas.classList.add("xterm-"+t+"-layer"),this._canvas.style.zIndex=r.toString(),this._initCanvas(),this._container.appendChild(this._canvas)}return e.prototype.dispose=function(){var e;(0,l.removeElementFromParent)(this._canvas),null===(e=this._charAtlas)||void 0===e||e.dispose()},e.prototype._initCanvas=function(){this._ctx=(0,a.throwIfFalsy)(this._canvas.getContext("2d",{alpha:this._alpha})),this._alpha||this._clearAll()},e.prototype.onOptionsChanged=function(){},e.prototype.onBlur=function(){},e.prototype.onFocus=function(){},e.prototype.onCursorMove=function(){},e.prototype.onGridChanged=function(e,t){},e.prototype.onSelectionChanged=function(e,t,r){void 0===r&&(r=!1)},e.prototype.setColors=function(e){this._refreshCharAtlas(e)},e.prototype._setTransparency=function(e){if(e!==this._alpha){var t=this._canvas;this._alpha=e,this._canvas=this._canvas.cloneNode(),this._initCanvas(),this._container.replaceChild(this._canvas,t),this._refreshCharAtlas(this._colors),this.onGridChanged(0,this._bufferService.rows-1)}},e.prototype._refreshCharAtlas=function(e){this._scaledCharWidth<=0&&this._scaledCharHeight<=0||(this._charAtlas=(0,o.acquireCharAtlas)(this._optionsService.rawOptions,this._rendererId,e,this._scaledCharWidth,this._scaledCharHeight),this._charAtlas.warmUp())},e.prototype.resize=function(e){this._scaledCellWidth=e.scaledCellWidth,this._scaledCellHeight=e.scaledCellHeight,this._scaledCharWidth=e.scaledCharWidth,this._scaledCharHeight=e.scaledCharHeight,this._scaledCharLeft=e.scaledCharLeft,this._scaledCharTop=e.scaledCharTop,this._canvas.width=e.scaledCanvasWidth,this._canvas.height=e.scaledCanvasHeight,this._canvas.style.width=e.canvasWidth+"px",this._canvas.style.height=e.canvasHeight+"px",this._alpha||this._clearAll(),this._refreshCharAtlas(this._colors)},e.prototype.clearTextureAtlas=function(){var e;null===(e=this._charAtlas)||void 0===e||e.clear()},e.prototype._fillCells=function(e,t,r,i){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight)},e.prototype._fillMiddleLineAtCells=function(e,t,r){void 0===r&&(r=1);var i=Math.ceil(.5*this._scaledCellHeight);this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-i-window.devicePixelRatio,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillBottomLineAtCells=function(e,t,r){void 0===r&&(r=1),this._ctx.fillRect(e*this._scaledCellWidth,(t+1)*this._scaledCellHeight-window.devicePixelRatio-1,r*this._scaledCellWidth,window.devicePixelRatio)},e.prototype._fillLeftLineAtCell=function(e,t,r){this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,window.devicePixelRatio*r,this._scaledCellHeight)},e.prototype._strokeRectAtCell=function(e,t,r,i){this._ctx.lineWidth=window.devicePixelRatio,this._ctx.strokeRect(e*this._scaledCellWidth+window.devicePixelRatio/2,t*this._scaledCellHeight+window.devicePixelRatio/2,r*this._scaledCellWidth-window.devicePixelRatio,i*this._scaledCellHeight-window.devicePixelRatio)},e.prototype._clearAll=function(){this._alpha?this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(0,0,this._canvas.width,this._canvas.height))},e.prototype._clearCells=function(e,t,r,i){this._alpha?this._ctx.clearRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight):(this._ctx.fillStyle=this._colors.background.css,this._ctx.fillRect(e*this._scaledCellWidth,t*this._scaledCellHeight,r*this._scaledCellWidth,i*this._scaledCellHeight))},e.prototype._fillCharTrueColor=function(e,t,r){this._ctx.font=this._getFont(!1,!1),this._ctx.textBaseline=n.TEXT_BASELINE,this._clipRow(r);var i=!1;!1!==this._optionsService.rawOptions.customGlyphs&&(i=(0,h.tryDrawCustomChar)(this._ctx,e.getChars(),t*this._scaledCellWidth,r*this._scaledCellHeight,this._scaledCellWidth,this._scaledCellHeight)),i||this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight)},e.prototype._drawChars=function(e,t,r){var o,s,a,c=this._getContrastColor(e);c||e.isFgRGB()||e.isBgRGB()?this._drawUncachedChars(e,t,r,c):(e.isInverse()?(s=e.isBgDefault()?n.INVERTED_DEFAULT_COLOR:e.getBgColor(),a=e.isFgDefault()?n.INVERTED_DEFAULT_COLOR:e.getFgColor()):(a=e.isBgDefault()?i.DEFAULT_COLOR:e.getBgColor(),s=e.isFgDefault()?i.DEFAULT_COLOR:e.getFgColor()),s+=this._optionsService.rawOptions.drawBoldTextInBrightColors&&e.isBold()&&s<8?8:0,this._currentGlyphIdentifier.chars=e.getChars()||i.WHITESPACE_CELL_CHAR,this._currentGlyphIdentifier.code=e.getCode()||i.WHITESPACE_CELL_CODE,this._currentGlyphIdentifier.bg=a,this._currentGlyphIdentifier.fg=s,this._currentGlyphIdentifier.bold=!!e.isBold(),this._currentGlyphIdentifier.dim=!!e.isDim(),this._currentGlyphIdentifier.italic=!!e.isItalic(),(null===(o=this._charAtlas)||void 0===o?void 0:o.draw(this._ctx,this._currentGlyphIdentifier,t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop))||this._drawUncachedChars(e,t,r))},e.prototype._drawUncachedChars=function(e,t,r,i){if(this._ctx.save(),this._ctx.font=this._getFont(!!e.isBold(),!!e.isItalic()),this._ctx.textBaseline=n.TEXT_BASELINE,e.isInverse())if(i)this._ctx.fillStyle=i.css;else if(e.isBgDefault())this._ctx.fillStyle=c.color.opaque(this._colors.background).css;else if(e.isBgRGB())this._ctx.fillStyle="rgb("+s.AttributeData.toColorRGB(e.getBgColor()).join(",")+")";else{var o=e.getBgColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&e.isBold()&&o<8&&(o+=8),this._ctx.fillStyle=this._colors.ansi[o].css}else if(i)this._ctx.fillStyle=i.css;else if(e.isFgDefault())this._ctx.fillStyle=this._colors.foreground.css;else if(e.isFgRGB())this._ctx.fillStyle="rgb("+s.AttributeData.toColorRGB(e.getFgColor()).join(",")+")";else{var a=e.getFgColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&e.isBold()&&a<8&&(a+=8),this._ctx.fillStyle=this._colors.ansi[a].css}this._clipRow(r),e.isDim()&&(this._ctx.globalAlpha=n.DIM_OPACITY);var l=!1;!1!==this._optionsService.rawOptions.customGlyphs&&(l=(0,h.tryDrawCustomChar)(this._ctx,e.getChars(),t*this._scaledCellWidth,r*this._scaledCellHeight,this._scaledCellWidth,this._scaledCellHeight)),l||this._ctx.fillText(e.getChars(),t*this._scaledCellWidth+this._scaledCharLeft,r*this._scaledCellHeight+this._scaledCharTop+this._scaledCharHeight),this._ctx.restore()},e.prototype._clipRow=function(e){this._ctx.beginPath(),this._ctx.rect(0,e*this._scaledCellHeight,this._bufferService.cols*this._scaledCellWidth,this._scaledCellHeight),this._ctx.clip()},e.prototype._getFont=function(e,t){return(t?"italic":"")+" "+(e?this._optionsService.rawOptions.fontWeightBold:this._optionsService.rawOptions.fontWeight)+" "+this._optionsService.rawOptions.fontSize*window.devicePixelRatio+"px "+this._optionsService.rawOptions.fontFamily},e.prototype._getContrastColor=function(e){if(1!==this._optionsService.rawOptions.minimumContrastRatio){var t=this._colors.contrastCache.getColor(e.bg,e.fg);if(void 0!==t)return t||void 0;var r=e.getFgColor(),i=e.getFgColorMode(),n=e.getBgColor(),o=e.getBgColorMode(),s=!!e.isInverse(),a=!!e.isInverse();if(s){var l=r;r=n,n=l;var h=i;i=o,o=h}var u=this._resolveBackgroundRgba(o,n,s),f=this._resolveForegroundRgba(i,r,s,a),_=c.rgba.ensureContrastRatio(u,f,this._optionsService.rawOptions.minimumContrastRatio);if(_){var d={css:c.channels.toCss(_>>24&255,_>>16&255,_>>8&255),rgba:_};return this._colors.contrastCache.setColor(e.bg,e.fg,d),d}this._colors.contrastCache.setColor(e.bg,e.fg,null)}},e.prototype._resolveBackgroundRgba=function(e,t,r){switch(e){case 16777216:case 33554432:return this._colors.ansi[t].rgba;case 50331648:return t<<8;default:return r?this._colors.foreground.rgba:this._colors.background.rgba}},e.prototype._resolveForegroundRgba=function(e,t,r,i){switch(e){case 16777216:case 33554432:return this._optionsService.rawOptions.drawBoldTextInBrightColors&&i&&t<8&&(t+=8),this._colors.ansi[t].rgba;case 50331648:return t<<8;default:return r?this._colors.background.rgba:this._colors.foreground.rgba}},e}();t.BaseRenderLayer=u},2512:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CursorRenderLayer=void 0;var a=r(1546),c=r(511),l=r(2585),h=r(4725),u=600,f=function(e){function t(t,r,i,n,o,s,a,l,h){var u=e.call(this,t,"cursor",r,!0,i,n,s,a)||this;return u._onRequestRedraw=o,u._coreService=l,u._coreBrowserService=h,u._cell=new c.CellData,u._state={x:0,y:0,isFocused:!1,style:"",width:0},u._cursorRenderers={bar:u._renderBarCursor.bind(u),block:u._renderBlockCursor.bind(u),underline:u._renderUnderlineCursor.bind(u)},u}return n(t,e),t.prototype.dispose=function(){this._cursorBlinkStateManager&&(this._cursorBlinkStateManager.dispose(),this._cursorBlinkStateManager=void 0),e.prototype.dispose.call(this)},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state={x:0,y:0,isFocused:!1,style:"",width:0}},t.prototype.reset=function(){var e;this._clearCursor(),null===(e=this._cursorBlinkStateManager)||void 0===e||e.restartBlinkAnimation(),this.onOptionsChanged()},t.prototype.onBlur=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.pause(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onFocus=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.resume(),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onOptionsChanged=function(){var e,t=this;this._optionsService.rawOptions.cursorBlink?this._cursorBlinkStateManager||(this._cursorBlinkStateManager=new _(this._coreBrowserService.isFocused,(function(){t._render(!0)}))):(null===(e=this._cursorBlinkStateManager)||void 0===e||e.dispose(),this._cursorBlinkStateManager=void 0),this._onRequestRedraw.fire({start:this._bufferService.buffer.y,end:this._bufferService.buffer.y})},t.prototype.onCursorMove=function(){var e;null===(e=this._cursorBlinkStateManager)||void 0===e||e.restartBlinkAnimation()},t.prototype.onGridChanged=function(e,t){!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isPaused?this._render(!1):this._cursorBlinkStateManager.restartBlinkAnimation()},t.prototype._render=function(e){if(this._coreService.isCursorInitialized&&!this._coreService.isCursorHidden){var t=this._bufferService.buffer.ybase+this._bufferService.buffer.y,r=t-this._bufferService.buffer.ydisp;if(r<0||r>=this._bufferService.rows)this._clearCursor();else{var i=Math.min(this._bufferService.buffer.x,this._bufferService.cols-1);if(this._bufferService.buffer.lines.get(t).loadCell(i,this._cell),void 0!==this._cell.content){if(!this._coreBrowserService.isFocused){this._clearCursor(),this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css;var n=this._optionsService.rawOptions.cursorStyle;return n&&"block"!==n?this._cursorRenderers[n](i,r,this._cell):this._renderBlurCursor(i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=n,void(this._state.width=this._cell.getWidth())}if(!this._cursorBlinkStateManager||this._cursorBlinkStateManager.isCursorVisible){if(this._state){if(this._state.x===i&&this._state.y===r&&this._state.isFocused===this._coreBrowserService.isFocused&&this._state.style===this._optionsService.rawOptions.cursorStyle&&this._state.width===this._cell.getWidth())return;this._clearCursor()}this._ctx.save(),this._cursorRenderers[this._optionsService.rawOptions.cursorStyle||"block"](i,r,this._cell),this._ctx.restore(),this._state.x=i,this._state.y=r,this._state.isFocused=!1,this._state.style=this._optionsService.rawOptions.cursorStyle,this._state.width=this._cell.getWidth()}else this._clearCursor()}}}else this._clearCursor()},t.prototype._clearCursor=function(){this._state&&(window.devicePixelRatio<1?this._clearAll():this._clearCells(this._state.x,this._state.y,this._state.width,1),this._state={x:0,y:0,isFocused:!1,style:"",width:0})},t.prototype._renderBarCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillLeftLineAtCell(e,t,this._optionsService.rawOptions.cursorWidth),this._ctx.restore()},t.prototype._renderBlockCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillCells(e,t,r.getWidth(),1),this._ctx.fillStyle=this._colors.cursorAccent.css,this._fillCharTrueColor(r,e,t),this._ctx.restore()},t.prototype._renderUnderlineCursor=function(e,t,r){this._ctx.save(),this._ctx.fillStyle=this._colors.cursor.css,this._fillBottomLineAtCells(e,t),this._ctx.restore()},t.prototype._renderBlurCursor=function(e,t,r){this._ctx.save(),this._ctx.strokeStyle=this._colors.cursor.css,this._strokeRectAtCell(e,t,r.getWidth(),1),this._ctx.restore()},o([s(5,l.IBufferService),s(6,l.IOptionsService),s(7,l.ICoreService),s(8,h.ICoreBrowserService)],t)}(a.BaseRenderLayer);t.CursorRenderLayer=f;var _=function(){function e(e,t){this._renderCallback=t,this.isCursorVisible=!0,e&&this._restartInterval()}return Object.defineProperty(e.prototype,"isPaused",{get:function(){return!(this._blinkStartTimeout||this._blinkInterval)},enumerable:!1,configurable:!0}),e.prototype.dispose=function(){this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.restartBlinkAnimation=function(){var e=this;this.isPaused||(this._animationTimeRestarted=Date.now(),this.isCursorVisible=!0,this._animationFrame||(this._animationFrame=window.requestAnimationFrame((function(){e._renderCallback(),e._animationFrame=void 0}))))},e.prototype._restartInterval=function(e){var t=this;void 0===e&&(e=u),this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout=window.setTimeout((function(){if(t._animationTimeRestarted){var e=u-(Date.now()-t._animationTimeRestarted);if(t._animationTimeRestarted=void 0,e>0)return void t._restartInterval(e)}t.isCursorVisible=!1,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0})),t._blinkInterval=window.setInterval((function(){if(t._animationTimeRestarted){var e=u-(Date.now()-t._animationTimeRestarted);return t._animationTimeRestarted=void 0,void t._restartInterval(e)}t.isCursorVisible=!t.isCursorVisible,t._animationFrame=window.requestAnimationFrame((function(){t._renderCallback(),t._animationFrame=void 0}))}),u)}),e)},e.prototype.pause=function(){this.isCursorVisible=!0,this._blinkInterval&&(window.clearInterval(this._blinkInterval),this._blinkInterval=void 0),this._blinkStartTimeout&&(window.clearTimeout(this._blinkStartTimeout),this._blinkStartTimeout=void 0),this._animationFrame&&(window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)},e.prototype.resume=function(){this.pause(),this._animationTimeRestarted=void 0,this._restartInterval(),this.restartBlinkAnimation()},e}()},8978:(e,t,r)=>{var i,n,o,s,a,c,l,h,u,f,_,d,p,v,g,y,m,S,C,b,w,L,E,x,M,k,A,R,O,T,B,D,P,I,H,F,j,W,U,q,N,z,K,V,G,X,Y,Z,J,$,Q,ee,te,re,ie,ne,oe,se,ae,ce,le,he,ue,fe,_e,de,pe,ve,ge,ye,me,Se,Ce,be,we,Le,Ee,xe,Me,ke,Ae,Re,Oe,Te,Be,De,Pe,Ie,He,Fe,je,We,Ue,qe,Ne,ze,Ke,Ve,Ge,Xe,Ye,Ze,Je,$e,Qe,et,tt,rt,it,nt,ot,st,at,ct,lt,ht,ut,ft,_t,dt,pt,vt,gt,yt,mt,St,Ct,bt;Object.defineProperty(t,"__esModule",{value:!0}),t.tryDrawCustomChar=t.boxDrawingDefinitions=t.blockElementDefinitions=void 0;var wt=r(1752);t.blockElementDefinitions={"▀":[{x:0,y:0,w:8,h:4}],"▁":[{x:0,y:7,w:8,h:1}],"▂":[{x:0,y:6,w:8,h:2}],"▃":[{x:0,y:5,w:8,h:3}],"▄":[{x:0,y:4,w:8,h:4}],"▅":[{x:0,y:3,w:8,h:5}],"▆":[{x:0,y:2,w:8,h:6}],"▇":[{x:0,y:1,w:8,h:7}],"█":[{x:0,y:0,w:8,h:8}],"▉":[{x:0,y:0,w:7,h:8}],"▊":[{x:0,y:0,w:6,h:8}],"▋":[{x:0,y:0,w:5,h:8}],"▌":[{x:0,y:0,w:4,h:8}],"▍":[{x:0,y:0,w:3,h:8}],"▎":[{x:0,y:0,w:2,h:8}],"▏":[{x:0,y:0,w:1,h:8}],"▐":[{x:4,y:0,w:4,h:8}],"▔":[{x:0,y:0,w:9,h:1}],"▕":[{x:7,y:0,w:1,h:8}],"▖":[{x:0,y:4,w:4,h:4}],"▗":[{x:4,y:4,w:4,h:4}],"▘":[{x:0,y:0,w:4,h:4}],"▙":[{x:0,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}],"▚":[{x:0,y:0,w:4,h:4},{x:4,y:4,w:4,h:4}],"▛":[{x:0,y:0,w:4,h:8},{x:0,y:0,w:4,h:8}],"▜":[{x:0,y:0,w:8,h:4},{x:4,y:0,w:4,h:8}],"▝":[{x:4,y:0,w:4,h:4}],"▞":[{x:4,y:0,w:4,h:4},{x:0,y:4,w:4,h:4}],"▟":[{x:4,y:0,w:4,h:8},{x:0,y:4,w:8,h:4}],"🭰":[{x:1,y:0,w:1,h:8}],"🭱":[{x:2,y:0,w:1,h:8}],"🭲":[{x:3,y:0,w:1,h:8}],"🭳":[{x:4,y:0,w:1,h:8}],"🭴":[{x:5,y:0,w:1,h:8}],"🭵":[{x:6,y:0,w:1,h:8}],"🭶":[{x:0,y:1,w:8,h:1}],"🭷":[{x:0,y:2,w:8,h:1}],"🭸":[{x:0,y:3,w:8,h:1}],"🭹":[{x:0,y:4,w:8,h:1}],"🭺":[{x:0,y:5,w:8,h:1}],"🭻":[{x:0,y:6,w:8,h:1}],"🭼":[{x:0,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}],"🭽":[{x:0,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}],"🭾":[{x:7,y:0,w:1,h:8},{x:0,y:0,w:8,h:1}],"🭿":[{x:7,y:0,w:1,h:8},{x:0,y:7,w:8,h:1}],"🮀":[{x:0,y:0,w:8,h:1},{x:0,y:7,w:8,h:1}],"🮁":[{x:0,y:0,w:8,h:1},{x:0,y:2,w:8,h:1},{x:0,y:4,w:8,h:1},{x:0,y:7,w:8,h:1}],"🮂":[{x:0,y:0,w:8,h:2}],"🮃":[{x:0,y:0,w:8,h:3}],"🮄":[{x:0,y:0,w:8,h:5}],"🮅":[{x:0,y:0,w:8,h:6}],"🮆":[{x:0,y:0,w:8,h:7}],"🮇":[{x:6,y:0,w:2,h:8}],"🮈":[{x:5,y:0,w:3,h:8}],"🮉":[{x:3,y:0,w:5,h:8}],"🮊":[{x:2,y:0,w:6,h:8}],"🮋":[{x:1,y:0,w:7,h:8}],"🮕":[{x:0,y:0,w:2,h:2},{x:4,y:0,w:2,h:2},{x:2,y:2,w:2,h:2},{x:6,y:2,w:2,h:2},{x:0,y:4,w:2,h:2},{x:4,y:4,w:2,h:2},{x:2,y:6,w:2,h:2},{x:6,y:6,w:2,h:2}],"🮖":[{x:2,y:0,w:2,h:2},{x:6,y:0,w:2,h:2},{x:0,y:2,w:2,h:2},{x:4,y:2,w:2,h:2},{x:2,y:4,w:2,h:2},{x:6,y:4,w:2,h:2},{x:0,y:6,w:2,h:2},{x:4,y:6,w:2,h:2}],"🮗":[{x:0,y:2,w:8,h:2},{x:0,y:6,w:8,h:2}]};var Lt={"░":[[1,0,0,0],[0,0,0,0],[0,0,1,0],[0,0,0,0]],"▒":[[1,0],[0,0],[0,1],[0,0]],"▓":[[0,1],[1,1],[1,0],[1,1]]};t.boxDrawingDefinitions={"─":(i={},i[1]="M0,.5 L1,.5",i),"━":(n={},n[3]="M0,.5 L1,.5",n),"│":(o={},o[1]="M.5,0 L.5,1",o),"┃":(s={},s[3]="M.5,0 L.5,1",s),"┌":(a={},a[1]="M0.5,1 L.5,.5 L1,.5",a),"┏":(c={},c[3]="M0.5,1 L.5,.5 L1,.5",c),"┐":(l={},l[1]="M0,.5 L.5,.5 L.5,1",l),"┓":(h={},h[3]="M0,.5 L.5,.5 L.5,1",h),"└":(u={},u[1]="M.5,0 L.5,.5 L1,.5",u),"┗":(f={},f[3]="M.5,0 L.5,.5 L1,.5",f),"┘":(_={},_[1]="M.5,0 L.5,.5 L0,.5",_),"┛":(d={},d[3]="M.5,0 L.5,.5 L0,.5",d),"├":(p={},p[1]="M.5,0 L.5,1 M.5,.5 L1,.5",p),"┣":(v={},v[3]="M.5,0 L.5,1 M.5,.5 L1,.5",v),"┤":(g={},g[1]="M.5,0 L.5,1 M.5,.5 L0,.5",g),"┫":(y={},y[3]="M.5,0 L.5,1 M.5,.5 L0,.5",y),"┬":(m={},m[1]="M0,.5 L1,.5 M.5,.5 L.5,1",m),"┳":(S={},S[3]="M0,.5 L1,.5 M.5,.5 L.5,1",S),"┴":(C={},C[1]="M0,.5 L1,.5 M.5,.5 L.5,0",C),"┻":(b={},b[3]="M0,.5 L1,.5 M.5,.5 L.5,0",b),"┼":(w={},w[1]="M0,.5 L1,.5 M.5,0 L.5,1",w),"╋":(L={},L[3]="M0,.5 L1,.5 M.5,0 L.5,1",L),"╴":(E={},E[1]="M.5,.5 L0,.5",E),"╸":(x={},x[3]="M.5,.5 L0,.5",x),"╵":(M={},M[1]="M.5,.5 L.5,0",M),"╹":(k={},k[3]="M.5,.5 L.5,0",k),"╶":(A={},A[1]="M.5,.5 L1,.5",A),"╺":(R={},R[3]="M.5,.5 L1,.5",R),"╷":(O={},O[1]="M.5,.5 L.5,1",O),"╻":(T={},T[3]="M.5,.5 L.5,1",T),"═":(B={},B[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},B),"║":(D={},D[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},D),"╒":(P={},P[1]=function(e,t){return"M.5,1 L.5,"+(.5-t)+" L1,"+(.5-t)+" M.5,"+(.5+t)+" L1,"+(.5+t)},P),"╓":(I={},I[1]=function(e,t){return"M"+(.5-e)+",1 L"+(.5-e)+",.5 L1,.5 M"+(.5+e)+",.5 L"+(.5+e)+",1"},I),"╔":(H={},H[1]=function(e,t){return"M1,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1"},H),"╕":(F={},F[1]=function(e,t){return"M0,"+(.5-t)+" L.5,"+(.5-t)+" L.5,1 M0,"+(.5+t)+" L.5,"+(.5+t)},F),"╖":(j={},j[1]=function(e,t){return"M"+(.5+e)+",1 L"+(.5+e)+",.5 L0,.5 M"+(.5-e)+",.5 L"+(.5-e)+",1"},j),"╗":(W={},W[1]=function(e,t){return"M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M0,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",1"},W),"╘":(U={},U[1]=function(e,t){return"M.5,0 L.5,"+(.5+t)+" L1,"+(.5+t)+" M.5,"+(.5-t)+" L1,"+(.5-t)},U),"╙":(q={},q[1]=function(e,t){return"M1,.5 L"+(.5-e)+",.5 L"+(.5-e)+",0 M"+(.5+e)+",.5 L"+(.5+e)+",0"},q),"╚":(N={},N[1]=function(e,t){return"M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0 M1,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",0"},N),"╛":(z={},z[1]=function(e,t){return"M0,"+(.5+t)+" L.5,"+(.5+t)+" L.5,0 M0,"+(.5-t)+" L.5,"+(.5-t)},z),"╜":(K={},K[1]=function(e,t){return"M0,.5 L"+(.5+e)+",.5 L"+(.5+e)+",0 M"+(.5-e)+",.5 L"+(.5-e)+",0"},K),"╝":(V={},V[1]=function(e,t){return"M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M0,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",0"},V),"╞":(G={},G[1]=function(e,t){return"M.5,0 L.5,1 M.5,"+(.5-t)+" L1,"+(.5-t)+" M.5,"+(.5+t)+" L1,"+(.5+t)},G),"╟":(X={},X[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1 M"+(.5+e)+",.5 L1,.5"},X),"╠":(Y={},Y[1]=function(e,t){return"M"+(.5-e)+",0 L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},Y),"╡":(Z={},Z[1]=function(e,t){return"M.5,0 L.5,1 M0,"+(.5-t)+" L.5,"+(.5-t)+" M0,"+(.5+t)+" L.5,"+(.5+t)},Z),"╢":(J={},J[1]=function(e,t){return"M0,.5 L"+(.5-e)+",.5 M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},J),"╣":($={},$[1]=function(e,t){return"M"+(.5+e)+",0 L"+(.5+e)+",1 M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0"},$),"╤":(Q={},Q[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)+" M.5,"+(.5+t)+" L.5,1"},Q),"╥":(ee={},ee[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",.5 L"+(.5-e)+",1 M"+(.5+e)+",.5 L"+(.5+e)+",1"},ee),"╦":(te={},te[1]=function(e,t){return"M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1"},te),"╧":(re={},re[1]=function(e,t){return"M.5,0 L.5,"+(.5-t)+" M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},re),"╨":(ie={},ie[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",.5 L"+(.5-e)+",0 M"+(.5+e)+",.5 L"+(.5+e)+",0"},ie),"╩":(ne={},ne[1]=function(e,t){return"M0,"+(.5+t)+" L1,"+(.5+t)+" M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},ne),"╪":(oe={},oe[1]=function(e,t){return"M.5,0 L.5,1 M0,"+(.5-t)+" L1,"+(.5-t)+" M0,"+(.5+t)+" L1,"+(.5+t)},oe),"╫":(se={},se[1]=function(e,t){return"M0,.5 L1,.5 M"+(.5-e)+",0 L"+(.5-e)+",1 M"+(.5+e)+",0 L"+(.5+e)+",1"},se),"╬":(ae={},ae[1]=function(e,t){return"M0,"+(.5+t)+" L"+(.5-e)+","+(.5+t)+" L"+(.5-e)+",1 M1,"+(.5+t)+" L"+(.5+e)+","+(.5+t)+" L"+(.5+e)+",1 M0,"+(.5-t)+" L"+(.5-e)+","+(.5-t)+" L"+(.5-e)+",0 M1,"+(.5-t)+" L"+(.5+e)+","+(.5-t)+" L"+(.5+e)+",0"},ae),"╱":(ce={},ce[1]="M1,0 L0,1",ce),"╲":(le={},le[1]="M0,0 L1,1",le),"╳":(he={},he[1]="M1,0 L0,1 M0,0 L1,1",he),"╼":(ue={},ue[1]="M.5,.5 L0,.5",ue[3]="M.5,.5 L1,.5",ue),"╽":(fe={},fe[1]="M.5,.5 L.5,0",fe[3]="M.5,.5 L.5,1",fe),"╾":(_e={},_e[1]="M.5,.5 L1,.5",_e[3]="M.5,.5 L0,.5",_e),"╿":(de={},de[1]="M.5,.5 L.5,1",de[3]="M.5,.5 L.5,0",de),"┍":(pe={},pe[1]="M.5,.5 L.5,1",pe[3]="M.5,.5 L1,.5",pe),"┎":(ve={},ve[1]="M.5,.5 L1,.5",ve[3]="M.5,.5 L.5,1",ve),"┑":(ge={},ge[1]="M.5,.5 L.5,1",ge[3]="M.5,.5 L0,.5",ge),"┒":(ye={},ye[1]="M.5,.5 L0,.5",ye[3]="M.5,.5 L.5,1",ye),"┕":(me={},me[1]="M.5,.5 L.5,0",me[3]="M.5,.5 L1,.5",me),"┖":(Se={},Se[1]="M.5,.5 L1,.5",Se[3]="M.5,.5 L.5,0",Se),"┙":(Ce={},Ce[1]="M.5,.5 L.5,0",Ce[3]="M.5,.5 L0,.5",Ce),"┚":(be={},be[1]="M.5,.5 L0,.5",be[3]="M.5,.5 L.5,0",be),"┝":(we={},we[1]="M.5,0 L.5,1",we[3]="M.5,.5 L1,.5",we),"┞":(Le={},Le[1]="M0.5,1 L.5,.5 L1,.5",Le[3]="M.5,.5 L.5,0",Le),"┟":(Ee={},Ee[1]="M.5,0 L.5,.5 L1,.5",Ee[3]="M.5,.5 L.5,1",Ee),"┠":(xe={},xe[1]="M.5,.5 L1,.5",xe[3]="M.5,0 L.5,1",xe),"┡":(Me={},Me[1]="M.5,.5 L.5,1",Me[3]="M.5,0 L.5,.5 L1,.5",Me),"┢":(ke={},ke[1]="M.5,.5 L.5,0",ke[3]="M0.5,1 L.5,.5 L1,.5",ke),"┥":(Ae={},Ae[1]="M.5,0 L.5,1",Ae[3]="M.5,.5 L0,.5",Ae),"┦":(Re={},Re[1]="M0,.5 L.5,.5 L.5,1",Re[3]="M.5,.5 L.5,0",Re),"┧":(Oe={},Oe[1]="M.5,0 L.5,.5 L0,.5",Oe[3]="M.5,.5 L.5,1",Oe),"┨":(Te={},Te[1]="M.5,.5 L0,.5",Te[3]="M.5,0 L.5,1",Te),"┩":(Be={},Be[1]="M.5,.5 L.5,1",Be[3]="M.5,0 L.5,.5 L0,.5",Be),"┪":(De={},De[1]="M.5,.5 L.5,0",De[3]="M0,.5 L.5,.5 L.5,1",De),"┭":(Pe={},Pe[1]="M0.5,1 L.5,.5 L1,.5",Pe[3]="M.5,.5 L0,.5",Pe),"┮":(Ie={},Ie[1]="M0,.5 L.5,.5 L.5,1",Ie[3]="M.5,.5 L1,.5",Ie),"┯":(He={},He[1]="M.5,.5 L.5,1",He[3]="M0,.5 L1,.5",He),"┰":(Fe={},Fe[1]="M0,.5 L1,.5",Fe[3]="M.5,.5 L.5,1",Fe),"┱":(je={},je[1]="M.5,.5 L1,.5",je[3]="M0,.5 L.5,.5 L.5,1",je),"┲":(We={},We[1]="M.5,.5 L0,.5",We[3]="M0.5,1 L.5,.5 L1,.5",We),"┵":(Ue={},Ue[1]="M.5,0 L.5,.5 L1,.5",Ue[3]="M.5,.5 L0,.5",Ue),"┶":(qe={},qe[1]="M.5,0 L.5,.5 L0,.5",qe[3]="M.5,.5 L1,.5",qe),"┷":(Ne={},Ne[1]="M.5,.5 L.5,0",Ne[3]="M0,.5 L1,.5",Ne),"┸":(ze={},ze[1]="M0,.5 L1,.5",ze[3]="M.5,.5 L.5,0",ze),"┹":(Ke={},Ke[1]="M.5,.5 L1,.5",Ke[3]="M.5,0 L.5,.5 L0,.5",Ke),"┺":(Ve={},Ve[1]="M.5,.5 L0,.5",Ve[3]="M.5,0 L.5,.5 L1,.5",Ve),"┽":(Ge={},Ge[1]="M.5,0 L.5,1 M.5,.5 L1,.5",Ge[3]="M.5,.5 L0,.5",Ge),"┾":(Xe={},Xe[1]="M.5,0 L.5,1 M.5,.5 L0,.5",Xe[3]="M.5,.5 L1,.5",Xe),"┿":(Ye={},Ye[1]="M.5,0 L.5,1",Ye[3]="M0,.5 L1,.5",Ye),"╀":(Ze={},Ze[1]="M0,.5 L1,.5 M.5,.5 L.5,1",Ze[3]="M.5,.5 L.5,0",Ze),"╁":(Je={},Je[1]="M.5,.5 L.5,0 M0,.5 L1,.5",Je[3]="M.5,.5 L.5,1",Je),"╂":($e={},$e[1]="M0,.5 L1,.5",$e[3]="M.5,0 L.5,1",$e),"╃":(Qe={},Qe[1]="M0.5,1 L.5,.5 L1,.5",Qe[3]="M.5,0 L.5,.5 L0,.5",Qe),"╄":(et={},et[1]="M0,.5 L.5,.5 L.5,1",et[3]="M.5,0 L.5,.5 L1,.5",et),"╅":(tt={},tt[1]="M.5,0 L.5,.5 L1,.5",tt[3]="M0,.5 L.5,.5 L.5,1",tt),"╆":(rt={},rt[1]="M.5,0 L.5,.5 L0,.5",rt[3]="M0.5,1 L.5,.5 L1,.5",rt),"╇":(it={},it[1]="M.5,.5 L.5,1",it[3]="M.5,.5 L.5,0 M0,.5 L1,.5",it),"╈":(nt={},nt[1]="M.5,.5 L.5,0",nt[3]="M0,.5 L1,.5 M.5,.5 L.5,1",nt),"╉":(ot={},ot[1]="M.5,.5 L1,.5",ot[3]="M.5,0 L.5,1 M.5,.5 L0,.5",ot),"╊":(st={},st[1]="M.5,.5 L0,.5",st[3]="M.5,0 L.5,1 M.5,.5 L1,.5",st),"╌":(at={},at[1]="M.1,.5 L.4,.5 M.6,.5 L.9,.5",at),"╍":(ct={},ct[3]="M.1,.5 L.4,.5 M.6,.5 L.9,.5",ct),"┄":(lt={},lt[1]="M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",lt),"┅":(ht={},ht[3]="M.0667,.5 L.2667,.5 M.4,.5 L.6,.5 M.7333,.5 L.9333,.5",ht),"┈":(ut={},ut[1]="M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",ut),"┉":(ft={},ft[3]="M.05,.5 L.2,.5 M.3,.5 L.45,.5 M.55,.5 L.7,.5 M.8,.5 L.95,.5",ft),"╎":(_t={},_t[1]="M.5,.1 L.5,.4 M.5,.6 L.5,.9",_t),"╏":(dt={},dt[3]="M.5,.1 L.5,.4 M.5,.6 L.5,.9",dt),"┆":(pt={},pt[1]="M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",pt),"┇":(vt={},vt[3]="M.5,.0667 L.5,.2667 M.5,.4 L.5,.6 M.5,.7333 L.5,.9333",vt),"┊":(gt={},gt[1]="M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",gt),"┋":(yt={},yt[3]="M.5,.05 L.5,.2 M.5,.3 L.5,.45 L.5,.55 M.5,.7 L.5,.95",yt),"╭":(mt={},mt[1]="C.5,1,.5,.5,1,.5",mt),"╮":(St={},St[1]="C.5,1,.5,.5,0,.5",St),"╯":(Ct={},Ct[1]="C.5,0,.5,.5,0,.5",Ct),"╰":(bt={},bt[1]="C.5,0,.5,.5,1,.5",bt)},t.tryDrawCustomChar=function(e,r,i,n,o,s){var a=t.blockElementDefinitions[r];if(a)return function(e,t,r,i,n,o){for(var s=0;s7&&parseInt(c.substr(7,2),16)||1;else{if(!c.startsWith("rgba"))throw new Error('Unexpected fillStyle color format "'+c+'" when drawing pattern glyph');p=(s=c.substring(5,c.length-1).split(",").map((function(e){return parseFloat(e)})))[0],v=s[1],g=s[2],y=s[3]}for(var m=0;m{Object.defineProperty(t,"__esModule",{value:!0}),t.GridCache=void 0;var r=function(){function e(){this.cache=[]}return e.prototype.resize=function(e,t){for(var r=0;r=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.LinkRenderLayer=void 0;var a=r(1546),c=r(8803),l=r(2040),h=r(2585),u=function(e){function t(t,r,i,n,o,s,a,c){var l=e.call(this,t,"link",r,!0,i,n,a,c)||this;return o.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),o.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),s.onShowLinkUnderline((function(e){return l._onShowLinkUnderline(e)})),s.onHideLinkUnderline((function(e){return l._onHideLinkUnderline(e)})),l}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._state=void 0},t.prototype.reset=function(){this._clearCurrentLink()},t.prototype._clearCurrentLink=function(){if(this._state){this._clearCells(this._state.x1,this._state.y1,this._state.cols-this._state.x1,1);var e=this._state.y2-this._state.y1-1;e>0&&this._clearCells(0,this._state.y1+1,this._state.cols,e),this._clearCells(0,this._state.y2,this._state.x2,1),this._state=void 0}},t.prototype._onShowLinkUnderline=function(e){if(e.fg===c.INVERTED_DEFAULT_COLOR?this._ctx.fillStyle=this._colors.background.css:e.fg&&(0,l.is256Color)(e.fg)?this._ctx.fillStyle=this._colors.ansi[e.fg].css:this._ctx.fillStyle=this._colors.foreground.css,e.y1===e.y2)this._fillBottomLineAtCells(e.x1,e.y1,e.x2-e.x1);else{this._fillBottomLineAtCells(e.x1,e.y1,e.cols-e.x1);for(var t=e.y1+1;t=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.Renderer=void 0;var a=r(9596),c=r(4149),l=r(2512),h=r(5098),u=r(844),f=r(4725),_=r(2585),d=r(1420),p=r(8460),v=1,g=function(e){function t(t,r,i,n,o,s,u,f){var _=e.call(this)||this;_._colors=t,_._screenElement=r,_._bufferService=s,_._charSizeService=u,_._optionsService=f,_._id=v++,_._onRequestRedraw=new p.EventEmitter;var d=_._optionsService.rawOptions.allowTransparency;return _._renderLayers=[o.createInstance(a.TextRenderLayer,_._screenElement,0,_._colors,d,_._id),o.createInstance(c.SelectionRenderLayer,_._screenElement,1,_._colors,_._id),o.createInstance(h.LinkRenderLayer,_._screenElement,2,_._colors,_._id,i,n),o.createInstance(l.CursorRenderLayer,_._screenElement,3,_._colors,_._id,_._onRequestRedraw)],_.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},_._devicePixelRatio=window.devicePixelRatio,_._updateDimensions(),_.onOptionsChanged(),_}return n(t,e),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return this._onRequestRedraw.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){for(var t=0,r=this._renderLayers;t{Object.defineProperty(t,"__esModule",{value:!0}),t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw new Error("value must not be falsy");return e}},4149:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionRenderLayer=void 0;var a=r(1546),c=r(2585),l=function(e){function t(t,r,i,n,o,s){var a=e.call(this,t,"selection",r,!0,i,n,o,s)||this;return a._clearState(),a}return n(t,e),t.prototype._clearState=function(){this._state={start:void 0,end:void 0,columnSelectMode:void 0,ydisp:void 0}},t.prototype.resize=function(t){e.prototype.resize.call(this,t),this._clearState()},t.prototype.reset=function(){this._state.start&&this._state.end&&(this._clearState(),this._clearAll())},t.prototype.onSelectionChanged=function(e,t,r){if(this._didStateChange(e,t,r,this._bufferService.buffer.ydisp))if(this._clearAll(),e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(o>=this._bufferService.rows||s<0)this._state.ydisp=this._bufferService.buffer.ydisp;else{if(this._ctx.fillStyle=this._colors.selectionTransparent.css,r){var a=e[0],c=t[0]-a,l=s-o+1;this._fillCells(a,o,c,l)}else{a=i===o?e[0]:0;var h=o===n?t[0]:this._bufferService.cols;this._fillCells(a,o,h-a,1);var u=Math.max(s-o-1,0);if(this._fillCells(0,o+1,this._bufferService.cols,u),o!==s){var f=n===s?t[0]:this._bufferService.cols;this._fillCells(0,s,f,1)}}this._state.start=[e[0],e[1]],this._state.end=[t[0],t[1]],this._state.columnSelectMode=r,this._state.ydisp=this._bufferService.buffer.ydisp}}else this._clearState()},t.prototype._didStateChange=function(e,t,r,i){return!this._areCoordinatesEqual(e,this._state.start)||!this._areCoordinatesEqual(t,this._state.end)||r!==this._state.columnSelectMode||i!==this._state.ydisp},t.prototype._areCoordinatesEqual=function(e,t){return!(!e||!t)&&e[0]===t[0]&&e[1]===t[1]},o([s(4,c.IBufferService),s(5,c.IOptionsService)],t)}(a.BaseRenderLayer);t.SelectionRenderLayer=l},9596:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextRenderLayer=void 0;var a=r(3700),c=r(1546),l=r(3734),h=r(643),u=r(511),f=r(2585),_=r(4725),d=r(4269),p=function(e){function t(t,r,i,n,o,s,c,l){var h=e.call(this,t,"text",r,n,i,o,s,c)||this;return h._characterJoinerService=l,h._characterWidth=0,h._characterFont="",h._characterOverlapCache={},h._workCell=new u.CellData,h._state=new a.GridCache,h}return n(t,e),t.prototype.resize=function(t){e.prototype.resize.call(this,t);var r=this._getFont(!1,!1);this._characterWidth===t.scaledCharWidth&&this._characterFont===r||(this._characterWidth=t.scaledCharWidth,this._characterFont=r,this._characterOverlapCache={}),this._state.clear(),this._state.resize(this._bufferService.cols,this._bufferService.rows)},t.prototype.reset=function(){this._state.clear(),this._clearAll()},t.prototype._forEachCell=function(e,t,r){for(var i=e;i<=t;i++)for(var n=i+this._bufferService.buffer.ydisp,o=this._bufferService.buffer.lines.get(n),s=this._characterJoinerService.getJoinedCharacters(n),a=0;a0&&a===s[0][0]){l=!0;var f=s.shift();c=new d.JoinedCellData(this._workCell,o.translateToString(!0,f[0],f[1]),f[1]-f[0]),u=f[1]-1}!l&&this._isOverlapping(c)&&uthis._characterWidth;return this._ctx.restore(),this._characterOverlapCache[t]=r,r},o([s(5,f.IBufferService),s(6,f.IOptionsService),s(7,_.ICharacterJoinerService)],t)}(c.BaseRenderLayer);t.TextRenderLayer=p},9616:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseCharAtlas=void 0;var r=function(){function e(){this._didWarmUp=!1}return e.prototype.dispose=function(){},e.prototype.warmUp=function(){this._didWarmUp||(this._doWarmUp(),this._didWarmUp=!0)},e.prototype._doWarmUp=function(){},e.prototype.clear=function(){},e.prototype.beginFrame=function(){},e}();t.BaseCharAtlas=r},1420:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.removeTerminalFromCache=t.acquireCharAtlas=void 0;var i=r(2040),n=r(1906),o=[];t.acquireCharAtlas=function(e,t,r,s,a){for(var c=(0,i.generateConfig)(s,a,e,r),l=0;l=0){if((0,i.configEquals)(u.config,c))return u.atlas;1===u.ownedBy.length?(u.atlas.dispose(),o.splice(l,1)):u.ownedBy.splice(h,1);break}}for(l=0;l{Object.defineProperty(t,"__esModule",{value:!0}),t.CHAR_ATLAS_CELL_SPACING=t.TEXT_BASELINE=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0;var i=r(6114);t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.TEXT_BASELINE=i.isFirefox||i.isLegacyEdge?"bottom":"ideographic",t.CHAR_ATLAS_CELL_SPACING=1},1906:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.NoneCharAtlas=t.DynamicCharAtlas=t.getGlyphCacheKey=void 0;var o=r(8803),s=r(9616),a=r(5680),c=r(7001),l=r(6114),h=r(1752),u=r(4774),f=1024,_=1024,d={css:"rgba(0, 0, 0, 0)",rgba:0};function p(e){return e.code<<21|e.bg<<12|e.fg<<3|(e.bold?0:4)+(e.dim?0:2)+(e.italic?0:1)}t.getGlyphCacheKey=p;var v=function(e){function t(t,r){var i=e.call(this)||this;i._config=r,i._drawToCacheCount=0,i._glyphsWaitingOnBitmap=[],i._bitmapCommitTimeout=null,i._bitmap=null,i._cacheCanvas=t.createElement("canvas"),i._cacheCanvas.width=f,i._cacheCanvas.height=_,i._cacheCtx=(0,h.throwIfFalsy)(i._cacheCanvas.getContext("2d",{alpha:!0}));var n=t.createElement("canvas");n.width=i._config.scaledCharWidth,n.height=i._config.scaledCharHeight,i._tmpCtx=(0,h.throwIfFalsy)(n.getContext("2d",{alpha:i._config.allowTransparency})),i._width=Math.floor(f/i._config.scaledCharWidth),i._height=Math.floor(_/i._config.scaledCharHeight);var o=i._width*i._height;return i._cacheMap=new c.LRUMap(o),i._cacheMap.prealloc(o),i}return n(t,e),t.prototype.dispose=function(){null!==this._bitmapCommitTimeout&&(window.clearTimeout(this._bitmapCommitTimeout),this._bitmapCommitTimeout=null)},t.prototype.beginFrame=function(){this._drawToCacheCount=0},t.prototype.clear=function(){if(this._cacheMap.size>0){var e=this._width*this._height;this._cacheMap=new c.LRUMap(e),this._cacheMap.prealloc(e)}this._cacheCtx.clearRect(0,0,f,_),this._tmpCtx.clearRect(0,0,this._config.scaledCharWidth,this._config.scaledCharHeight)},t.prototype.draw=function(e,t,r,i){if(32===t.code)return!0;if(!this._canCache(t))return!1;var n=p(t),o=this._cacheMap.get(n);if(null!=o)return this._drawFromCache(e,o,r,i),!0;if(this._drawToCacheCount<100){var s;s=this._cacheMap.size>>24,n=t.rgba>>>16&255,o=t.rgba>>>8&255,s=0;s{Object.defineProperty(t,"__esModule",{value:!0}),t.LRUMap=void 0;var r=function(){function e(e){this.capacity=e,this._map={},this._head=null,this._tail=null,this._nodePool=[],this.size=0}return e.prototype._unlinkNode=function(e){var t=e.prev,r=e.next;e===this._head&&(this._head=r),e===this._tail&&(this._tail=t),null!==t&&(t.next=r),null!==r&&(r.prev=t)},e.prototype._appendNode=function(e){var t=this._tail;null!==t&&(t.next=e),e.prev=t,e.next=null,this._tail=e,null===this._head&&(this._head=e)},e.prototype.prealloc=function(e){for(var t=this._nodePool,r=0;r=this.capacity)r=this._head,this._unlinkNode(r),delete this._map[r.key],r.key=e,r.value=t,this._map[e]=r;else{var i=this._nodePool;i.length>0?((r=i.pop()).key=e,r.value=t):r={prev:null,next:null,key:e,value:t},this._map[e]=r,this.size++}this._appendNode(r)},e}();t.LRUMap=r},1296:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRenderer=void 0;var a=r(3787),c=r(8803),l=r(844),h=r(4725),u=r(2585),f=r(8460),_=r(4774),d=r(9631),p="xterm-dom-renderer-owner-",v="xterm-fg-",g="xterm-bg-",y="xterm-focus",m=1,S=function(e){function t(t,r,i,n,o,s,c,l,h,u){var f=e.call(this)||this;return f._colors=t,f._element=r,f._screenElement=i,f._viewportElement=n,f._linkifier=o,f._linkifier2=s,f._charSizeService=l,f._optionsService=h,f._bufferService=u,f._terminalClass=m++,f._rowElements=[],f._rowContainer=document.createElement("div"),f._rowContainer.classList.add("xterm-rows"),f._rowContainer.style.lineHeight="normal",f._rowContainer.setAttribute("aria-hidden","true"),f._refreshRowElements(f._bufferService.cols,f._bufferService.rows),f._selectionContainer=document.createElement("div"),f._selectionContainer.classList.add("xterm-selection"),f._selectionContainer.setAttribute("aria-hidden","true"),f.dimensions={scaledCharWidth:0,scaledCharHeight:0,scaledCellWidth:0,scaledCellHeight:0,scaledCharLeft:0,scaledCharTop:0,scaledCanvasWidth:0,scaledCanvasHeight:0,canvasWidth:0,canvasHeight:0,actualCellWidth:0,actualCellHeight:0},f._updateDimensions(),f._injectCss(),f._rowFactory=c.createInstance(a.DomRendererRowFactory,document,f._colors),f._element.classList.add(p+f._terminalClass),f._screenElement.appendChild(f._rowContainer),f._screenElement.appendChild(f._selectionContainer),f._linkifier.onShowLinkUnderline((function(e){return f._onLinkHover(e)})),f._linkifier.onHideLinkUnderline((function(e){return f._onLinkLeave(e)})),f._linkifier2.onShowLinkUnderline((function(e){return f._onLinkHover(e)})),f._linkifier2.onHideLinkUnderline((function(e){return f._onLinkLeave(e)})),f}return n(t,e),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return(new f.EventEmitter).event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._element.classList.remove(p+this._terminalClass),(0,d.removeElementFromParent)(this._rowContainer,this._selectionContainer,this._themeStyleElement,this._dimensionsStyleElement),e.prototype.dispose.call(this)},t.prototype._updateDimensions=function(){this.dimensions.scaledCharWidth=this._charSizeService.width*window.devicePixelRatio,this.dimensions.scaledCharHeight=Math.ceil(this._charSizeService.height*window.devicePixelRatio),this.dimensions.scaledCellWidth=this.dimensions.scaledCharWidth+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.scaledCellHeight=Math.floor(this.dimensions.scaledCharHeight*this._optionsService.rawOptions.lineHeight),this.dimensions.scaledCharLeft=0,this.dimensions.scaledCharTop=0,this.dimensions.scaledCanvasWidth=this.dimensions.scaledCellWidth*this._bufferService.cols,this.dimensions.scaledCanvasHeight=this.dimensions.scaledCellHeight*this._bufferService.rows,this.dimensions.canvasWidth=Math.round(this.dimensions.scaledCanvasWidth/window.devicePixelRatio),this.dimensions.canvasHeight=Math.round(this.dimensions.scaledCanvasHeight/window.devicePixelRatio),this.dimensions.actualCellWidth=this.dimensions.canvasWidth/this._bufferService.cols,this.dimensions.actualCellHeight=this.dimensions.canvasHeight/this._bufferService.rows;for(var e=0,t=this._rowElements;et;)this._rowContainer.removeChild(this._rowElements.pop())},t.prototype.onResize=function(e,t){this._refreshRowElements(e,t),this._updateDimensions()},t.prototype.onCharSizeChanged=function(){this._updateDimensions()},t.prototype.onBlur=function(){this._rowContainer.classList.remove(y)},t.prototype.onFocus=function(){this._rowContainer.classList.add(y)},t.prototype.onSelectionChanged=function(e,t,r){for(;this._selectionContainer.children.length;)this._selectionContainer.removeChild(this._selectionContainer.children[0]);if(e&&t){var i=e[1]-this._bufferService.buffer.ydisp,n=t[1]-this._bufferService.buffer.ydisp,o=Math.max(i,0),s=Math.min(n,this._bufferService.rows-1);if(!(o>=this._bufferService.rows||s<0)){var a=document.createDocumentFragment();if(r)a.appendChild(this._createSelectionElement(o,e[0],t[0],s-o+1));else{var c=i===o?e[0]:0,l=o===n?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(o,c,l));var h=s-o-1;if(a.appendChild(this._createSelectionElement(o+1,0,this._bufferService.cols,h)),o!==s){var u=n===s?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(s,0,u))}}this._selectionContainer.appendChild(a)}}},t.prototype._createSelectionElement=function(e,t,r,i){void 0===i&&(i=1);var n=document.createElement("div");return n.style.height=i*this.dimensions.actualCellHeight+"px",n.style.top=e*this.dimensions.actualCellHeight+"px",n.style.left=t*this.dimensions.actualCellWidth+"px",n.style.width=this.dimensions.actualCellWidth*(r-t)+"px",n},t.prototype.onCursorMove=function(){},t.prototype.onOptionsChanged=function(){this._updateDimensions(),this._injectCss()},t.prototype.clear=function(){for(var e=0,t=this._rowElements;e=n&&(e=0,r++)}},o([s(6,u.IInstantiationService),s(7,h.ICharSizeService),s(8,u.IOptionsService),s(9,u.IBufferService)],t)}(l.Disposable);t.DomRenderer=S},3787:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomRendererRowFactory=t.CURSOR_STYLE_UNDERLINE_CLASS=t.CURSOR_STYLE_BAR_CLASS=t.CURSOR_STYLE_BLOCK_CLASS=t.CURSOR_BLINK_CLASS=t.CURSOR_CLASS=t.STRIKETHROUGH_CLASS=t.UNDERLINE_CLASS=t.ITALIC_CLASS=t.DIM_CLASS=t.BOLD_CLASS=void 0;var o=r(8803),s=r(643),a=r(511),c=r(2585),l=r(4774),h=r(4725),u=r(4269);t.BOLD_CLASS="xterm-bold",t.DIM_CLASS="xterm-dim",t.ITALIC_CLASS="xterm-italic",t.UNDERLINE_CLASS="xterm-underline",t.STRIKETHROUGH_CLASS="xterm-strikethrough",t.CURSOR_CLASS="xterm-cursor",t.CURSOR_BLINK_CLASS="xterm-cursor-blink",t.CURSOR_STYLE_BLOCK_CLASS="xterm-cursor-block",t.CURSOR_STYLE_BAR_CLASS="xterm-cursor-bar",t.CURSOR_STYLE_UNDERLINE_CLASS="xterm-cursor-underline";var f=function(){function e(e,t,r,i,n){this._document=e,this._colors=t,this._characterJoinerService=r,this._optionsService=i,this._coreService=n,this._workCell=new a.CellData}return e.prototype.setColors=function(e){this._colors=e},e.prototype.createRow=function(e,r,i,n,a,c,h,f){for(var d=this._document.createDocumentFragment(),p=this._characterJoinerService.getJoinedCharacters(r),v=0,g=Math.min(e.length,f)-1;g>=0;g--)if(e.loadCell(g,this._workCell).getCode()!==s.NULL_CELL_CODE||i&&g===a){v=g+1;break}for(g=0;g0&&g===p[0][0]){m=!0;var b=p.shift();C=new u.JoinedCellData(this._workCell,e.translateToString(!0,b[0],b[1]),b[1]-b[0]),S=b[1]-1,y=C.getWidth()}var w=this._document.createElement("span");if(y>1&&(w.style.width=h*y+"px"),m&&(w.style.display="inline",a>=g&&a<=S&&(a=g)),!this._coreService.isCursorHidden&&i&&g===a)switch(w.classList.add(t.CURSOR_CLASS),c&&w.classList.add(t.CURSOR_BLINK_CLASS),n){case"bar":w.classList.add(t.CURSOR_STYLE_BAR_CLASS);break;case"underline":w.classList.add(t.CURSOR_STYLE_UNDERLINE_CLASS);break;default:w.classList.add(t.CURSOR_STYLE_BLOCK_CLASS)}C.isBold()&&w.classList.add(t.BOLD_CLASS),C.isItalic()&&w.classList.add(t.ITALIC_CLASS),C.isDim()&&w.classList.add(t.DIM_CLASS),C.isUnderline()&&w.classList.add(t.UNDERLINE_CLASS),C.isInvisible()?w.textContent=s.WHITESPACE_CELL_CHAR:w.textContent=C.getChars()||s.WHITESPACE_CELL_CHAR,C.isStrikethrough()&&w.classList.add(t.STRIKETHROUGH_CLASS);var L=C.getFgColor(),E=C.getFgColorMode(),x=C.getBgColor(),M=C.getBgColorMode(),k=!!C.isInverse();if(k){var A=L;L=x,x=A;var R=E;E=M,M=R}switch(E){case 16777216:case 33554432:C.isBold()&&L<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(L+=8),this._applyMinimumContrast(w,this._colors.background,this._colors.ansi[L])||w.classList.add("xterm-fg-"+L);break;case 50331648:var O=l.rgba.toColor(L>>16&255,L>>8&255,255&L);this._applyMinimumContrast(w,this._colors.background,O)||this._addStyle(w,"color:#"+_(L.toString(16),"0",6));break;default:this._applyMinimumContrast(w,this._colors.background,this._colors.foreground)||k&&w.classList.add("xterm-fg-"+o.INVERTED_DEFAULT_COLOR)}switch(M){case 16777216:case 33554432:w.classList.add("xterm-bg-"+x);break;case 50331648:this._addStyle(w,"background-color:#"+_(x.toString(16),"0",6));break;default:k&&w.classList.add("xterm-bg-"+o.INVERTED_DEFAULT_COLOR)}d.appendChild(w),g=S}}return d},e.prototype._applyMinimumContrast=function(e,t,r){if(1===this._optionsService.rawOptions.minimumContrastRatio)return!1;var i=this._colors.contrastCache.getColor(this._workCell.bg,this._workCell.fg);return void 0===i&&(i=l.color.ensureContrastRatio(t,r,this._optionsService.rawOptions.minimumContrastRatio),this._colors.contrastCache.setColor(this._workCell.bg,this._workCell.fg,null!=i?i:null)),!!i&&(this._addStyle(e,"color:"+i.css),!0)},e.prototype._addStyle=function(e,t){e.setAttribute("style",""+(e.getAttribute("style")||"")+t+";")},i([n(2,h.ICharacterJoinerService),n(3,c.IOptionsService),n(4,c.ICoreService)],e)}();function _(e,t,r){for(;e.length{Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionModel=void 0;var r=function(){function e(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}return e.prototype.clearSelection=function(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(e.prototype,"finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"finalSelectionEnd",{get:function(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){var e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}return this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd}},enumerable:!1,configurable:!0}),e.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])},e.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},e}();t.SelectionModel=r},428:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharSizeService=void 0;var o=r(2585),s=r(8460),a=function(){function e(e,t,r){this._optionsService=r,this.width=0,this.height=0,this._onCharSizeChange=new s.EventEmitter,this._measureStrategy=new c(e,t,this._optionsService)}return Object.defineProperty(e.prototype,"hasValidSize",{get:function(){return this.width>0&&this.height>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onCharSizeChange",{get:function(){return this._onCharSizeChange.event},enumerable:!1,configurable:!0}),e.prototype.measure=function(){var e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())},i([n(2,o.IOptionsService)],e)}();t.CharSizeService=a;var c=function(){function e(e,t,r){this._document=e,this._parentElement=t,this._optionsService=r,this._result={width:0,height:0},this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W",this._measureElement.setAttribute("aria-hidden","true"),this._parentElement.appendChild(this._measureElement)}return e.prototype.measure=function(){this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=this._optionsService.rawOptions.fontSize+"px";var e=this._measureElement.getBoundingClientRect();return 0!==e.width&&0!==e.height&&(this._result.width=e.width,this._result.height=Math.ceil(e.height)),this._result},e}()},4269:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;var a=r(3734),c=r(643),l=r(511),h=r(2585),u=function(e){function t(t,r,i){var n=e.call(this)||this;return n.content=0,n.combinedData="",n.fg=t.fg,n.bg=t.bg,n.combinedData=r,n._width=i,n}return n(t,e),t.prototype.isCombined=function(){return 2097152},t.prototype.getWidth=function(){return this._width},t.prototype.getChars=function(){return this.combinedData},t.prototype.getCode=function(){return 2097151},t.prototype.setFromCharData=function(e){throw new Error("not implemented")},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.JoinedCellData=u;var f=function(){function e(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new l.CellData}return e.prototype.register=function(e){var t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id},e.prototype.deregister=function(e){for(var t=0;t1)for(var u=this._getJoinedRanges(i,s,o,t,n),f=0;f1)for(u=this._getJoinedRanges(i,s,o,t,n),f=0;f{Object.defineProperty(t,"__esModule",{value:!0}),t.CoreBrowserService=void 0;var r=function(){function e(e){this._textarea=e}return Object.defineProperty(e.prototype,"isFocused",{get:function(){return(this._textarea.getRootNode?this._textarea.getRootNode():document).activeElement===this._textarea&&document.hasFocus()},enumerable:!1,configurable:!0}),e}();t.CoreBrowserService=r},8934:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.MouseService=void 0;var o=r(4725),s=r(9806),a=function(){function e(e,t){this._renderService=e,this._charSizeService=t}return e.prototype.getCoords=function(e,t,r,i,n){return(0,s.getCoords)(e,t,r,i,this._charSizeService.hasValidSize,this._renderService.dimensions.actualCellWidth,this._renderService.dimensions.actualCellHeight,n)},e.prototype.getRawByteCoords=function(e,t,r,i){var n=this.getCoords(e,t,r,i);return(0,s.getRawByteCoords)(n)},i([n(0,o.IRenderService),n(1,o.ICharSizeService)],e)}();t.MouseService=a},3230:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.RenderService=void 0;var a=r(6193),c=r(8460),l=r(844),h=r(5596),u=r(3656),f=r(2585),_=r(4725),d=function(e){function t(t,r,i,n,o,s){var l=e.call(this)||this;if(l._renderer=t,l._rowCount=r,l._charSizeService=o,l._isPaused=!1,l._needsFullRefresh=!1,l._isNextRenderRedrawOnly=!0,l._needsSelectionRefresh=!1,l._canvasWidth=0,l._canvasHeight=0,l._selectionState={start:void 0,end:void 0,columnSelectMode:!1},l._onDimensionsChange=new c.EventEmitter,l._onRender=new c.EventEmitter,l._onRefreshRequest=new c.EventEmitter,l.register({dispose:function(){return l._renderer.dispose()}}),l._renderDebouncer=new a.RenderDebouncer((function(e,t){return l._renderRows(e,t)})),l.register(l._renderDebouncer),l._screenDprMonitor=new h.ScreenDprMonitor,l._screenDprMonitor.setListener((function(){return l.onDevicePixelRatioChange()})),l.register(l._screenDprMonitor),l.register(s.onResize((function(e){return l._fullRefresh()}))),l.register(n.onOptionChange((function(){return l._renderer.onOptionsChanged()}))),l.register(l._charSizeService.onCharSizeChange((function(){return l.onCharSizeChanged()}))),l._renderer.onRequestRedraw((function(e){return l.refreshRows(e.start,e.end,!0)})),l.register((0,u.addDisposableDomListener)(window,"resize",(function(){return l.onDevicePixelRatioChange()}))),"IntersectionObserver"in window){var f=new IntersectionObserver((function(e){return l._onIntersectionChange(e[e.length-1])}),{threshold:0});f.observe(i),l.register({dispose:function(){return f.disconnect()}})}return l}return n(t,e),Object.defineProperty(t.prototype,"onDimensionsChange",{get:function(){return this._onDimensionsChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRenderedBufferChange",{get:function(){return this._onRender.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRefreshRequest",{get:function(){return this._onRefreshRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"dimensions",{get:function(){return this._renderer.dimensions},enumerable:!1,configurable:!0}),t.prototype._onIntersectionChange=function(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)},t.prototype.refreshRows=function(e,t,r){void 0===r&&(r=!1),this._isPaused?this._needsFullRefresh=!0:(r||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))},t.prototype._renderRows=function(e,t){this._renderer.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.onSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0},t.prototype.resize=function(e,t){this._rowCount=t,this._fireOnCanvasResize()},t.prototype.changeOptions=function(){this._renderer.onOptionsChanged(),this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize()},t.prototype._fireOnCanvasResize=function(){this._renderer.dimensions.canvasWidth===this._canvasWidth&&this._renderer.dimensions.canvasHeight===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.dimensions)},t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype.setRenderer=function(e){var t=this;this._renderer.dispose(),this._renderer=e,this._renderer.onRequestRedraw((function(e){return t.refreshRows(e.start,e.end,!0)})),this._needsSelectionRefresh=!0,this._fullRefresh()},t.prototype._fullRefresh=function(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)},t.prototype.clearTextureAtlas=function(){var e,t;null===(t=null===(e=this._renderer)||void 0===e?void 0:e.clearTextureAtlas)||void 0===t||t.call(e),this._fullRefresh()},t.prototype.setColors=function(e){this._renderer.setColors(e),this._fullRefresh()},t.prototype.onDevicePixelRatioChange=function(){this._charSizeService.measure(),this._renderer.onDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1)},t.prototype.onResize=function(e,t){this._renderer.onResize(e,t),this._fullRefresh()},t.prototype.onCharSizeChanged=function(){this._renderer.onCharSizeChanged()},t.prototype.onBlur=function(){this._renderer.onBlur()},t.prototype.onFocus=function(){this._renderer.onFocus()},t.prototype.onSelectionChanged=function(e,t,r){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=r,this._renderer.onSelectionChanged(e,t,r)},t.prototype.onCursorMove=function(){this._renderer.onCursorMove()},t.prototype.clear=function(){this._renderer.clear()},o([s(3,f.IOptionsService),s(4,_.ICharSizeService),s(5,f.IBufferService)],t)}(l.Disposable);t.RenderService=d},9312:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionService=void 0;var a=r(6114),c=r(456),l=r(511),h=r(8460),u=r(4725),f=r(2585),_=r(9806),d=r(9504),p=r(844),v=r(4841),g=String.fromCharCode(160),y=new RegExp(g,"g"),m=function(e){function t(t,r,i,n,o,s,a,u){var f=e.call(this)||this;return f._element=t,f._screenElement=r,f._linkifier=i,f._bufferService=n,f._coreService=o,f._mouseService=s,f._optionsService=a,f._renderService=u,f._dragScrollAmount=0,f._enabled=!0,f._workCell=new l.CellData,f._mouseDownTimeStamp=0,f._oldHasSelection=!1,f._oldSelectionStart=void 0,f._oldSelectionEnd=void 0,f._onLinuxMouseSelection=f.register(new h.EventEmitter),f._onRedrawRequest=f.register(new h.EventEmitter),f._onSelectionChange=f.register(new h.EventEmitter),f._onRequestScrollLines=f.register(new h.EventEmitter),f._mouseMoveListener=function(e){return f._onMouseMove(e)},f._mouseUpListener=function(e){return f._onMouseUp(e)},f._coreService.onUserInput((function(){f.hasSelection&&f.clearSelection()})),f._trimListener=f._bufferService.buffer.lines.onTrim((function(e){return f._onTrim(e)})),f.register(f._bufferService.buffers.onBufferActivate((function(e){return f._onBufferActivate(e)}))),f.enable(),f._model=new c.SelectionModel(f._bufferService),f._activeSelectionMode=0,f}return n(t,e),Object.defineProperty(t.prototype,"onLinuxMouseSelection",{get:function(){return this._onLinuxMouseSelection.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestRedraw",{get:function(){return this._onRedrawRequest.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onSelectionChange",{get:function(){return this._onSelectionChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestScrollLines",{get:function(){return this._onRequestScrollLines.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this._removeMouseDownListeners()},t.prototype.reset=function(){this.clearSelection()},t.prototype.disable=function(){this.clearSelection(),this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},Object.defineProperty(t.prototype,"selectionStart",{get:function(){return this._model.finalSelectionStart},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selectionEnd",{get:function(){return this._model.finalSelectionEnd},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"hasSelection",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selectionText",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";var r=this._bufferService.buffer,i=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return"";for(var n=e[1];n<=t[1];n++){var o=r.translateBufferLineToString(n,!0,e[0],t[0]);i.push(o)}}else{var s=e[1]===t[1]?t[0]:void 0;for(i.push(r.translateBufferLineToString(e[1],!0,e[0],s)),n=e[1]+1;n<=t[1]-1;n++){var c=r.lines.get(n);o=r.translateBufferLineToString(n,!0),(null==c?void 0:c.isWrapped)?i[i.length-1]+=o:i.push(o)}e[1]!==t[1]&&(c=r.lines.get(t[1]),o=r.translateBufferLineToString(t[1],!0,0,t[0]),c&&c.isWrapped?i[i.length-1]+=o:i.push(o))}return i.map((function(e){return e.replace(y," ")})).join(a.isWindows?"\r\n":"\n")},enumerable:!1,configurable:!0}),t.prototype.clearSelection=function(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()},t.prototype.refresh=function(e){var t=this;this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame((function(){return t._refresh()}))),a.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)},t.prototype._refresh=function(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})},t.prototype._isClickInSelection=function(e){var t=this._getMouseBufferCoords(e),r=this._model.finalSelectionStart,i=this._model.finalSelectionEnd;return!!(r&&i&&t)&&this._areCoordsInSelection(t,r,i)},t.prototype._areCoordsInSelection=function(e,t,r){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]},t.prototype._selectWordAtCursor=function(e,t){var r,i,n=null===(i=null===(r=this._linkifier.currentLink)||void 0===r?void 0:r.link)||void 0===i?void 0:i.range;if(n)return this._model.selectionStart=[n.start.x-1,n.start.y-1],this._model.selectionStartLength=(0,v.getRangeLength)(n,this._bufferService.cols),this._model.selectionEnd=void 0,!0;var o=this._getMouseBufferCoords(e);return!!o&&(this._selectWordAt(o,t),this._model.selectionEnd=void 0,!0)},t.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()},t.prototype.selectLines=function(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()},t.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},t.prototype._getMouseBufferCoords=function(e){var t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t},t.prototype._getMouseEventScrollAmount=function(e){var t=(0,_.getCoordsRelativeToElement)(e,this._screenElement)[1],r=this._renderService.dimensions.canvasHeight;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),(t/=50)/Math.abs(t)+Math.round(14*t))},t.prototype.shouldForceSelection=function(e){return a.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey},t.prototype.onMouseDown=function(e){if(this._mouseDownTimeStamp=e.timeStamp,(2!==e.button||!this.hasSelection)&&0===e.button){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._onIncrementalClick(e):1===e.detail?this._onSingleClick(e):2===e.detail?this._onDoubleClick(e):3===e.detail&&this._onTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}},t.prototype._addMouseDownListeners=function(){var e=this;this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=window.setInterval((function(){return e._dragScroll()}),50)},t.prototype._removeMouseDownListeners=function(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0},t.prototype._onIncrementalClick=function(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))},t.prototype._onSingleClick=function(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),this._model.selectionStart){this._model.selectionEnd=void 0;var t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}},t.prototype._onDoubleClick=function(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)},t.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))},t.prototype.shouldColumnSelect=function(e){return e.altKey&&!(a.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)},t.prototype._onMouseMove=function(e){if(e.stopImmediatePropagation(),this._model.selectionStart){var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),this._model.selectionEnd){2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));var r=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}},t.prototype._onMouseUp=function(e){var t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.getOption("altClickMovesCursor")){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){var r=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(r&&void 0!==r[0]&&void 0!==r[1]){var i=(0,d.moveToCellSequence)(r[0]-1,r[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(i,!0)}}}else this._fireEventIfSelectionChanged()},t.prototype._fireEventIfSelectionChanged=function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,r=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);r?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,r)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,r)},t.prototype._fireOnSelectionChange=function(e,t,r){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=r,this._onSelectionChange.fire()},t.prototype._onBufferActivate=function(e){var t=this;this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim((function(e){return t._onTrim(e)}))},t.prototype._convertViewportColToCharacterIndex=function(e,t){for(var r=t[0],i=0;t[0]>=i;i++){var n=e.loadCell(i,this._workCell).getChars().length;0===this._workCell.getWidth()?r--:n>1&&t[0]!==i&&(r+=n-1)}return r},t.prototype.setSelection=function(e,t,r){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=r,this.refresh()},t.prototype.rightClickSelect=function(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())},t.prototype._getWordAt=function(e,t,r,i){if(void 0===r&&(r=!0),void 0===i&&(i=!0),!(e[0]>=this._bufferService.cols)){var n=this._bufferService.buffer,o=n.lines.get(e[1]);if(o){var s=n.translateBufferLineToString(e[1],!1),a=this._convertViewportColToCharacterIndex(o,e),c=a,l=e[0]-a,h=0,u=0,f=0,_=0;if(" "===s.charAt(a)){for(;a>0&&" "===s.charAt(a-1);)a--;for(;c1&&(_+=v-1,c+=v-1);d>0&&a>0&&!this._isCharWordSeparator(o.loadCell(d-1,this._workCell));){o.loadCell(d-1,this._workCell);var g=this._workCell.getChars().length;0===this._workCell.getWidth()?(h++,d--):g>1&&(f+=g-1,a-=g-1),a--,d--}for(;p1&&(_+=y-1,c+=y-1),c++,p++}}c++;var m=a+l-h+f,S=Math.min(this._bufferService.cols,c-a+h+u-f-_);if(t||""!==s.slice(a,c).trim()){if(r&&0===m&&32!==o.getCodePoint(0)){var C=n.lines.get(e[1]-1);if(C&&o.isWrapped&&32!==C.getCodePoint(this._bufferService.cols-1)){var b=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(b){var w=this._bufferService.cols-b.start;m-=w,S+=w}}}if(i&&m+S===this._bufferService.cols&&32!==o.getCodePoint(this._bufferService.cols-1)){var L=n.lines.get(e[1]+1);if((null==L?void 0:L.isWrapped)&&32!==L.getCodePoint(0)){var E=this._getWordAt([0,e[1]+1],!1,!1,!0);E&&(S+=E.length)}}return{start:m,length:S}}}}},t.prototype._selectWordAt=function(e,t){var r=this._getWordAt(e,t);if(r){for(;r.start<0;)r.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[r.start,e[1]],this._model.selectionStartLength=r.length}},t.prototype._selectToWordAt=function(e){var t=this._getWordAt(e,!0);if(t){for(var r=e[1];t.start<0;)t.start+=this._bufferService.cols,r--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,r++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,r]}},t.prototype._isCharWordSeparator=function(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0},t.prototype._selectLineAt=function(e){var t=this._bufferService.buffer.getWrappedRangeForLine(e);this._model.selectionStart=[0,t.first],this._model.selectionEnd=[this._bufferService.cols,t.last],this._model.selectionStartLength=0},o([s(3,f.IBufferService),s(4,f.ICoreService),s(5,u.IMouseService),s(6,f.IOptionsService),s(7,u.IRenderService)],t)}(p.Disposable);t.SelectionService=m},4725:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ICharacterJoinerService=t.ISoundService=t.ISelectionService=t.IRenderService=t.IMouseService=t.ICoreBrowserService=t.ICharSizeService=void 0;var i=r(8343);t.ICharSizeService=(0,i.createDecorator)("CharSizeService"),t.ICoreBrowserService=(0,i.createDecorator)("CoreBrowserService"),t.IMouseService=(0,i.createDecorator)("MouseService"),t.IRenderService=(0,i.createDecorator)("RenderService"),t.ISelectionService=(0,i.createDecorator)("SelectionService"),t.ISoundService=(0,i.createDecorator)("SoundService"),t.ICharacterJoinerService=(0,i.createDecorator)("CharacterJoinerService")},357:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.SoundService=void 0;var o=r(2585),s=function(){function e(e){this._optionsService=e}return Object.defineProperty(e,"audioContext",{get:function(){if(!e._audioContext){var t=window.AudioContext||window.webkitAudioContext;if(!t)return console.warn("Web Audio API is not supported by this browser. Consider upgrading to the latest version"),null;e._audioContext=new t}return e._audioContext},enumerable:!1,configurable:!0}),e.prototype.playBellSound=function(){var t=e.audioContext;if(t){var r=t.createBufferSource();t.decodeAudioData(this._base64ToArrayBuffer(this._removeMimeType(this._optionsService.rawOptions.bellSound)),(function(e){r.buffer=e,r.connect(t.destination),r.start(0)}))}},e.prototype._base64ToArrayBuffer=function(e){for(var t=window.atob(e),r=t.length,i=new Uint8Array(r),n=0;n{Object.defineProperty(t,"__esModule",{value:!0}),t.CircularList=void 0;var i=r(8460),n=function(){function e(e){this._maxLength=e,this.onDeleteEmitter=new i.EventEmitter,this.onInsertEmitter=new i.EventEmitter,this.onTrimEmitter=new i.EventEmitter,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}return Object.defineProperty(e.prototype,"onDelete",{get:function(){return this.onDeleteEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onInsert",{get:function(){return this.onInsertEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"onTrim",{get:function(){return this.onTrimEmitter.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"maxLength",{get:function(){return this._maxLength},set:function(e){if(this._maxLength!==e){for(var t=new Array(e),r=0;rthis._length)for(var t=this._length;t=e;n--)this._array[this._getCyclicIndex(n+r.length)]=this._array[this._getCyclicIndex(n)];for(n=0;nthis._maxLength){var o=this._length+r.length-this._maxLength;this._startIndex+=o,this._length=this._maxLength,this.onTrimEmitter.fire(o)}else this._length+=r.length},e.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)},e.prototype.shiftElements=function(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(var i=t-1;i>=0;i--)this.set(e+i+r,this.get(e+i));var n=e+t+r-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.clone=void 0,t.clone=function e(t,r){if(void 0===r&&(r=5),"object"!=typeof t)return t;var i=Array.isArray(t)?[]:{};for(var n in t)i[n]=r<=1?t[n]:t[n]&&e(t[n],r-1);return i}},8969:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.CoreTerminal=void 0;var o=r(844),s=r(2585),a=r(4348),c=r(7866),l=r(744),h=r(7302),u=r(6975),f=r(8460),_=r(1753),d=r(3730),p=r(1480),v=r(7994),g=r(9282),y=r(5435),m=r(5981),S=!1,C=function(e){function t(t){var r=e.call(this)||this;return r._onBinary=new f.EventEmitter,r._onData=new f.EventEmitter,r._onLineFeed=new f.EventEmitter,r._onResize=new f.EventEmitter,r._onScroll=new f.EventEmitter,r._instantiationService=new a.InstantiationService,r.optionsService=new h.OptionsService(t),r._instantiationService.setService(s.IOptionsService,r.optionsService),r._bufferService=r.register(r._instantiationService.createInstance(l.BufferService)),r._instantiationService.setService(s.IBufferService,r._bufferService),r._logService=r._instantiationService.createInstance(c.LogService),r._instantiationService.setService(s.ILogService,r._logService),r.coreService=r.register(r._instantiationService.createInstance(u.CoreService,(function(){return r.scrollToBottom()}))),r._instantiationService.setService(s.ICoreService,r.coreService),r.coreMouseService=r._instantiationService.createInstance(_.CoreMouseService),r._instantiationService.setService(s.ICoreMouseService,r.coreMouseService),r._dirtyRowService=r._instantiationService.createInstance(d.DirtyRowService),r._instantiationService.setService(s.IDirtyRowService,r._dirtyRowService),r.unicodeService=r._instantiationService.createInstance(p.UnicodeService),r._instantiationService.setService(s.IUnicodeService,r.unicodeService),r._charsetService=r._instantiationService.createInstance(v.CharsetService),r._instantiationService.setService(s.ICharsetService,r._charsetService),r._inputHandler=new y.InputHandler(r._bufferService,r._charsetService,r.coreService,r._dirtyRowService,r._logService,r.optionsService,r.coreMouseService,r.unicodeService),r.register((0,f.forwardEvent)(r._inputHandler.onLineFeed,r._onLineFeed)),r.register(r._inputHandler),r.register((0,f.forwardEvent)(r._bufferService.onResize,r._onResize)),r.register((0,f.forwardEvent)(r.coreService.onData,r._onData)),r.register((0,f.forwardEvent)(r.coreService.onBinary,r._onBinary)),r.register(r.optionsService.onOptionChange((function(e){return r._updateOptions(e)}))),r.register(r._bufferService.onScroll((function(e){r._onScroll.fire({position:r._bufferService.buffer.ydisp,source:0}),r._dirtyRowService.markRangeDirty(r._bufferService.buffer.scrollTop,r._bufferService.buffer.scrollBottom)}))),r.register(r._inputHandler.onScroll((function(e){r._onScroll.fire({position:r._bufferService.buffer.ydisp,source:0}),r._dirtyRowService.markRangeDirty(r._bufferService.buffer.scrollTop,r._bufferService.buffer.scrollBottom)}))),r._writeBuffer=new m.WriteBuffer((function(e,t){return r._inputHandler.parse(e,t)})),r}return n(t,e),Object.defineProperty(t.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onData",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onScroll",{get:function(){var e=this;return this._onScrollApi||(this._onScrollApi=new f.EventEmitter,this.register(this._onScroll.event((function(t){var r;null===(r=e._onScrollApi)||void 0===r||r.fire(t.position)})))),this._onScrollApi.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cols",{get:function(){return this._bufferService.cols},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"rows",{get:function(){return this._bufferService.rows},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buffers",{get:function(){return this._bufferService.buffers},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"options",{get:function(){return this.optionsService.options},set:function(e){for(var t in e)this.optionsService.options[t]=e[t]},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){var t;this._isDisposed||(e.prototype.dispose.call(this),null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)},t.prototype.write=function(e,t){this._writeBuffer.write(e,t)},t.prototype.writeSync=function(e,t){this._logService.logLevel<=s.LogLevelEnum.WARN&&!S&&(this._logService.warn("writeSync is unreliable and will be removed soon."),S=!0),this._writeBuffer.writeSync(e,t)},t.prototype.resize=function(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,l.MINIMUM_COLS),t=Math.max(t,l.MINIMUM_ROWS),this._bufferService.resize(e,t))},t.prototype.scroll=function(e,t){void 0===t&&(t=!1),this._bufferService.scroll(e,t)},t.prototype.scrollLines=function(e,t,r){this._bufferService.scrollLines(e,t,r)},t.prototype.scrollPages=function(e){this._bufferService.scrollPages(e)},t.prototype.scrollToTop=function(){this._bufferService.scrollToTop()},t.prototype.scrollToBottom=function(){this._bufferService.scrollToBottom()},t.prototype.scrollToLine=function(e){this._bufferService.scrollToLine(e)},t.prototype.registerEscHandler=function(e,t){return this._inputHandler.registerEscHandler(e,t)},t.prototype.registerDcsHandler=function(e,t){return this._inputHandler.registerDcsHandler(e,t)},t.prototype.registerCsiHandler=function(e,t){return this._inputHandler.registerCsiHandler(e,t)},t.prototype.registerOscHandler=function(e,t){return this._inputHandler.registerOscHandler(e,t)},t.prototype._setup=function(){this.optionsService.rawOptions.windowsMode&&this._enableWindowsMode()},t.prototype.reset=function(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()},t.prototype._updateOptions=function(e){var t;switch(e){case"scrollback":this.buffers.resize(this.cols,this.rows);break;case"windowsMode":this.optionsService.rawOptions.windowsMode?this._enableWindowsMode():(null===(t=this._windowsMode)||void 0===t||t.dispose(),this._windowsMode=void 0)}},t.prototype._enableWindowsMode=function(){var e=this;if(!this._windowsMode){var t=[];t.push(this.onLineFeed(g.updateWindowsModeWrappedState.bind(null,this._bufferService))),t.push(this.registerCsiHandler({final:"H"},(function(){return(0,g.updateWindowsModeWrappedState)(e._bufferService),!1}))),this._windowsMode={dispose:function(){for(var e=0,r=t;e{Object.defineProperty(t,"__esModule",{value:!0}),t.forwardEvent=t.EventEmitter=void 0;var r=function(){function e(){this._listeners=[],this._disposed=!1}return Object.defineProperty(e.prototype,"event",{get:function(){var e=this;return this._event||(this._event=function(t){return e._listeners.push(t),{dispose:function(){if(!e._disposed)for(var r=0;r24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}!function(e){e[e.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",e[e.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"}(o=t.WindowsOptionsReportType||(t.WindowsOptionsReportType={}));var L=function(){function e(e,t,r,i){this._bufferService=e,this._coreService=t,this._logService=r,this._optionsService=i,this._data=new Uint32Array(0)}return e.prototype.hook=function(e){this._data=new Uint32Array(0)},e.prototype.put=function(e,t,r){this._data=(0,h.concat)(this._data,e.subarray(t,r))},e.prototype.unhook=function(e){if(!e)return this._data=new Uint32Array(0),!0;var t=(0,u.utf32ToString)(this._data);switch(this._data=new Uint32Array(0),t){case'"q':this._coreService.triggerDataEvent(s.C0.ESC+'P1$r0"q'+s.C0.ESC+"\\");break;case'"p':this._coreService.triggerDataEvent(s.C0.ESC+'P1$r61;1"p'+s.C0.ESC+"\\");break;case"r":var r=this._bufferService.buffer.scrollTop+1+";"+(this._bufferService.buffer.scrollBottom+1)+"r";this._coreService.triggerDataEvent(s.C0.ESC+"P1$r"+r+s.C0.ESC+"\\");break;case"m":this._coreService.triggerDataEvent(s.C0.ESC+"P1$r0m"+s.C0.ESC+"\\");break;case" q":var i={block:2,underline:4,bar:6}[this._optionsService.rawOptions.cursorStyle];i-=this._optionsService.rawOptions.cursorBlink?1:0,this._coreService.triggerDataEvent(s.C0.ESC+"P1$r"+i+" q"+s.C0.ESC+"\\");break;default:this._logService.debug("Unknown DCS $q %s",t),this._coreService.triggerDataEvent(s.C0.ESC+"P0$r"+s.C0.ESC+"\\")}return!0},e}(),E=function(e){function t(t,r,i,n,o,l,h,d,v){void 0===v&&(v=new c.EscapeSequenceParser);var g=e.call(this)||this;g._bufferService=t,g._charsetService=r,g._coreService=i,g._dirtyRowService=n,g._logService=o,g._optionsService=l,g._coreMouseService=h,g._unicodeService=d,g._parser=v,g._parseBuffer=new Uint32Array(4096),g._stringDecoder=new u.StringToUtf32,g._utf8Decoder=new u.Utf8ToUtf32,g._workCell=new p.CellData,g._windowTitle="",g._iconName="",g._windowTitleStack=[],g._iconNameStack=[],g._curAttrData=f.DEFAULT_ATTR_DATA.clone(),g._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone(),g._onRequestBell=new _.EventEmitter,g._onRequestRefreshRows=new _.EventEmitter,g._onRequestReset=new _.EventEmitter,g._onRequestSendFocus=new _.EventEmitter,g._onRequestSyncScrollBar=new _.EventEmitter,g._onRequestWindowsOptionsReport=new _.EventEmitter,g._onA11yChar=new _.EventEmitter,g._onA11yTab=new _.EventEmitter,g._onCursorMove=new _.EventEmitter,g._onLineFeed=new _.EventEmitter,g._onScroll=new _.EventEmitter,g._onTitleChange=new _.EventEmitter,g._onColor=new _.EventEmitter,g._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},g._specialColors=[256,257,258],g.register(g._parser),g._activeBuffer=g._bufferService.buffer,g.register(g._bufferService.buffers.onBufferActivate((function(e){return g._activeBuffer=e.activeBuffer}))),g._parser.setCsiHandlerFallback((function(e,t){g._logService.debug("Unknown CSI code: ",{identifier:g._parser.identToString(e),params:t.toArray()})})),g._parser.setEscHandlerFallback((function(e){g._logService.debug("Unknown ESC code: ",{identifier:g._parser.identToString(e)})})),g._parser.setExecuteHandlerFallback((function(e){g._logService.debug("Unknown EXECUTE code: ",{code:e})})),g._parser.setOscHandlerFallback((function(e,t,r){g._logService.debug("Unknown OSC code: ",{identifier:e,action:t,data:r})})),g._parser.setDcsHandlerFallback((function(e,t,r){"HOOK"===t&&(r=r.toArray()),g._logService.debug("Unknown DCS code: ",{identifier:g._parser.identToString(e),action:t,payload:r})})),g._parser.setPrintHandler((function(e,t,r){return g.print(e,t,r)})),g._parser.registerCsiHandler({final:"@"},(function(e){return g.insertChars(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"@"},(function(e){return g.scrollLeft(e)})),g._parser.registerCsiHandler({final:"A"},(function(e){return g.cursorUp(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"A"},(function(e){return g.scrollRight(e)})),g._parser.registerCsiHandler({final:"B"},(function(e){return g.cursorDown(e)})),g._parser.registerCsiHandler({final:"C"},(function(e){return g.cursorForward(e)})),g._parser.registerCsiHandler({final:"D"},(function(e){return g.cursorBackward(e)})),g._parser.registerCsiHandler({final:"E"},(function(e){return g.cursorNextLine(e)})),g._parser.registerCsiHandler({final:"F"},(function(e){return g.cursorPrecedingLine(e)})),g._parser.registerCsiHandler({final:"G"},(function(e){return g.cursorCharAbsolute(e)})),g._parser.registerCsiHandler({final:"H"},(function(e){return g.cursorPosition(e)})),g._parser.registerCsiHandler({final:"I"},(function(e){return g.cursorForwardTab(e)})),g._parser.registerCsiHandler({final:"J"},(function(e){return g.eraseInDisplay(e)})),g._parser.registerCsiHandler({prefix:"?",final:"J"},(function(e){return g.eraseInDisplay(e)})),g._parser.registerCsiHandler({final:"K"},(function(e){return g.eraseInLine(e)})),g._parser.registerCsiHandler({prefix:"?",final:"K"},(function(e){return g.eraseInLine(e)})),g._parser.registerCsiHandler({final:"L"},(function(e){return g.insertLines(e)})),g._parser.registerCsiHandler({final:"M"},(function(e){return g.deleteLines(e)})),g._parser.registerCsiHandler({final:"P"},(function(e){return g.deleteChars(e)})),g._parser.registerCsiHandler({final:"S"},(function(e){return g.scrollUp(e)})),g._parser.registerCsiHandler({final:"T"},(function(e){return g.scrollDown(e)})),g._parser.registerCsiHandler({final:"X"},(function(e){return g.eraseChars(e)})),g._parser.registerCsiHandler({final:"Z"},(function(e){return g.cursorBackwardTab(e)})),g._parser.registerCsiHandler({final:"`"},(function(e){return g.charPosAbsolute(e)})),g._parser.registerCsiHandler({final:"a"},(function(e){return g.hPositionRelative(e)})),g._parser.registerCsiHandler({final:"b"},(function(e){return g.repeatPrecedingCharacter(e)})),g._parser.registerCsiHandler({final:"c"},(function(e){return g.sendDeviceAttributesPrimary(e)})),g._parser.registerCsiHandler({prefix:">",final:"c"},(function(e){return g.sendDeviceAttributesSecondary(e)})),g._parser.registerCsiHandler({final:"d"},(function(e){return g.linePosAbsolute(e)})),g._parser.registerCsiHandler({final:"e"},(function(e){return g.vPositionRelative(e)})),g._parser.registerCsiHandler({final:"f"},(function(e){return g.hVPosition(e)})),g._parser.registerCsiHandler({final:"g"},(function(e){return g.tabClear(e)})),g._parser.registerCsiHandler({final:"h"},(function(e){return g.setMode(e)})),g._parser.registerCsiHandler({prefix:"?",final:"h"},(function(e){return g.setModePrivate(e)})),g._parser.registerCsiHandler({final:"l"},(function(e){return g.resetMode(e)})),g._parser.registerCsiHandler({prefix:"?",final:"l"},(function(e){return g.resetModePrivate(e)})),g._parser.registerCsiHandler({final:"m"},(function(e){return g.charAttributes(e)})),g._parser.registerCsiHandler({final:"n"},(function(e){return g.deviceStatus(e)})),g._parser.registerCsiHandler({prefix:"?",final:"n"},(function(e){return g.deviceStatusPrivate(e)})),g._parser.registerCsiHandler({intermediates:"!",final:"p"},(function(e){return g.softReset(e)})),g._parser.registerCsiHandler({intermediates:" ",final:"q"},(function(e){return g.setCursorStyle(e)})),g._parser.registerCsiHandler({final:"r"},(function(e){return g.setScrollRegion(e)})),g._parser.registerCsiHandler({final:"s"},(function(e){return g.saveCursor(e)})),g._parser.registerCsiHandler({final:"t"},(function(e){return g.windowOptions(e)})),g._parser.registerCsiHandler({final:"u"},(function(e){return g.restoreCursor(e)})),g._parser.registerCsiHandler({intermediates:"'",final:"}"},(function(e){return g.insertColumns(e)})),g._parser.registerCsiHandler({intermediates:"'",final:"~"},(function(e){return g.deleteColumns(e)})),g._parser.setExecuteHandler(s.C0.BEL,(function(){return g.bell()})),g._parser.setExecuteHandler(s.C0.LF,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.VT,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.FF,(function(){return g.lineFeed()})),g._parser.setExecuteHandler(s.C0.CR,(function(){return g.carriageReturn()})),g._parser.setExecuteHandler(s.C0.BS,(function(){return g.backspace()})),g._parser.setExecuteHandler(s.C0.HT,(function(){return g.tab()})),g._parser.setExecuteHandler(s.C0.SO,(function(){return g.shiftOut()})),g._parser.setExecuteHandler(s.C0.SI,(function(){return g.shiftIn()})),g._parser.setExecuteHandler(s.C1.IND,(function(){return g.index()})),g._parser.setExecuteHandler(s.C1.NEL,(function(){return g.nextLine()})),g._parser.setExecuteHandler(s.C1.HTS,(function(){return g.tabSet()})),g._parser.registerOscHandler(0,new y.OscHandler((function(e){return g.setTitle(e),g.setIconName(e),!0}))),g._parser.registerOscHandler(1,new y.OscHandler((function(e){return g.setIconName(e)}))),g._parser.registerOscHandler(2,new y.OscHandler((function(e){return g.setTitle(e)}))),g._parser.registerOscHandler(4,new y.OscHandler((function(e){return g.setOrReportIndexedColor(e)}))),g._parser.registerOscHandler(10,new y.OscHandler((function(e){return g.setOrReportFgColor(e)}))),g._parser.registerOscHandler(11,new y.OscHandler((function(e){return g.setOrReportBgColor(e)}))),g._parser.registerOscHandler(12,new y.OscHandler((function(e){return g.setOrReportCursorColor(e)}))),g._parser.registerOscHandler(104,new y.OscHandler((function(e){return g.restoreIndexedColor(e)}))),g._parser.registerOscHandler(110,new y.OscHandler((function(e){return g.restoreFgColor(e)}))),g._parser.registerOscHandler(111,new y.OscHandler((function(e){return g.restoreBgColor(e)}))),g._parser.registerOscHandler(112,new y.OscHandler((function(e){return g.restoreCursorColor(e)}))),g._parser.registerEscHandler({final:"7"},(function(){return g.saveCursor()})),g._parser.registerEscHandler({final:"8"},(function(){return g.restoreCursor()})),g._parser.registerEscHandler({final:"D"},(function(){return g.index()})),g._parser.registerEscHandler({final:"E"},(function(){return g.nextLine()})),g._parser.registerEscHandler({final:"H"},(function(){return g.tabSet()})),g._parser.registerEscHandler({final:"M"},(function(){return g.reverseIndex()})),g._parser.registerEscHandler({final:"="},(function(){return g.keypadApplicationMode()})),g._parser.registerEscHandler({final:">"},(function(){return g.keypadNumericMode()})),g._parser.registerEscHandler({final:"c"},(function(){return g.fullReset()})),g._parser.registerEscHandler({final:"n"},(function(){return g.setgLevel(2)})),g._parser.registerEscHandler({final:"o"},(function(){return g.setgLevel(3)})),g._parser.registerEscHandler({final:"|"},(function(){return g.setgLevel(3)})),g._parser.registerEscHandler({final:"}"},(function(){return g.setgLevel(2)})),g._parser.registerEscHandler({final:"~"},(function(){return g.setgLevel(1)})),g._parser.registerEscHandler({intermediates:"%",final:"@"},(function(){return g.selectDefaultCharset()})),g._parser.registerEscHandler({intermediates:"%",final:"G"},(function(){return g.selectDefaultCharset()}));var m=function(e){S._parser.registerEscHandler({intermediates:"(",final:e},(function(){return g.selectCharset("("+e)})),S._parser.registerEscHandler({intermediates:")",final:e},(function(){return g.selectCharset(")"+e)})),S._parser.registerEscHandler({intermediates:"*",final:e},(function(){return g.selectCharset("*"+e)})),S._parser.registerEscHandler({intermediates:"+",final:e},(function(){return g.selectCharset("+"+e)})),S._parser.registerEscHandler({intermediates:"-",final:e},(function(){return g.selectCharset("-"+e)})),S._parser.registerEscHandler({intermediates:".",final:e},(function(){return g.selectCharset("."+e)})),S._parser.registerEscHandler({intermediates:"/",final:e},(function(){return g.selectCharset("/"+e)}))},S=this;for(var C in a.CHARSETS)m(C);return g._parser.registerEscHandler({intermediates:"#",final:"8"},(function(){return g.screenAlignmentPattern()})),g._parser.setErrorHandler((function(e){return g._logService.error("Parsing error: ",e),e})),g._parser.registerDcsHandler({intermediates:"$",final:"q"},new L(g._bufferService,g._coreService,g._logService,g._optionsService)),g}return n(t,e),Object.defineProperty(t.prototype,"onRequestBell",{get:function(){return this._onRequestBell.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestRefreshRows",{get:function(){return this._onRequestRefreshRows.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestReset",{get:function(){return this._onRequestReset.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestSendFocus",{get:function(){return this._onRequestSendFocus.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestSyncScrollBar",{get:function(){return this._onRequestSyncScrollBar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onRequestWindowsOptionsReport",{get:function(){return this._onRequestWindowsOptionsReport.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yChar",{get:function(){return this._onA11yChar.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onA11yTab",{get:function(){return this._onA11yTab.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onCursorMove",{get:function(){return this._onCursorMove.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onLineFeed",{get:function(){return this._onLineFeed.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onTitleChange",{get:function(){return this._onTitleChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onColor",{get:function(){return this._onColor.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){e.prototype.dispose.call(this)},t.prototype._preserveStack=function(e,t,r,i){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=r,this._parseStack.position=i},t.prototype._logSlowResolvingAsync=function(e){this._logService.logLevel<=g.LogLevelEnum.WARN&&Promise.race([e,new Promise((function(e,t){return setTimeout((function(){return t("#SLOW_TIMEOUT")}),5e3)}))]).catch((function(e){if("#SLOW_TIMEOUT"!==e)throw e;console.warn("async parser handler taking longer than 5000 ms")}))},t.prototype.parse=function(e,t){var r,i=this._activeBuffer.x,n=this._activeBuffer.y,o=0,s=this._parseStack.paused;if(s){if(r=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(r),r;i=this._parseStack.cursorStartX,n=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>b&&(o=this._parseStack.position+b)}if(this._logService.logLevel<=g.LogLevelEnum.DEBUG&&this._logService.debug("parsing data"+("string"==typeof e?' "'+e+'"':""),"string"==typeof e?e.split("").map((function(e){return e.charCodeAt(0)})):e),this._parseBuffer.lengthb)for(var a=o;a0&&2===f.getWidth(this._activeBuffer.x-1)&&f.setCellFromCodePoint(this._activeBuffer.x-1,0,1,h.fg,h.bg,h.extended);for(var _=t;_=a)if(c){for(;this._activeBuffer.x=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)}else if(this._activeBuffer.x=a-1,2===n)continue;if(l&&(f.insertCells(this._activeBuffer.x,n,this._activeBuffer.getNullCell(h),h),2===f.getWidth(a-1)&&f.setCellFromCodePoint(a-1,d.NULL_CELL_CODE,d.NULL_CELL_WIDTH,h.fg,h.bg,h.extended)),f.setCellFromCodePoint(this._activeBuffer.x++,i,n,h.fg,h.bg,h.extended),n>0)for(;--n;)f.setCellFromCodePoint(this._activeBuffer.x++,0,0,h.fg,h.bg,h.extended)}else f.getWidth(this._activeBuffer.x-1)?f.addCodepointToCell(this._activeBuffer.x-1,i):f.addCodepointToCell(this._activeBuffer.x-2,i)}r-t>0&&(f.loadCell(this._activeBuffer.x-1,this._workCell),2===this._workCell.getWidth()||this._workCell.getCode()>65535?this._parser.precedingCodepoint=0:this._workCell.isCombined()?this._parser.precedingCodepoint=this._workCell.getChars().charCodeAt(0):this._parser.precedingCodepoint=this._workCell.content),this._activeBuffer.x0&&0===f.getWidth(this._activeBuffer.x)&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodePoint(this._activeBuffer.x,0,1,h.fg,h.bg,h.extended),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype.registerCsiHandler=function(e,t){var r=this;return"t"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,(function(e){return!w(e.params[0],r._optionsService.rawOptions.windowOptions)||t(e)}))},t.prototype.registerDcsHandler=function(e,t){return this._parser.registerDcsHandler(e,new m.DcsHandler(t))},t.prototype.registerEscHandler=function(e,t){return this._parser.registerEscHandler(e,t)},t.prototype.registerOscHandler=function(e,t){return this._parser.registerOscHandler(e,new y.OscHandler(t))},t.prototype.bell=function(){return this._onRequestBell.fire(),!0},t.prototype.lineFeed=function(){return this._dirtyRowService.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowService.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0},t.prototype.carriageReturn=function(){return this._activeBuffer.x=0,!0},t.prototype.backspace=function(){var e;if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&(null===(e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y))||void 0===e?void 0:e.isWrapped)){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);t.hasWidth(this._activeBuffer.x)&&!t.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0},t.prototype.tab=function(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;var e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0},t.prototype.shiftOut=function(){return this._charsetService.setgLevel(1),!0},t.prototype.shiftIn=function(){return this._charsetService.setgLevel(0),!0},t.prototype._restrictCursor=function(e){void 0===e&&(e=this._bufferService.cols-1),this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype._setCursor=function(e,t){this._dirtyRowService.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowService.markDirty(this._activeBuffer.y)},t.prototype._moveCursor=function(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)},t.prototype.cursorUp=function(e){var t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0},t.prototype.cursorDown=function(e){var t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0},t.prototype.cursorForward=function(e){return this._moveCursor(e.params[0]||1,0),!0},t.prototype.cursorBackward=function(e){return this._moveCursor(-(e.params[0]||1),0),!0},t.prototype.cursorNextLine=function(e){return this.cursorDown(e),this._activeBuffer.x=0,!0},t.prototype.cursorPrecedingLine=function(e){return this.cursorUp(e),this._activeBuffer.x=0,!0},t.prototype.cursorCharAbsolute=function(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0},t.prototype.cursorPosition=function(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0},t.prototype.charPosAbsolute=function(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0},t.prototype.hPositionRelative=function(e){return this._moveCursor(e.params[0]||1,0),!0},t.prototype.linePosAbsolute=function(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0},t.prototype.vPositionRelative=function(e){return this._moveCursor(0,e.params[0]||1),!0},t.prototype.hVPosition=function(e){return this.cursorPosition(e),!0},t.prototype.tabClear=function(e){var t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0},t.prototype.cursorForwardTab=function(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;for(var t=e.params[0]||1;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0},t.prototype.cursorBackwardTab=function(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;for(var t=e.params[0]||1;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0},t.prototype._eraseInBufferLine=function(e,t,r,i){void 0===i&&(i=!1);var n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n.replaceCells(t,r,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData()),i&&(n.isWrapped=!1)},t.prototype._resetBufferLine=function(e){var t=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);t.fill(this._activeBuffer.getNullCell(this._eraseAttrData())),t.isWrapped=!1},t.prototype.eraseInDisplay=function(e){var t;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(t=this._activeBuffer.y,this._dirtyRowService.markDirty(t),this._eraseInBufferLine(t++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x);t=this._bufferService.cols&&(this._activeBuffer.lines.get(t+1).isWrapped=!1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 2:for(t=this._bufferService.rows,this._dirtyRowService.markDirty(t-1);t--;)this._resetBufferLine(t);this._dirtyRowService.markDirty(0);break;case 3:var r=this._activeBuffer.lines.length-this._bufferService.rows;r>0&&(this._activeBuffer.lines.trimStart(r),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-r,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-r,0),this._onScroll.fire(0))}return!0},t.prototype.eraseInLine=function(e){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0)}return this._dirtyRowService.markDirty(this._activeBuffer.y),!0},t.prototype.insertLines=function(e){this._restrictCursor();var t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(s.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(s.C0.ESC+"[?6c")),!0},t.prototype.sendDeviceAttributesSecondary=function(e){return e.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(s.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(s.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(e.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(s.C0.ESC+"[>83;40003;0c")),!0},t.prototype._is=function(e){return 0===(this._optionsService.rawOptions.termName+"").indexOf(e)},t.prototype.setMode=function(e){for(var t=0;t=2||2===i[1]&&o+n>=5)break;i[1]&&(n=1)}while(++o+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()},t.prototype.charAttributes=function(e){if(1===e.length&&0===e.params[0])return this._curAttrData.fg=f.DEFAULT_ATTR_DATA.fg,this._curAttrData.bg=f.DEFAULT_ATTR_DATA.bg,!0;for(var t,r=e.length,i=this._curAttrData,n=0;n=30&&t<=37?(i.fg&=-50331904,i.fg|=16777216|t-30):t>=40&&t<=47?(i.bg&=-50331904,i.bg|=16777216|t-40):t>=90&&t<=97?(i.fg&=-50331904,i.fg|=16777224|t-90):t>=100&&t<=107?(i.bg&=-50331904,i.bg|=16777224|t-100):0===t?(i.fg=f.DEFAULT_ATTR_DATA.fg,i.bg=f.DEFAULT_ATTR_DATA.bg):1===t?i.fg|=134217728:3===t?i.bg|=67108864:4===t?(i.fg|=268435456,this._processUnderline(e.hasSubParams(n)?e.getSubParams(n)[0]:1,i)):5===t?i.fg|=536870912:7===t?i.fg|=67108864:8===t?i.fg|=1073741824:9===t?i.fg|=2147483648:2===t?i.bg|=134217728:21===t?this._processUnderline(2,i):22===t?(i.fg&=-134217729,i.bg&=-134217729):23===t?i.bg&=-67108865:24===t?i.fg&=-268435457:25===t?i.fg&=-536870913:27===t?i.fg&=-67108865:28===t?i.fg&=-1073741825:29===t?i.fg&=2147483647:39===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg):49===t?(i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):38===t||48===t||58===t?n+=this._extractColor(e,n,i):59===t?(i.extended=i.extended.clone(),i.extended.underlineColor=-1,i.updateExtended()):100===t?(i.fg&=-67108864,i.fg|=16777215&f.DEFAULT_ATTR_DATA.fg,i.bg&=-67108864,i.bg|=16777215&f.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",t);return!0},t.prototype.deviceStatus=function(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(s.C0.ESC+"[0n");break;case 6:var t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+"["+t+";"+r+"R")}return!0},t.prototype.deviceStatusPrivate=function(e){if(6===e.params[0]){var t=this._activeBuffer.y+1,r=this._activeBuffer.x+1;this._coreService.triggerDataEvent(s.C0.ESC+"[?"+t+";"+r+"R")}return!0},t.prototype.softReset=function(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0},t.prototype.setCursorStyle=function(e){var t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline";break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}var r=t%2==1;return this._optionsService.options.cursorBlink=r,!0},t.prototype.setScrollRegion=function(e){var t,r=e.params[0]||1;return(e.length<2||(t=e.params[1])>this._bufferService.rows||0===t)&&(t=this._bufferService.rows),t>r&&(this._activeBuffer.scrollTop=r-1,this._activeBuffer.scrollBottom=t-1,this._setCursor(0,0)),!0},t.prototype.windowOptions=function(e){if(!w(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;var t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(o.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(o.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(s.C0.ESC+"[8;"+this._bufferService.rows+";"+this._bufferService.cols+"t");break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0},t.prototype.saveCursor=function(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0},t.prototype.restoreCursor=function(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0},t.prototype.setTitle=function(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0},t.prototype.setIconName=function(e){return this._iconName=e,!0},t.prototype.setOrReportIndexedColor=function(e){for(var t=[],r=e.split(";");r.length>1;){var i=r.shift(),n=r.shift();if(/^\d+$/.exec(i)){var o=parseInt(i);if(0<=o&&o<256)if("?"===n)t.push({type:0,index:o});else{var s=(0,S.parseColor)(n);s&&t.push({type:1,index:o,color:s})}}}return t.length&&this._onColor.fire(t),!0},t.prototype._setOrReportSpecialColor=function(e,t){for(var r=e.split(";"),i=0;i=this._specialColors.length);++i,++t)if("?"===r[i])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{var n=(0,S.parseColor)(r[i]);n&&this._onColor.fire([{type:1,index:this._specialColors[t],color:n}])}return!0},t.prototype.setOrReportFgColor=function(e){return this._setOrReportSpecialColor(e,0)},t.prototype.setOrReportBgColor=function(e){return this._setOrReportSpecialColor(e,1)},t.prototype.setOrReportCursorColor=function(e){return this._setOrReportSpecialColor(e,2)},t.prototype.restoreIndexedColor=function(e){if(!e)return this._onColor.fire([{type:2}]),!0;for(var t=[],r=e.split(";"),i=0;i=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0},t.prototype.tabSet=function(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0},t.prototype.reverseIndex=function(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){var e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowService.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0},t.prototype.fullReset=function(){return this._parser.reset(),this._onRequestReset.fire(),!0},t.prototype.reset=function(){this._curAttrData=f.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=f.DEFAULT_ATTR_DATA.clone()},t.prototype._eraseAttrData=function(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal},t.prototype.setgLevel=function(e){return this._charsetService.setgLevel(e),!0},t.prototype.screenAlignmentPattern=function(){var e=new p.CellData;e.content=1<<22|"E".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(var t=0;t{Object.defineProperty(t,"__esModule",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.Disposable=void 0;var r=function(){function e(){this._disposables=[],this._isDisposed=!1}return e.prototype.dispose=function(){this._isDisposed=!0;for(var e=0,t=this._disposables;e{Object.defineProperty(t,"__esModule",{value:!0}),t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.isSafari=t.isLegacyEdge=t.isFirefox=void 0;var r="undefined"==typeof navigator,i=r?"node":navigator.userAgent,n=r?"node":navigator.platform;t.isFirefox=i.includes("Firefox"),t.isLegacyEdge=i.includes("Edge"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(n),t.isIpad="iPad"===n,t.isIphone="iPhone"===n,t.isWindows=["Windows","Win16","Win32","WinCE"].includes(n),t.isLinux=n.indexOf("Linux")>=0},8273:(e,t)=>{function r(e,t,r,i){if(void 0===r&&(r=0),void 0===i&&(i=e.length),r>=e.length)return e;r=(e.length+r)%e.length,i=i>=e.length?e.length:(e.length+i)%e.length;for(var n=r;n{Object.defineProperty(t,"__esModule",{value:!0}),t.updateWindowsModeWrappedState=void 0;var i=r(643);t.updateWindowsModeWrappedState=function(e){var t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),r=null==t?void 0:t.get(e.cols-1),n=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);n&&r&&(n.isWrapped=r[i.CHAR_DATA_CODE_INDEX]!==i.NULL_CELL_CODE&&r[i.CHAR_DATA_CODE_INDEX]!==i.WHITESPACE_CELL_CODE)}},3734:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;var r=function(){function e(){this.fg=0,this.bg=0,this.extended=new i}return e.toColorRGB=function(e){return[e>>>16&255,e>>>8&255,255&e]},e.fromColorRGB=function(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]},e.prototype.clone=function(){var t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t},e.prototype.isInverse=function(){return 67108864&this.fg},e.prototype.isBold=function(){return 134217728&this.fg},e.prototype.isUnderline=function(){return 268435456&this.fg},e.prototype.isBlink=function(){return 536870912&this.fg},e.prototype.isInvisible=function(){return 1073741824&this.fg},e.prototype.isItalic=function(){return 67108864&this.bg},e.prototype.isDim=function(){return 134217728&this.bg},e.prototype.isStrikethrough=function(){return 2147483648&this.fg},e.prototype.getFgColorMode=function(){return 50331648&this.fg},e.prototype.getBgColorMode=function(){return 50331648&this.bg},e.prototype.isFgRGB=function(){return 50331648==(50331648&this.fg)},e.prototype.isBgRGB=function(){return 50331648==(50331648&this.bg)},e.prototype.isFgPalette=function(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)},e.prototype.isBgPalette=function(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)},e.prototype.isFgDefault=function(){return 0==(50331648&this.fg)},e.prototype.isBgDefault=function(){return 0==(50331648&this.bg)},e.prototype.isAttributeDefault=function(){return 0===this.fg&&0===this.bg},e.prototype.getFgColor=function(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}},e.prototype.getBgColor=function(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}},e.prototype.hasExtendedAttrs=function(){return 268435456&this.bg},e.prototype.updateExtended=function(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456},e.prototype.getUnderlineColor=function(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()},e.prototype.getUnderlineColorMode=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()},e.prototype.isUnderlineColorRGB=function(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()},e.prototype.isUnderlineColorPalette=function(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()},e.prototype.isUnderlineColorDefault=function(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()},e.prototype.getUnderlineStyle=function(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0},e}();t.AttributeData=r;var i=function(){function e(e,t){void 0===e&&(e=0),void 0===t&&(t=-1),this.underlineStyle=e,this.underlineColor=t}return e.prototype.clone=function(){return new e(this.underlineStyle,this.underlineColor)},e.prototype.isEmpty=function(){return 0===this.underlineStyle},e}();t.ExtendedAttrs=i},9092:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferStringIterator=t.Buffer=t.MAX_BUFFER_SIZE=void 0;var i=r(6349),n=r(8437),o=r(511),s=r(643),a=r(4634),c=r(4863),l=r(7116),h=r(3734);t.MAX_BUFFER_SIZE=4294967295;var u=function(){function e(e,t,r){this._hasScrollback=e,this._optionsService=t,this._bufferService=r,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.savedY=0,this.savedX=0,this.savedCurAttrData=n.DEFAULT_ATTR_DATA.clone(),this.savedCharset=l.DEFAULT_CHARSET,this.markers=[],this._nullCell=o.CellData.fromCharData([0,s.NULL_CELL_CHAR,s.NULL_CELL_WIDTH,s.NULL_CELL_CODE]),this._whitespaceCell=o.CellData.fromCharData([0,s.WHITESPACE_CELL_CHAR,s.WHITESPACE_CELL_WIDTH,s.WHITESPACE_CELL_CODE]),this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}return e.prototype.getNullCell=function(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new h.ExtendedAttrs),this._nullCell},e.prototype.getWhitespaceCell=function(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new h.ExtendedAttrs),this._whitespaceCell},e.prototype.getBlankLine=function(e,t){return new n.BufferLine(this._bufferService.cols,this.getNullCell(e),t)},Object.defineProperty(e.prototype,"hasScrollback",{get:function(){return this._hasScrollback&&this.lines.maxLength>this._rows},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isCursorInViewport",{get:function(){var e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:r},e.prototype.fillViewportRows=function(e){if(0===this.lines.length){void 0===e&&(e=n.DEFAULT_ATTR_DATA);for(var t=this._rows;t--;)this.lines.push(this.getBlankLine(e))}},e.prototype.clear=function(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new i.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()},e.prototype.resize=function(e,t){var r=this.getNullCell(n.DEFAULT_ATTR_DATA),i=this._getCorrectBufferLength(t);if(i>this.lines.maxLength&&(this.lines.maxLength=i),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+s+1?(this.ybase--,s++,this.ydisp>0&&this.ydisp--):this.lines.push(new n.BufferLine(e,r)));else for(a=this._rows;a>t;a--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(i0&&(this.lines.trimStart(c),this.ybase=Math.max(this.ybase-c,0),this.ydisp=Math.max(this.ydisp-c,0),this.savedY=Math.max(this.savedY-c,0)),this.lines.maxLength=i}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),s&&(this.y+=s),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(o=0;othis._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))},e.prototype._reflowLarger=function(e,t){var r=(0,a.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(n.DEFAULT_ATTR_DATA));if(r.length>0){var i=(0,a.reflowLargerCreateNewLayout)(this.lines,r);(0,a.reflowLargerApplyNewLayout)(this.lines,i.layout),this._reflowLargerAdjustViewport(e,t,i.countRemoved)}},e.prototype._reflowLargerAdjustViewport=function(e,t,r){for(var i=this.getNullCell(n.DEFAULT_ATTR_DATA),o=r;o-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;s--){var c=this.lines.get(s);if(!(!c||!c.isWrapped&&c.getTrimmedLength()<=e)){for(var l=[c];c.isWrapped&&s>0;)c=this.lines.get(--s),l.unshift(c);var h=this.ybase+this.y;if(!(h>=s&&h0&&(i.push({start:s+l.length+o,newLines:p}),o+=p.length),l.push.apply(l,p);var y=_.length-1,m=_[y];0===m&&(m=_[--y]);for(var S=l.length-d-1,C=f;S>=0;){var b=Math.min(C,m);if(void 0===l[y])break;if(l[y].copyCellsFrom(l[S],C-b,m-b,b,!0),0==(m-=b)&&(m=_[--y]),0==(C-=b)){S--;var w=Math.max(S,0);C=(0,a.getWrappedLineTrimmedLength)(l,w,this._cols)}}for(v=0;v0;)0===this.ybase?this.y0){var E=[],x=[];for(v=0;v=0;v--)if(R&&R.start>k+O){for(var T=R.newLines.length-1;T>=0;T--)this.lines.set(v--,R.newLines[T]);v++,E.push({index:k+1,amount:R.newLines.length}),O+=R.newLines.length,R=i[++A]}else this.lines.set(v,x[k--]);var B=0;for(v=E.length-1;v>=0;v--)E[v].index+=B,this.lines.onInsertEmitter.fire(E[v]),B+=E[v].amount;var D=Math.max(0,M+o-this.lines.maxLength);D>0&&this.lines.onTrimEmitter.fire(D)}},e.prototype.stringIndexToBufferIndex=function(e,t,r){for(void 0===r&&(r=!1);t;){var i=this.lines.get(e);if(!i)return[-1,-1];for(var n=r?i.getTrimmedLength():i.length,o=0;o0&&this.lines.get(t).isWrapped;)t--;for(;r+10;);return e>=this._cols?this._cols-1:e<0?0:e},e.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e},e.prototype.addMarker=function(e){var t=this,r=new c.Marker(e);return this.markers.push(r),r.register(this.lines.onTrim((function(e){r.line-=e,r.line<0&&r.dispose()}))),r.register(this.lines.onInsert((function(e){r.line>=e.index&&(r.line+=e.amount)}))),r.register(this.lines.onDelete((function(e){r.line>=e.index&&r.linee.index&&(r.line-=e.amount)}))),r.register(r.onDispose((function(){return t._removeMarker(r)}))),r},e.prototype._removeMarker=function(e){this.markers.splice(this.markers.indexOf(e),1)},e.prototype.iterator=function(e,t,r,i,n){return new f(this,e,t,r,i,n)},e}();t.Buffer=u;var f=function(){function e(e,t,r,i,n,o){void 0===r&&(r=0),void 0===i&&(i=e.lines.length),void 0===n&&(n=0),void 0===o&&(o=0),this._buffer=e,this._trimRight=t,this._startIndex=r,this._endIndex=i,this._startOverscan=n,this._endOverscan=o,this._startIndex<0&&(this._startIndex=0),this._endIndex>this._buffer.lines.length&&(this._endIndex=this._buffer.lines.length),this._current=this._startIndex}return e.prototype.hasNext=function(){return this._currentthis._endIndex+this._endOverscan&&(e.last=this._endIndex+this._endOverscan),e.first=Math.max(e.first,0),e.last=Math.min(e.last,this._buffer.lines.length);for(var t="",r=e.first;r<=e.last;++r)t+=this._buffer.translateBufferLineToString(r,this._trimRight);return this._current=e.last+1,{range:e,content:t}},e}();t.BufferStringIterator=f},8437:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;var i=r(482),n=r(643),o=r(511),s=r(3734);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);var a=function(){function e(e,t,r){void 0===r&&(r=!1),this.isWrapped=r,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);for(var i=t||o.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]),s=0;s>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):r]},e.prototype.set=function(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22},e.prototype.getWidth=function(e){return this._data[3*e+0]>>22},e.prototype.hasWidth=function(e){return 12582912&this._data[3*e+0]},e.prototype.getFg=function(e){return this._data[3*e+1]},e.prototype.getBg=function(e){return this._data[3*e+2]},e.prototype.hasContent=function(e){return 4194303&this._data[3*e+0]},e.prototype.getCodePoint=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t},e.prototype.isCombined=function(e){return 2097152&this._data[3*e+0]},e.prototype.getString=function(e){var t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,i.stringFromCodePoint)(2097151&t):""},e.prototype.loadCell=function(e,t){var r=3*e;return t.content=this._data[r+0],t.fg=this._data[r+1],t.bg=this._data[r+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t},e.prototype.setCell=function(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg},e.prototype.setCellFromCodePoint=function(e,t,r,i,n,o){268435456&n&&(this._extendedAttrs[e]=o),this._data[3*e+0]=t|r<<22,this._data[3*e+1]=i,this._data[3*e+2]=n},e.prototype.addCodepointToCell=function(e,t){var r=this._data[3*e+0];2097152&r?this._combined[e]+=(0,i.stringFromCodePoint)(t):(2097151&r?(this._combined[e]=(0,i.stringFromCodePoint)(2097151&r)+(0,i.stringFromCodePoint)(t),r&=-2097152,r|=2097152):r=t|1<<22,this._data[3*e+0]=r)},e.prototype.insertCells=function(e,t,r,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodePoint(e-1,0,1,(null==i?void 0:i.fg)||0,(null==i?void 0:i.bg)||0,(null==i?void 0:i.extended)||new s.ExtendedAttrs),t=0;--a)this.setCell(e+t+a,this.loadCell(e+a,n));for(a=0;athis.length){var r=new Uint32Array(3*e);this.length&&(3*e=e&&delete this._combined[o]}}else this._data=new Uint32Array(0),this._combined={};this.length=e}},e.prototype.fill=function(e){this._combined={},this._extendedAttrs={};for(var t=0;t=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0},e.prototype.copyCellsFrom=function(e,t,r,i,n){var o=e._data;if(n)for(var s=i-1;s>=0;s--)for(var a=0;a<3;a++)this._data[3*(r+s)+a]=o[3*(t+s)+a];else for(s=0;s=t&&(this._combined[l-t+r]=e._combined[l])}},e.prototype.translateToString=function(e,t,r){void 0===e&&(e=!1),void 0===t&&(t=0),void 0===r&&(r=this.length),e&&(r=Math.min(r,this.getTrimmedLength()));for(var o="";t>22||1}return o},e}();t.BufferLine=a},4841:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getRangeLength=void 0,t.getRangeLength=function(e,t){if(e.start.y>e.end.y)throw new Error("Buffer range end ("+e.end.x+", "+e.end.y+") cannot be before start ("+e.start.x+", "+e.start.y+")");return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},4634:(e,t)=>{function r(e,t,r){if(t===e.length-1)return e[t].getTrimmedLength();var i=!e[t].hasContent(r-1)&&1===e[t].getWidth(r-1),n=2===e[t+1].getWidth(0);return i&&n?r-1:r}Object.defineProperty(t,"__esModule",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,i,n,o){for(var s=[],a=0;a=a&&n0&&(S>u||0===h[S].getTrimmedLength());S--)m++;m>0&&(s.push(a+h.length-m),s.push(m)),a+=h.length-1}}}return s},t.reflowLargerCreateNewLayout=function(e,t){for(var r=[],i=0,n=t[i],o=0,s=0;sl&&(s-=l,a++);var h=2===e[a].getWidth(s-1);h&&s--;var u=h?i-1:i;n.push(u),c+=u}return n},t.getWrappedLineTrimmedLength=r},5295:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.BufferSet=void 0;var o=r(9092),s=r(8460),a=function(e){function t(t,r){var i=e.call(this)||this;return i._optionsService=t,i._bufferService=r,i._onBufferActivate=i.register(new s.EventEmitter),i.reset(),i}return n(t,e),Object.defineProperty(t.prototype,"onBufferActivate",{get:function(){return this._onBufferActivate.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this._normal=new o.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new o.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()},Object.defineProperty(t.prototype,"alt",{get:function(){return this._alt},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"active",{get:function(){return this._activeBuffer},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"normal",{get:function(){return this._normal},enumerable:!1,configurable:!0}),t.prototype.activateNormalBuffer=function(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))},t.prototype.activateAltBuffer=function(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))},t.prototype.resize=function(e,t){this._normal.resize(e,t),this._alt.resize(e,t)},t.prototype.setupTabStops=function(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)},t}(r(844).Disposable);t.BufferSet=a},511:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.CellData=void 0;var o=r(482),s=r(643),a=r(3734),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.content=0,t.fg=0,t.bg=0,t.extended=new a.ExtendedAttrs,t.combinedData="",t}return n(t,e),t.fromCharData=function(e){var r=new t;return r.setFromCharData(e),r},t.prototype.isCombined=function(){return 2097152&this.content},t.prototype.getWidth=function(){return this.content>>22},t.prototype.getChars=function(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,o.stringFromCodePoint)(2097151&this.content):""},t.prototype.getCode=function(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content},t.prototype.setFromCharData=function(e){this.fg=e[s.CHAR_DATA_ATTR_INDEX],this.bg=0;var t=!1;if(e[s.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[s.CHAR_DATA_CHAR_INDEX].length){var r=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=r&&r<=56319){var i=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=i&&i<=57343?this.content=1024*(r-55296)+i-56320+65536|e[s.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[s.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[s.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[s.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[s.CHAR_DATA_WIDTH_INDEX]<<22)},t.prototype.getAsCharData=function(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]},t}(a.AttributeData);t.CellData=c},643:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=256,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR="",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=" ",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},4863:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.Marker=void 0;var o=r(8460),s=function(e){function t(r){var i=e.call(this)||this;return i.line=r,i._id=t._nextId++,i.isDisposed=!1,i._onDispose=new o.EventEmitter,i}return n(t,e),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onDispose",{get:function(){return this._onDispose.event},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),e.prototype.dispose.call(this))},t._nextId=1,t}(r(844).Disposable);t.Marker=s},7116:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",a:"▒",b:"␉",c:"␌",d:"␍",e:"␊",f:"°",g:"±",h:"␤",i:"␋",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=void 0,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},2584:(e,t)=>{var r,i;Object.defineProperty(t,"__esModule",{value:!0}),t.C1=t.C0=void 0,(i=t.C0||(t.C0={})).NUL="\0",i.SOH="",i.STX="",i.ETX="",i.EOT="",i.ENQ="",i.ACK="",i.BEL="",i.BS="\b",i.HT="\t",i.LF="\n",i.VT="\v",i.FF="\f",i.CR="\r",i.SO="",i.SI="",i.DLE="",i.DC1="",i.DC2="",i.DC3="",i.DC4="",i.NAK="",i.SYN="",i.ETB="",i.CAN="",i.EM="",i.SUB="",i.ESC="",i.FS="",i.GS="",i.RS="",i.US="",i.SP=" ",i.DEL="",(r=t.C1||(t.C1={})).PAD="€",r.HOP="",r.BPH="‚",r.NBH="ƒ",r.IND="„",r.NEL="…",r.SSA="†",r.ESA="‡",r.HTS="ˆ",r.HTJ="‰",r.VTS="Š",r.PLD="‹",r.PLU="Œ",r.RI="",r.SS2="Ž",r.SS3="",r.DCS="",r.PU1="‘",r.PU2="’",r.STS="“",r.CCH="”",r.MW="•",r.SPA="–",r.EPA="—",r.SOS="˜",r.SGCI="™",r.SCI="š",r.CSI="›",r.ST="œ",r.OSC="",r.PM="ž",r.APC="Ÿ"},7399:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.evaluateKeyboardEvent=void 0;var i=r(2584),n={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};t.evaluateKeyboardEvent=function(e,t,r,o){var s={type:0,cancel:!1,key:void 0},a=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:"UIKeyInputUpArrow"===e.key?s.key=t?i.C0.ESC+"OA":i.C0.ESC+"[A":"UIKeyInputLeftArrow"===e.key?s.key=t?i.C0.ESC+"OD":i.C0.ESC+"[D":"UIKeyInputRightArrow"===e.key?s.key=t?i.C0.ESC+"OC":i.C0.ESC+"[C":"UIKeyInputDownArrow"===e.key&&(s.key=t?i.C0.ESC+"OB":i.C0.ESC+"[B");break;case 8:if(e.shiftKey){s.key=i.C0.BS;break}if(e.altKey){s.key=i.C0.ESC+i.C0.DEL;break}s.key=i.C0.DEL;break;case 9:if(e.shiftKey){s.key=i.C0.ESC+"[Z";break}s.key=i.C0.HT,s.cancel=!0;break;case 13:s.key=e.altKey?i.C0.ESC+i.C0.CR:i.C0.CR,s.cancel=!0;break;case 27:s.key=i.C0.ESC,e.altKey&&(s.key=i.C0.ESC+i.C0.ESC),s.cancel=!0;break;case 37:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"D",s.key===i.C0.ESC+"[1;3D"&&(s.key=i.C0.ESC+(r?"b":"[1;5D"))):s.key=t?i.C0.ESC+"OD":i.C0.ESC+"[D";break;case 39:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"C",s.key===i.C0.ESC+"[1;3C"&&(s.key=i.C0.ESC+(r?"f":"[1;5C"))):s.key=t?i.C0.ESC+"OC":i.C0.ESC+"[C";break;case 38:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"A",r||s.key!==i.C0.ESC+"[1;3A"||(s.key=i.C0.ESC+"[1;5A")):s.key=t?i.C0.ESC+"OA":i.C0.ESC+"[A";break;case 40:if(e.metaKey)break;a?(s.key=i.C0.ESC+"[1;"+(a+1)+"B",r||s.key!==i.C0.ESC+"[1;3B"||(s.key=i.C0.ESC+"[1;5B")):s.key=t?i.C0.ESC+"OB":i.C0.ESC+"[B";break;case 45:e.shiftKey||e.ctrlKey||(s.key=i.C0.ESC+"[2~");break;case 46:s.key=a?i.C0.ESC+"[3;"+(a+1)+"~":i.C0.ESC+"[3~";break;case 36:s.key=a?i.C0.ESC+"[1;"+(a+1)+"H":t?i.C0.ESC+"OH":i.C0.ESC+"[H";break;case 35:s.key=a?i.C0.ESC+"[1;"+(a+1)+"F":t?i.C0.ESC+"OF":i.C0.ESC+"[F";break;case 33:e.shiftKey?s.type=2:s.key=i.C0.ESC+"[5~";break;case 34:e.shiftKey?s.type=3:s.key=i.C0.ESC+"[6~";break;case 112:s.key=a?i.C0.ESC+"[1;"+(a+1)+"P":i.C0.ESC+"OP";break;case 113:s.key=a?i.C0.ESC+"[1;"+(a+1)+"Q":i.C0.ESC+"OQ";break;case 114:s.key=a?i.C0.ESC+"[1;"+(a+1)+"R":i.C0.ESC+"OR";break;case 115:s.key=a?i.C0.ESC+"[1;"+(a+1)+"S":i.C0.ESC+"OS";break;case 116:s.key=a?i.C0.ESC+"[15;"+(a+1)+"~":i.C0.ESC+"[15~";break;case 117:s.key=a?i.C0.ESC+"[17;"+(a+1)+"~":i.C0.ESC+"[17~";break;case 118:s.key=a?i.C0.ESC+"[18;"+(a+1)+"~":i.C0.ESC+"[18~";break;case 119:s.key=a?i.C0.ESC+"[19;"+(a+1)+"~":i.C0.ESC+"[19~";break;case 120:s.key=a?i.C0.ESC+"[20;"+(a+1)+"~":i.C0.ESC+"[20~";break;case 121:s.key=a?i.C0.ESC+"[21;"+(a+1)+"~":i.C0.ESC+"[21~";break;case 122:s.key=a?i.C0.ESC+"[23;"+(a+1)+"~":i.C0.ESC+"[23~";break;case 123:s.key=a?i.C0.ESC+"[24;"+(a+1)+"~":i.C0.ESC+"[24~";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(r&&!o||!e.altKey||e.metaKey)!r||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey?e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length?s.key=e.key:e.key&&e.ctrlKey&&"_"===e.key&&(s.key=i.C0.US):65===e.keyCode&&(s.type=1);else{var c=n[e.keyCode],l=null==c?void 0:c[e.shiftKey?1:0];if(l)s.key=i.C0.ESC+l;else if(e.keyCode>=65&&e.keyCode<=90){var h=e.ctrlKey?e.keyCode-64:e.keyCode+32;s.key=i.C0.ESC+String.fromCharCode(h)}}else e.keyCode>=65&&e.keyCode<=90?s.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?s.key=i.C0.NUL:e.keyCode>=51&&e.keyCode<=55?s.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?s.key=i.C0.DEL:219===e.keyCode?s.key=i.C0.ESC:220===e.keyCode?s.key=i.C0.FS:221===e.keyCode&&(s.key=i.C0.GS)}return s}},482:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=e.length);for(var i="",n=t;n65535?(o-=65536,i+=String.fromCharCode(55296+(o>>10))+String.fromCharCode(o%1024+56320)):i+=String.fromCharCode(o)}return i};var r=function(){function e(){this._interim=0}return e.prototype.clear=function(){this._interim=0},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i=0,n=0;this._interim&&(56320<=(a=e.charCodeAt(n++))&&a<=57343?t[i++]=1024*(this._interim-55296)+a-56320+65536:(t[i++]=this._interim,t[i++]=a),this._interim=0);for(var o=n;o=r)return this._interim=s,i;var a;56320<=(a=e.charCodeAt(o))&&a<=57343?t[i++]=1024*(s-55296)+a-56320+65536:(t[i++]=s,t[i++]=a)}else 65279!==s&&(t[i++]=s)}return i},e}();t.StringToUtf32=r;var i=function(){function e(){this.interim=new Uint8Array(3)}return e.prototype.clear=function(){this.interim.fill(0)},e.prototype.decode=function(e,t){var r=e.length;if(!r)return 0;var i,n,o,s,a=0,c=0,l=0;if(this.interim[0]){var h=!1,u=this.interim[0];u&=192==(224&u)?31:224==(240&u)?15:7;for(var f=0,_=void 0;(_=63&this.interim[++f])&&f<4;)u<<=6,u|=_;for(var d=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,p=d-f;l=r)return 0;if(128!=(192&(_=e[l++]))){l--,h=!0;break}this.interim[f++]=_,u<<=6,u|=63&_}h||(2===d?u<128?l--:t[a++]=u:3===d?u<2048||u>=55296&&u<=57343||65279===u||(t[a++]=u):u<65536||u>1114111||(t[a++]=u)),this.interim.fill(0)}for(var v=r-4,g=l;g=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if((c=(31&i)<<6|63&n)<128){g--;continue}t[a++]=c}else if(224==(240&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if((c=(15&i)<<12|(63&n)<<6|63&o)<2048||c>=55296&&c<=57343||65279===c)continue;t[a++]=c}else if(240==(248&i)){if(g>=r)return this.interim[0]=i,a;if(128!=(192&(n=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,a;if(128!=(192&(o=e[g++]))){g--;continue}if(g>=r)return this.interim[0]=i,this.interim[1]=n,this.interim[2]=o,a;if(128!=(192&(s=e[g++]))){g--;continue}if((c=(7&i)<<18|(63&n)<<12|(63&o)<<6|63&s)<65536||c>1114111)continue;t[a++]=c}}return a},e}();t.Utf8ToUtf32=i},225:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeV6=void 0;var i,n=r(8273),o=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],s=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],a=function(){function e(){if(this.version="6",!i){i=new Uint8Array(65536),(0,n.fill)(i,1),i[0]=0,(0,n.fill)(i,0,1,32),(0,n.fill)(i,0,127,160),(0,n.fill)(i,2,4352,4448),i[9001]=2,i[9002]=2,(0,n.fill)(i,2,11904,42192),i[12351]=1,(0,n.fill)(i,2,44032,55204),(0,n.fill)(i,2,63744,64256),(0,n.fill)(i,2,65040,65050),(0,n.fill)(i,2,65072,65136),(0,n.fill)(i,2,65280,65377),(0,n.fill)(i,2,65504,65511);for(var e=0;et[n][1])return!1;for(;n>=i;)if(e>t[r=i+n>>1][1])i=r+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1},e}();t.UnicodeV6=a},5981:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WriteBuffer=void 0;var r="undefined"==typeof queueMicrotask?function(e){Promise.resolve().then(e)}:queueMicrotask,i=function(){function e(e){this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0}return e.prototype.writeSync=function(e,t){if(void 0!==t&&this._syncCalls>t)this._syncCalls=0;else if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,!this._isSyncWriting){var r;for(this._isSyncWriting=!0;r=this._writeBuffer.shift();){this._action(r);var i=this._callbacks.shift();i&&i()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}},e.prototype.write=function(e,t){var r=this;if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");this._writeBuffer.length||(this._bufferOffset=0,setTimeout((function(){return r._innerWrite()}))),this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)},e.prototype._innerWrite=function(e,t){var i=this;void 0===e&&(e=0),void 0===t&&(t=!0);for(var n=e||Date.now();this._writeBuffer.length>this._bufferOffset;){var o=this._writeBuffer[this._bufferOffset],s=this._action(o,t);if(s)return void s.catch((function(e){return r((function(){throw e})),Promise.resolve(!1)})).then((function(e){return Date.now()-n>=12?setTimeout((function(){return i._innerWrite(0,e)})):i._innerWrite(n,e)}));var a=this._callbacks[this._bufferOffset];if(a&&a(),this._bufferOffset++,this._pendingData-=o.length,Date.now()-n>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((function(){return i._innerWrite()}))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0)},e}();t.WriteBuffer=i},5941:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.toRgbString=t.parseColor=void 0;var r=/^([\da-f]{1})\/([\da-f]{1})\/([\da-f]{1})$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,i=/^[\da-f]+$/;function n(e,t){var r=e.toString(16),i=r.length<2?"0"+r:r;switch(t){case 4:return r[0];case 8:return i;case 12:return(i+i).slice(0,3);default:return i+i}}t.parseColor=function(e){if(e){var t=e.toLowerCase();if(0===t.indexOf("rgb:")){t=t.slice(4);var n=r.exec(t);if(n){var o=n[1]?15:n[4]?255:n[7]?4095:65535;return[Math.round(parseInt(n[1]||n[4]||n[7]||n[10],16)/o*255),Math.round(parseInt(n[2]||n[5]||n[8]||n[11],16)/o*255),Math.round(parseInt(n[3]||n[6]||n[9]||n[12],16)/o*255)]}}else if(0===t.indexOf("#")&&(t=t.slice(1),i.exec(t)&&[3,6,9,12].includes(t.length))){for(var s=t.length/3,a=[0,0,0],c=0;c<3;++c){var l=parseInt(t.slice(s*c,s*c+s),16);a[c]=1===s?l<<4:2===s?l:3===s?l>>4:l>>8}return a}}},t.toRgbString=function(e,t){void 0===t&&(t=16);var r=e[0],i=e[1],o=e[2];return"rgb:"+n(r,t)+"/"+n(i,t)+"/"+n(o,t)}},5770:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},6351:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DcsHandler=t.DcsParser=void 0;var i=r(482),n=r(8742),o=r(5770),s=[],a=function(){function e(){this._handlers=Object.create(null),this._active=s,this._ident=0,this._handlerFb=function(){},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}return e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){},this._active=s},e.prototype.registerHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.reset=function(){if(this._active.length)for(var e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=s,this._ident=0},e.prototype.hook=function(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||s,this._active.length)for(var r=this._active.length-1;r>=0;r--)this._active[r].hook(t);else this._handlerFb(this._ident,"HOOK",t)},e.prototype.put=function(e,t,r){if(this._active.length)for(var n=this._active.length-1;n>=0;n--)this._active[n].put(e,t,r);else this._handlerFb(this._ident,"PUT",(0,i.utf32ToString)(e,t,r))},e.prototype.unhook=function(e,t){if(void 0===t&&(t=!0),this._active.length){var r=!1,i=this._active.length-1,n=!1;if(this._stack.paused&&(i=this._stack.loopPosition-1,r=t,n=this._stack.fallThrough,this._stack.paused=!1),!n&&!1===r){for(;i>=0&&!0!==(r=this._active[i].unhook(e));i--)if(r instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!1,r;i--}for(;i>=0;i--)if((r=this._active[i].unhook(!1))instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!0,r}else this._handlerFb(this._ident,"UNHOOK",e);this._active=s,this._ident=0},e}();t.DcsParser=a;var c=new n.Params;c.addParam(0);var l=function(){function e(e){this._handler=e,this._data="",this._params=c,this._hitLimit=!1}return e.prototype.hook=function(e){this._params=e.length>1||e.params[0]?e.clone():c,this._data="",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=(0,i.utf32ToString)(e,t,r),this._data.length>o.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},e.prototype.unhook=function(e){var t=this,r=!1;if(this._hitLimit)r=!1;else if(e&&(r=this._handler(this._data,this._params))instanceof Promise)return r.then((function(e){return t._params=c,t._data="",t._hitLimit=!1,e}));return this._params=c,this._data="",this._hitLimit=!1,r},e}();t.DcsHandler=l},2015:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;var o=r(844),s=r(8273),a=r(8742),c=r(6242),l=r(6351),h=function(){function e(e){this.table=new Uint8Array(e)}return e.prototype.setDefault=function(e,t){(0,s.fill)(this.table,e<<4|t)},e.prototype.add=function(e,t,r,i){this.table[t<<8|e]=r<<4|i},e.prototype.addMany=function(e,t,r,i){for(var n=0;n1)throw new Error("only one byte as prefix supported");if((r=e.prefix.charCodeAt(0))&&60>r||r>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(e.intermediates){if(e.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(var i=0;in||n>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");r<<=8,r|=n}}if(1!==e.final.length)throw new Error("final must be a single byte");var o=e.final.charCodeAt(0);if(t[0]>o||o>t[1])throw new Error("final must be in range "+t[0]+" .. "+t[1]);return(r<<=8)|o},r.prototype.identToString=function(e){for(var t=[];e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join("")},r.prototype.dispose=function(){this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null),this._oscParser.dispose(),this._dcsParser.dispose()},r.prototype.setPrintHandler=function(e){this._printHandler=e},r.prototype.clearPrintHandler=function(){this._printHandler=this._printHandlerFb},r.prototype.registerEscHandler=function(e,t){var r=this._identifier(e,[48,126]);void 0===this._escHandlers[r]&&(this._escHandlers[r]=[]);var i=this._escHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.clearEscHandler=function(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]},r.prototype.setEscHandlerFallback=function(e){this._escHandlerFb=e},r.prototype.setExecuteHandler=function(e,t){this._executeHandlers[e.charCodeAt(0)]=t},r.prototype.clearExecuteHandler=function(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]},r.prototype.setExecuteHandlerFallback=function(e){this._executeHandlerFb=e},r.prototype.registerCsiHandler=function(e,t){var r=this._identifier(e);void 0===this._csiHandlers[r]&&(this._csiHandlers[r]=[]);var i=this._csiHandlers[r];return i.push(t),{dispose:function(){var e=i.indexOf(t);-1!==e&&i.splice(e,1)}}},r.prototype.clearCsiHandler=function(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]},r.prototype.setCsiHandlerFallback=function(e){this._csiHandlerFb=e},r.prototype.registerDcsHandler=function(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)},r.prototype.clearDcsHandler=function(e){this._dcsParser.clearHandler(this._identifier(e))},r.prototype.setDcsHandlerFallback=function(e){this._dcsParser.setHandlerFallback(e)},r.prototype.registerOscHandler=function(e,t){return this._oscParser.registerHandler(e,t)},r.prototype.clearOscHandler=function(e){this._oscParser.clearHandler(e)},r.prototype.setOscHandlerFallback=function(e){this._oscParser.setHandlerFallback(e)},r.prototype.setErrorHandler=function(e){this._errorHandler=e},r.prototype.clearErrorHandler=function(){this._errorHandler=this._errorHandlerFb},r.prototype.reset=function(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])},r.prototype._preserveStack=function(e,t,r,i,n){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=r,this._parseStack.transition=i,this._parseStack.chunkPos=n},r.prototype.parse=function(e,t,r){var i,n=0,o=0,s=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,s=this._parseStack.chunkPos+1;else{if(void 0===r||1===this._parseStack.state)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");var a=this._parseStack.handlers,c=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===r&&c>-1)for(;c>=0&&!0!==(i=a[c](this._params));c--)if(i instanceof Promise)return this._parseStack.handlerPos=c,i;this._parseStack.handlers=[];break;case 4:if(!1===r&&c>-1)for(;c>=0&&!0!==(i=a[c]());c--)if(i instanceof Promise)return this._parseStack.handlerPos=c,i;this._parseStack.handlers=[];break;case 6:if(n=e[this._parseStack.chunkPos],i=this._dcsParser.unhook(24!==n&&26!==n,r))return i;27===n&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(n=e[this._parseStack.chunkPos],i=this._oscParser.end(24!==n&&26!==n,r))return i;27===n&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,s=this._parseStack.chunkPos+1,this.precedingCodepoint=0,this.currentState=15&this._parseStack.transition}for(var l=s;l>4){case 2:for(var h=l+1;;++h){if(h>=t||(n=e[h])<32||n>126&&n=t||(n=e[h])<32||n>126&&n=t||(n=e[h])<32||n>126&&n=t||(n=e[h])<32||n>126&&n=0&&!0!==(i=a[f](this._params));f--)if(i instanceof Promise)return this._preserveStack(3,a,f,o,l),i;f<0&&this._csiHandlerFb(this._collect<<8|n,this._params),this.precedingCodepoint=0;break;case 8:do{switch(n){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(n-48)}}while(++l47&&n<60);l--;break;case 9:this._collect<<=8,this._collect|=n;break;case 10:for(var _=this._escHandlers[this._collect<<8|n],d=_?_.length-1:-1;d>=0&&!0!==(i=_[d]());d--)if(i instanceof Promise)return this._preserveStack(4,_,d,o,l),i;d<0&&this._escHandlerFb(this._collect<<8|n),this.precedingCodepoint=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|n,this._params);break;case 13:for(var p=l+1;;++p)if(p>=t||24===(n=e[p])||26===n||27===n||n>127&&n=t||(n=e[v])<32||n>127&&n{Object.defineProperty(t,"__esModule",{value:!0}),t.OscHandler=t.OscParser=void 0;var i=r(5770),n=r(482),o=[],s=function(){function e(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=function(){},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}return e.prototype.registerHandler=function(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);var r=this._handlers[e];return r.push(t),{dispose:function(){var e=r.indexOf(t);-1!==e&&r.splice(e,1)}}},e.prototype.clearHandler=function(e){this._handlers[e]&&delete this._handlers[e]},e.prototype.setHandlerFallback=function(e){this._handlerFb=e},e.prototype.dispose=function(){this._handlers=Object.create(null),this._handlerFb=function(){},this._active=o},e.prototype.reset=function(){if(2===this._state)for(var e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0},e.prototype._start=function(){if(this._active=this._handlers[this._id]||o,this._active.length)for(var e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,"START")},e.prototype._put=function(e,t,r){if(this._active.length)for(var i=this._active.length-1;i>=0;i--)this._active[i].put(e,t,r);else this._handlerFb(this._id,"PUT",(0,n.utf32ToString)(e,t,r))},e.prototype.start=function(){this.reset(),this._state=1},e.prototype.put=function(e,t,r){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,r)}},e.prototype.end=function(e,t){if(void 0===t&&(t=!0),0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){var r=!1,i=this._active.length-1,n=!1;if(this._stack.paused&&(i=this._stack.loopPosition-1,r=t,n=this._stack.fallThrough,this._stack.paused=!1),!n&&!1===r){for(;i>=0&&!0!==(r=this._active[i].end(e));i--)if(r instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!1,r;i--}for(;i>=0;i--)if((r=this._active[i].end(!1))instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=i,this._stack.fallThrough=!0,r}else this._handlerFb(this._id,"END",e);this._active=o,this._id=-1,this._state=0}},e}();t.OscParser=s;var a=function(){function e(e){this._handler=e,this._data="",this._hitLimit=!1}return e.prototype.start=function(){this._data="",this._hitLimit=!1},e.prototype.put=function(e,t,r){this._hitLimit||(this._data+=(0,n.utf32ToString)(e,t,r),this._data.length>i.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))},e.prototype.end=function(e){var t=this,r=!1;if(this._hitLimit)r=!1;else if(e&&(r=this._handler(this._data))instanceof Promise)return r.then((function(e){return t._data="",t._hitLimit=!1,e}));return this._data="",this._hitLimit=!1,r},e}();t.OscHandler=a},8742:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Params=void 0;var r=2147483647,i=function(){function e(e,t){if(void 0===e&&(e=32),void 0===t&&(t=32),this.maxLength=e,this.maxSubParamsLength=t,t>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}return e.fromArray=function(t){var r=new e;if(!t.length)return r;for(var i=Array.isArray(t[0])?1:0;i>8,i=255&this._subParamsIdx[t];i-r>0&&e.push(Array.prototype.slice.call(this._subParams,r,i))}return e},e.prototype.reset=function(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1},e.prototype.addParam=function(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>r?r:e}},e.prototype.addSubParam=function(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=e>r?r:e,this._subParamsIdx[this.length-1]++}},e.prototype.hasSubParams=function(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0},e.prototype.getSubParams=function(e){var t=this._subParamsIdx[e]>>8,r=255&this._subParamsIdx[e];return r-t>0?this._subParams.subarray(t,r):null},e.prototype.getSubParamsAll=function(){for(var e={},t=0;t>8,i=255&this._subParamsIdx[t];i-r>0&&(e[t]=this._subParams.slice(r,i))}return e},e.prototype.addDigit=function(e){var t;if(!(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)){var i=this._digitIsSub?this._subParams:this.params,n=i[t-1];i[t-1]=~n?Math.min(10*n+e,r):e}},e}();t.Params=i},5741:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AddonManager=void 0;var r=function(){function e(){this._addons=[]}return e.prototype.dispose=function(){for(var e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()},e.prototype.loadAddon=function(e,t){var r=this,i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=function(){return r._wrappedAddonDispose(i)},t.activate(e)},e.prototype._wrappedAddonDispose=function(e){if(!e.isDisposed){for(var t=-1,r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferApiView=void 0;var i=r(3785),n=r(511),o=function(){function e(e,t){this._buffer=e,this.type=t}return e.prototype.init=function(e){return this._buffer=e,this},Object.defineProperty(e.prototype,"cursorY",{get:function(){return this._buffer.y},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cursorX",{get:function(){return this._buffer.x},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"viewportY",{get:function(){return this._buffer.ydisp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"baseY",{get:function(){return this._buffer.ybase},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._buffer.lines.length},enumerable:!1,configurable:!0}),e.prototype.getLine=function(e){var t=this._buffer.lines.get(e);if(t)return new i.BufferLineApiView(t)},e.prototype.getNullCell=function(){return new n.CellData},e}();t.BufferApiView=o},3785:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferLineApiView=void 0;var i=r(511),n=function(){function e(e){this._line=e}return Object.defineProperty(e.prototype,"isWrapped",{get:function(){return this._line.isWrapped},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return this._line.length},enumerable:!1,configurable:!0}),e.prototype.getCell=function(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new i.CellData)},e.prototype.translateToString=function(e,t,r){return this._line.translateToString(e,t,r)},e}();t.BufferLineApiView=n},8285:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BufferNamespaceApi=void 0;var i=r(8771),n=r(8460),o=function(){function e(e){var t=this;this._core=e,this._onBufferChange=new n.EventEmitter,this._normal=new i.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new i.BufferApiView(this._core.buffers.alt,"alternate"),this._core.buffers.onBufferActivate((function(){return t._onBufferChange.fire(t.active)}))}return Object.defineProperty(e.prototype,"onBufferChange",{get:function(){return this._onBufferChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"active",{get:function(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"normal",{get:function(){return this._normal.init(this._core.buffers.normal)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"alternate",{get:function(){return this._alternate.init(this._core.buffers.alt)},enumerable:!1,configurable:!0}),e}();t.BufferNamespaceApi=o},7975:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ParserApi=void 0;var r=function(){function e(e){this._core=e}return e.prototype.registerCsiHandler=function(e,t){return this._core.registerCsiHandler(e,(function(e){return t(e.toArray())}))},e.prototype.addCsiHandler=function(e,t){return this.registerCsiHandler(e,t)},e.prototype.registerDcsHandler=function(e,t){return this._core.registerDcsHandler(e,(function(e,r){return t(e,r.toArray())}))},e.prototype.addDcsHandler=function(e,t){return this.registerDcsHandler(e,t)},e.prototype.registerEscHandler=function(e,t){return this._core.registerEscHandler(e,t)},e.prototype.addEscHandler=function(e,t){return this.registerEscHandler(e,t)},e.prototype.registerOscHandler=function(e,t){return this._core.registerOscHandler(e,t)},e.prototype.addOscHandler=function(e,t){return this.registerOscHandler(e,t)},e}();t.ParserApi=r},7090:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeApi=void 0;var r=function(){function e(e){this._core=e}return e.prototype.register=function(e){this._core.unicodeService.register(e)},Object.defineProperty(e.prototype,"versions",{get:function(){return this._core.unicodeService.versions},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeVersion",{get:function(){return this._core.unicodeService.activeVersion},set:function(e){this._core.unicodeService.activeVersion=e},enumerable:!1,configurable:!0}),e}();t.UnicodeApi=r},744:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;var a=r(2585),c=r(5295),l=r(8460),h=r(844);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;var u=function(e){function r(r){var i=e.call(this)||this;return i._optionsService=r,i.isUserScrolling=!1,i._onResize=new l.EventEmitter,i._onScroll=new l.EventEmitter,i.cols=Math.max(r.rawOptions.cols||0,t.MINIMUM_COLS),i.rows=Math.max(r.rawOptions.rows||0,t.MINIMUM_ROWS),i.buffers=new c.BufferSet(r,i),i}return n(r,e),Object.defineProperty(r.prototype,"onResize",{get:function(){return this._onResize.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"onScroll",{get:function(){return this._onScroll.event},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"buffer",{get:function(){return this.buffers.active},enumerable:!1,configurable:!0}),r.prototype.dispose=function(){e.prototype.dispose.call(this),this.buffers.dispose()},r.prototype.resize=function(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this.buffers.setupTabStops(this.cols),this._onResize.fire({cols:e,rows:t})},r.prototype.reset=function(){this.buffers.reset(),this.isUserScrolling=!1},r.prototype.scroll=function(e,t){void 0===t&&(t=!1);var r,i=this.buffer;(r=this._cachedBlankLine)&&r.length===this.cols&&r.getFg(0)===e.fg&&r.getBg(0)===e.bg||(r=i.getBlankLine(e,t),this._cachedBlankLine=r),r.isWrapped=t;var n=i.ybase+i.scrollTop,o=i.ybase+i.scrollBottom;if(0===i.scrollTop){var s=i.lines.isFull;o===i.lines.length-1?s?i.lines.recycle().copyFrom(r):i.lines.push(r.clone()):i.lines.splice(o+1,0,r.clone()),s?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{var a=o-n+1;i.lines.shiftElements(n+1,a-1,-1),i.lines.set(o,r.clone())}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)},r.prototype.scrollLines=function(e,t,r){var i=this.buffer;if(e<0){if(0===i.ydisp)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);var n=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),n!==i.ydisp&&(t||this._onScroll.fire(i.ydisp))},r.prototype.scrollPages=function(e){this.scrollLines(e*(this.rows-1))},r.prototype.scrollToTop=function(){this.scrollLines(-this.buffer.ydisp)},r.prototype.scrollToBottom=function(){this.scrollLines(this.buffer.ybase-this.buffer.ydisp)},r.prototype.scrollToLine=function(e){var t=e-this.buffer.ydisp;0!==t&&this.scrollLines(t)},o([s(0,a.IOptionsService)],r)}(h.Disposable);t.BufferService=u},7994:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CharsetService=void 0;var r=function(){function e(){this.glevel=0,this._charsets=[]}return e.prototype.reset=function(){this.charset=void 0,this._charsets=[],this.glevel=0},e.prototype.setgLevel=function(e){this.glevel=e,this.charset=this._charsets[e]},e.prototype.setgCharset=function(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)},e}();t.CharsetService=r},1753:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreMouseService=void 0;var o=r(2585),s=r(8460),a={NONE:{events:0,restrict:function(){return!1}},X10:{events:1,restrict:function(e){return 4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)}},VT200:{events:19,restrict:function(e){return 32!==e.action}},DRAG:{events:23,restrict:function(e){return 32!==e.action||3!==e.button}},ANY:{events:31,restrict:function(e){return!0}}};function c(e,t){var r=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(r|=64,r|=e.action):(r|=3&e.button,4&e.button&&(r|=64),8&e.button&&(r|=128),32===e.action?r|=32:0!==e.action||t||(r|=3)),r}var l=String.fromCharCode,h={DEFAULT:function(e){var t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?"":""+l(t[0])+l(t[1])+l(t[2])},SGR:function(e){var t=0===e.action&&4!==e.button?"m":"M";return"[<"+c(e,!0)+";"+e.col+";"+e.row+t}},u=function(){function e(e,t){this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._onProtocolChange=new s.EventEmitter,this._lastEvent=null;for(var r=0,i=Object.keys(a);r=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._compareEvents(this._lastEvent,e))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;var t=this._encodings[this._activeEncoding](e);return t&&("DEFAULT"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0},e.prototype.explainEvents=function(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}},e.prototype._compareEvents=function(e,t){return e.col===t.col&&e.row===t.row&&e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift},i([n(0,o.IBufferService),n(1,o.ICoreService)],e)}();t.CoreMouseService=u},6975:function(e,t,r){var i,n=this&&this.__extends||(i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},i(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},s=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.CoreService=void 0;var a=r(2585),c=r(8460),l=r(1439),h=r(844),u=Object.freeze({insertMode:!1}),f=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0}),_=function(e){function t(t,r,i,n){var o=e.call(this)||this;return o._bufferService=r,o._logService=i,o._optionsService=n,o.isCursorInitialized=!1,o.isCursorHidden=!1,o._onData=o.register(new c.EventEmitter),o._onUserInput=o.register(new c.EventEmitter),o._onBinary=o.register(new c.EventEmitter),o._scrollToBottom=t,o.register({dispose:function(){return o._scrollToBottom=void 0}}),o.modes=(0,l.clone)(u),o.decPrivateModes=(0,l.clone)(f),o}return n(t,e),Object.defineProperty(t.prototype,"onData",{get:function(){return this._onData.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onUserInput",{get:function(){return this._onUserInput.event},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"onBinary",{get:function(){return this._onBinary.event},enumerable:!1,configurable:!0}),t.prototype.reset=function(){this.modes=(0,l.clone)(u),this.decPrivateModes=(0,l.clone)(f)},t.prototype.triggerDataEvent=function(e,t){if(void 0===t&&(t=!1),!this._optionsService.rawOptions.disableStdin){var r=this._bufferService.buffer;r.ybase!==r.ydisp&&this._scrollToBottom(),t&&this._onUserInput.fire(),this._logService.debug('sending data "'+e+'"',(function(){return e.split("").map((function(e){return e.charCodeAt(0)}))})),this._onData.fire(e)}},t.prototype.triggerBinaryEvent=function(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug('sending binary "'+e+'"',(function(){return e.split("").map((function(e){return e.charCodeAt(0)}))})),this._onBinary.fire(e))},o([s(1,a.IBufferService),s(2,a.ILogService),s(3,a.IOptionsService)],t)}(h.Disposable);t.CoreService=_},3730:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}};Object.defineProperty(t,"__esModule",{value:!0}),t.DirtyRowService=void 0;var o=r(2585),s=function(){function e(e){this._bufferService=e,this.clearRange()}return Object.defineProperty(e.prototype,"start",{get:function(){return this._start},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this._end},enumerable:!1,configurable:!0}),e.prototype.clearRange=function(){this._start=this._bufferService.buffer.y,this._end=this._bufferService.buffer.y},e.prototype.markDirty=function(e){ethis._end&&(this._end=e)},e.prototype.markRangeDirty=function(e,t){if(e>t){var r=e;e=t,t=r}ethis._end&&(this._end=t)},e.prototype.markAllDirty=function(){this.markRangeDirty(0,this._bufferService.rows-1)},i([n(0,o.IBufferService)],e)}();t.DirtyRowService=s},4348:function(e,t,r){var i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n0?n[0].index:t.length;if(t.length!==u)throw new Error("[createInstance] First service dependency of "+e.name+" at position "+(u+1)+" conflicts with "+t.length+" static arguments");return new(e.bind.apply(e,i([void 0],i(i([],t,!0),s,!0),!1)))},e}();t.InstantiationService=a},7866:function(e,t,r){var i=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s},n=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}},o=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n{function r(e,t,r){t.di$target===t?t.di$dependencies.push({id:e,index:r}):(t.di$dependencies=[{id:e,index:r}],t.di$target=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0,t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e.di$dependencies||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);var i=function(e,t,n){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");r(i,e,n)};return i.toString=function(){return e},t.serviceRegistry.set(e,i),i}},2585:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IUnicodeService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.IDirtyRowService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;var i,n=r(8343);t.IBufferService=(0,n.createDecorator)("BufferService"),t.ICoreMouseService=(0,n.createDecorator)("CoreMouseService"),t.ICoreService=(0,n.createDecorator)("CoreService"),t.ICharsetService=(0,n.createDecorator)("CharsetService"),t.IDirtyRowService=(0,n.createDecorator)("DirtyRowService"),t.IInstantiationService=(0,n.createDecorator)("InstantiationService"),(i=t.LogLevelEnum||(t.LogLevelEnum={}))[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.OFF=4]="OFF",t.ILogService=(0,n.createDecorator)("LogService"),t.IOptionsService=(0,n.createDecorator)("OptionsService"),t.IUnicodeService=(0,n.createDecorator)("UnicodeService")},1480:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnicodeService=void 0;var i=r(8460),n=r(225),o=function(){function e(){this._providers=Object.create(null),this._active="",this._onChange=new i.EventEmitter;var e=new n.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}return Object.defineProperty(e.prototype,"onChange",{get:function(){return this._onChange.event},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"versions",{get:function(){return Object.keys(this._providers)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeVersion",{get:function(){return this._active},set:function(e){if(!this._providers[e])throw new Error('unknown Unicode version "'+e+'"');this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)},enumerable:!1,configurable:!0}),e.prototype.register=function(e){this._providers[e.version]=e},e.prototype.wcwidth=function(e){return this._activeProvider.wcwidth(e)},e.prototype.getStringCellWidth=function(e){for(var t=0,r=e.length,i=0;i=r)return t+this.wcwidth(n);var o=e.charCodeAt(i);56320<=o&&o<=57343?n=1024*(n-55296)+o-56320+65536:t+=this.wcwidth(o)}t+=this.wcwidth(n)}return t},e}();t.UnicodeService=o}},t={};return function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,r),o.exports}(4389)})()}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=r(320),t=r(334),i=r(617);const n=new e.Terminal,o=new i.FitAddon;n.loadAddon(o),n.open(document.getElementById("terminal")),o.fit();const s=new WebSocket("ws://"+window.location.host+"/web-socket/ssh"),a=()=>{const e={high:n.rows,width:n.cols},t=new Blob([JSON.stringify(e)],{type:"application/json"});s.send(t)};s.onopen=a,window.addEventListener("resize",(()=>{o.fit(),a()}),!1);const c=new t.AttachAddon(s);n.loadAddon(c)})()})(); \ No newline at end of file +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _xterm_xterm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @xterm/xterm */ \"./node_modules/@xterm/xterm/lib/xterm.js\");\n/* harmony import */ var _xterm_xterm__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_xterm_xterm__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @xterm/addon-attach */ \"./node_modules/@xterm/addon-attach/lib/addon-attach.js\");\n/* harmony import */ var _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @xterm/addon-fit */ \"./node_modules/@xterm/addon-fit/lib/addon-fit.js\");\n/* harmony import */ var _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _xterm_xterm_css_xterm_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @xterm/xterm/css/xterm.css */ \"./node_modules/@xterm/xterm/css/xterm.css\");\n\n\n\n\n\n\nconst terminal = new _xterm_xterm__WEBPACK_IMPORTED_MODULE_0__.Terminal();\nconst fitAddon = new _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__.FitAddon();\nterminal.loadAddon(fitAddon);\nterminal.open(document.getElementById('terminal'));\nfitAddon.fit();\n\nconst webSocket = new WebSocket('ws://' + window.location.host + '/web-socket/ssh');\n\nconst sendSize = () => {\n const windowSize = {high: terminal.rows, width: terminal.cols};\n const blob = new Blob([JSON.stringify(windowSize)], {type : 'application/json'});\n webSocket.send(blob);\n}\n\nwebSocket.onopen = sendSize;\n\nconst resizeScreen = () => {\n fitAddon.fit();\n sendSize();\n}\nwindow.addEventListener('resize', resizeScreen, false);\n\nconst attachAddon = new _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__.AttachAddon(webSocket);\nterminal.loadAddon(attachAddon);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3QztBQUNVO0FBQ047O0FBRVI7O0FBRXBDLHFCQUFxQixrREFBUTtBQUM3QixxQkFBcUIsc0RBQVE7QUFDN0I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esc0JBQXNCO0FBQ3RCLHVEQUF1RCwwQkFBMEI7QUFDakY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qiw0REFBVztBQUNuQyIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vaW5kZXguanM/NDFmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXJtaW5hbCB9IGZyb20gJ0B4dGVybS94dGVybSc7XG5pbXBvcnQgeyBBdHRhY2hBZGRvbiB9IGZyb20gJ0B4dGVybS9hZGRvbi1hdHRhY2gnO1xuaW1wb3J0IHsgRml0QWRkb24gfSBmcm9tICdAeHRlcm0vYWRkb24tZml0JztcblxuaW1wb3J0ICdAeHRlcm0veHRlcm0vY3NzL3h0ZXJtLmNzcyc7XG5cbmNvbnN0IHRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKCk7XG5jb25zdCBmaXRBZGRvbiA9IG5ldyBGaXRBZGRvbigpO1xudGVybWluYWwubG9hZEFkZG9uKGZpdEFkZG9uKTtcbnRlcm1pbmFsLm9wZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlcm1pbmFsJykpO1xuZml0QWRkb24uZml0KCk7XG5cbmNvbnN0IHdlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy93ZWItc29ja2V0L3NzaCcpO1xuXG5jb25zdCBzZW5kU2l6ZSA9ICgpID0+IHtcbiAgY29uc3Qgd2luZG93U2l6ZSA9IHtoaWdoOiB0ZXJtaW5hbC5yb3dzLCB3aWR0aDogdGVybWluYWwuY29sc307XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkod2luZG93U2l6ZSldLCB7dHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJ30pO1xuICB3ZWJTb2NrZXQuc2VuZChibG9iKTtcbn1cblxud2ViU29ja2V0Lm9ub3BlbiA9IHNlbmRTaXplO1xuXG5jb25zdCByZXNpemVTY3JlZW4gPSAoKSA9PiB7XG4gIGZpdEFkZG9uLmZpdCgpO1xuICBzZW5kU2l6ZSgpO1xufVxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZVNjcmVlbiwgZmFsc2UpO1xuXG5jb25zdCBhdHRhY2hBZGRvbiA9IG5ldyBBdHRhY2hBZGRvbih3ZWJTb2NrZXQpO1xudGVybWluYWwubG9hZEFkZG9uKGF0dGFjaEFkZG9uKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./index.js\n"); + +/***/ }), + +/***/ "./node_modules/@xterm/addon-attach/lib/addon-attach.js": +/*!**************************************************************!*\ + !*** ./node_modules/@xterm/addon-attach/lib/addon-attach.js ***! + \**************************************************************/ +/***/ ((module) => { + +eval("!function(e,t){ true?module.exports=t():0}(self,(()=>(()=>{\"use strict\";var e={};return(()=>{var t=e;function s(e,t,s){return e.addEventListener(t,s),{dispose:()=>{s&&e.removeEventListener(t,s)}}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.AttachAddon=void 0,t.AttachAddon=class{constructor(e,t){this._disposables=[],this._socket=e,this._socket.binaryType=\"arraybuffer\",this._bidirectional=!(t&&!1===t.bidirectional)}activate(e){this._disposables.push(s(this._socket,\"message\",(t=>{const s=t.data;e.write(\"string\"==typeof s?s:new Uint8Array(s))}))),this._bidirectional&&(this._disposables.push(e.onData((e=>this._sendData(e)))),this._disposables.push(e.onBinary((e=>this._sendBinary(e))))),this._disposables.push(s(this._socket,\"close\",(()=>this.dispose()))),this._disposables.push(s(this._socket,\"error\",(()=>this.dispose())))}dispose(){for(const e of this._disposables)e.dispose()}_sendData(e){this._checkOpenSocket()&&this._socket.send(e)}_sendBinary(e){if(!this._checkOpenSocket())return;const t=new Uint8Array(e.length);for(let s=0;s { + +eval("!function(e,t){ true?module.exports=t():0}(self,(()=>(()=>{\"use strict\";var e={};return(()=>{var t=e;Object.defineProperty(t,\"__esModule\",{value:!0}),t.FitAddon=void 0,t.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){const e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;const t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal)return;if(!this._terminal.element||!this._terminal.element.parentElement)return;const e=this._terminal._core,t=e._renderService.dimensions;if(0===t.css.cell.width||0===t.css.cell.height)return;const r=0===this._terminal.options.scrollback?0:e.viewport.scrollBarWidth,i=window.getComputedStyle(this._terminal.element.parentElement),o=parseInt(i.getPropertyValue(\"height\")),s=Math.max(0,parseInt(i.getPropertyValue(\"width\"))),n=window.getComputedStyle(this._terminal.element),l=o-(parseInt(n.getPropertyValue(\"padding-top\"))+parseInt(n.getPropertyValue(\"padding-bottom\"))),a=s-(parseInt(n.getPropertyValue(\"padding-right\"))+parseInt(n.getPropertyValue(\"padding-left\")))-r;return{cols:Math.max(2,Math.floor(a/t.css.cell.width)),rows:Math.max(1,Math.floor(l/t.css.cell.height))}}}})(),e})()));\n//# sourceMappingURL=addon-fit.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHh0ZXJtL2FkZG9uLWZpdC9saWIvYWRkb24tZml0LmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsS0FBaUQsb0JBQW9CLENBQStHLENBQUMsaUJBQWlCLGFBQWEsU0FBUyxZQUFZLFFBQVEsc0NBQXNDLFNBQVMscUNBQXFDLFlBQVksaUJBQWlCLFdBQVcsTUFBTSxpQ0FBaUMsNERBQTRELDZCQUE2Qiw0SEFBNEgsb0JBQW9CLDBCQUEwQix5RUFBeUUsMkRBQTJELHNEQUFzRCw2ZEFBNmQsT0FBTyxvR0FBb0csTUFBTTtBQUM3NkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9nby1zc2gtd2ViLWNsaWVudC8uL25vZGVfbW9kdWxlcy9AeHRlcm0vYWRkb24tZml0L2xpYi9hZGRvbi1maXQuanM/Y2ZiMiJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkZpdEFkZG9uPXQoKTplLkZpdEFkZG9uPXQoKX0oc2VsZiwoKCk9PigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXt9O3JldHVybigoKT0+e3ZhciB0PWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5GaXRBZGRvbj12b2lkIDAsdC5GaXRBZGRvbj1jbGFzc3thY3RpdmF0ZShlKXt0aGlzLl90ZXJtaW5hbD1lfWRpc3Bvc2UoKXt9Zml0KCl7Y29uc3QgZT10aGlzLnByb3Bvc2VEaW1lbnNpb25zKCk7aWYoIWV8fCF0aGlzLl90ZXJtaW5hbHx8aXNOYU4oZS5jb2xzKXx8aXNOYU4oZS5yb3dzKSlyZXR1cm47Y29uc3QgdD10aGlzLl90ZXJtaW5hbC5fY29yZTt0aGlzLl90ZXJtaW5hbC5yb3dzPT09ZS5yb3dzJiZ0aGlzLl90ZXJtaW5hbC5jb2xzPT09ZS5jb2xzfHwodC5fcmVuZGVyU2VydmljZS5jbGVhcigpLHRoaXMuX3Rlcm1pbmFsLnJlc2l6ZShlLmNvbHMsZS5yb3dzKSl9cHJvcG9zZURpbWVuc2lvbnMoKXtpZighdGhpcy5fdGVybWluYWwpcmV0dXJuO2lmKCF0aGlzLl90ZXJtaW5hbC5lbGVtZW50fHwhdGhpcy5fdGVybWluYWwuZWxlbWVudC5wYXJlbnRFbGVtZW50KXJldHVybjtjb25zdCBlPXRoaXMuX3Rlcm1pbmFsLl9jb3JlLHQ9ZS5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zO2lmKDA9PT10LmNzcy5jZWxsLndpZHRofHwwPT09dC5jc3MuY2VsbC5oZWlnaHQpcmV0dXJuO2NvbnN0IHI9MD09PXRoaXMuX3Rlcm1pbmFsLm9wdGlvbnMuc2Nyb2xsYmFjaz8wOmUudmlld3BvcnQuc2Nyb2xsQmFyV2lkdGgsaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl90ZXJtaW5hbC5lbGVtZW50LnBhcmVudEVsZW1lbnQpLG89cGFyc2VJbnQoaS5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIpKSxzPU1hdGgubWF4KDAscGFyc2VJbnQoaS5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIikpKSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3Rlcm1pbmFsLmVsZW1lbnQpLGw9by0ocGFyc2VJbnQobi5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIikpK3BhcnNlSW50KG4uZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpKSksYT1zLShwYXJzZUludChuLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXJpZ2h0XCIpKStwYXJzZUludChuLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLWxlZnRcIikpKS1yO3JldHVybntjb2xzOk1hdGgubWF4KDIsTWF0aC5mbG9vcihhL3QuY3NzLmNlbGwud2lkdGgpKSxyb3dzOk1hdGgubWF4KDEsTWF0aC5mbG9vcihsL3QuY3NzLmNlbGwuaGVpZ2h0KSl9fX19KSgpLGV9KSgpKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGRvbi1maXQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@xterm/addon-fit/lib/addon-fit.js\n"); + +/***/ }), + +/***/ "./node_modules/@xterm/xterm/lib/xterm.js": +/*!************************************************!*\ + !*** ./node_modules/@xterm/xterm/lib/xterm.js ***! + \************************************************/ +/***/ ((module) => { + +eval("!function(e,t){if(true)module.exports=t();else { var s, i; }}(globalThis,(()=>(()=>{\"use strict\";var e={4567:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.AccessibilityManager=void 0;const n=i(9042),o=i(9924),a=i(844),h=i(4725),c=i(2585),l=i(3656);let d=t.AccessibilityManager=class extends a.Disposable{constructor(e,t,i,s){super(),this._terminal=e,this._coreBrowserService=i,this._renderService=s,this._rowColumns=new WeakMap,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce=\"\",this._accessibilityContainer=this._coreBrowserService.mainDocument.createElement(\"div\"),this._accessibilityContainer.classList.add(\"xterm-accessibility\"),this._rowContainer=this._coreBrowserService.mainDocument.createElement(\"div\"),this._rowContainer.setAttribute(\"role\",\"list\"),this._rowContainer.classList.add(\"xterm-accessibility-tree\"),this._rowElements=[];for(let e=0;ethis._handleBoundaryFocus(e,0),this._bottomBoundaryFocusListener=e=>this._handleBoundaryFocus(e,1),this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=this._coreBrowserService.mainDocument.createElement(\"div\"),this._liveRegion.classList.add(\"live-region\"),this._liveRegion.setAttribute(\"aria-live\",\"assertive\"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new o.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error(\"Cannot enable accessibility before Terminal.open\");this._terminal.element.insertAdjacentElement(\"afterbegin\",this._accessibilityContainer),this.register(this._terminal.onResize((e=>this._handleResize(e.rows)))),this.register(this._terminal.onRender((e=>this._refreshRows(e.start,e.end)))),this.register(this._terminal.onScroll((()=>this._refreshRows()))),this.register(this._terminal.onA11yChar((e=>this._handleChar(e)))),this.register(this._terminal.onLineFeed((()=>this._handleChar(\"\\n\")))),this.register(this._terminal.onA11yTab((e=>this._handleTab(e)))),this.register(this._terminal.onKey((e=>this._handleKey(e.key)))),this.register(this._terminal.onBlur((()=>this._clearLiveRegion()))),this.register(this._renderService.onDimensionsChange((()=>this._refreshRowsDimensions()))),this.register((0,l.addDisposableDomListener)(document,\"selectionchange\",(()=>this._handleSelectionChange()))),this.register(this._coreBrowserService.onDprChange((()=>this._refreshRowsDimensions()))),this._refreshRows(),this.register((0,a.toDisposable)((()=>{this._accessibilityContainer.remove(),this._rowElements.length=0})))}_handleTab(e){for(let t=0;t0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,\"\\n\"===e&&(this._liveRegionLineCount++,21===this._liveRegionLineCount&&(this._liveRegion.textContent+=n.tooMuchOutput)))}_clearLiveRegion(){this._liveRegion.textContent=\"\",this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){const i=this._terminal.buffer,s=i.lines.length.toString();for(let r=e;r<=t;r++){const e=i.lines.get(i.ydisp+r),t=[],n=e?.translateToString(!0,void 0,void 0,t)||\"\",o=(i.ydisp+r+1).toString(),a=this._rowElements[r];a&&(0===n.length?(a.innerText=\" \",this._rowColumns.set(a,[0,1])):(a.textContent=n,this._rowColumns.set(a,t)),a.setAttribute(\"aria-posinset\",o),a.setAttribute(\"aria-setsize\",s))}this._announceCharacters()}_announceCharacters(){0!==this._charsToAnnounce.length&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=\"\")}_handleBoundaryFocus(e,t){const i=e.target,s=this._rowElements[0===t?1:this._rowElements.length-2];if(i.getAttribute(\"aria-posinset\")===(0===t?\"1\":`${this._terminal.buffer.lines.length}`))return;if(e.relatedTarget!==s)return;let r,n;if(0===t?(r=i,n=this._rowElements.pop(),this._rowContainer.removeChild(n)):(r=this._rowElements.shift(),n=i,this._rowContainer.removeChild(r)),r.removeEventListener(\"focus\",this._topBoundaryFocusListener),n.removeEventListener(\"focus\",this._bottomBoundaryFocusListener),0===t){const e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement(\"afterbegin\",e)}else{const e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener(\"focus\",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._terminal.scrollLines(0===t?-1:1),this._rowElements[0===t?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(0===this._rowElements.length)return;const e=document.getSelection();if(!e)return;if(e.isCollapsed)return void(this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection());if(!e.anchorNode||!e.focusNode)return void console.error(\"anchorNode and/or focusNode are null\");let t={node:e.anchorNode,offset:e.anchorOffset},i={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(i.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===i.node&&t.offset>i.offset)&&([t,i]=[i,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;const s=this._rowElements.slice(-1)[0];if(i.node.compareDocumentPosition(s)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(i={node:s,offset:s.textContent?.length??0}),!this._rowContainer.contains(i.node))return;const r=({node:e,offset:t})=>{const i=e instanceof Text?e.parentNode:e;let s=parseInt(i?.getAttribute(\"aria-posinset\"),10)-1;if(isNaN(s))return console.warn(\"row is invalid. Race condition?\"),null;const r=this._rowColumns.get(i);if(!r)return console.warn(\"columns is null. Race condition?\"),null;let n=t=this._terminal.cols&&(++s,n=0),{row:s,column:n}},n=r(t),o=r(i);if(n&&o){if(n.row>o.row||n.row===o.row&&n.column>=o.column)throw new Error(\"invalid range\");this._terminal.select(n.column,n.row,(o.row-n.row)*this._terminal.cols-n.column+o.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(\"focus\",this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;ee;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(\"focus\",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const e=this._coreBrowserService.mainDocument.createElement(\"div\");return e.setAttribute(\"role\",\"listitem\"),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){this._accessibilityContainer.style.width=`${this._renderService.dimensions.css.canvas.width}px`,this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e{function i(e){return e.replace(/\\r?\\n/g,\"\\r\")}function s(e,t){return t?\"\u001b[200~\"+e+\"\u001b[201~\":e}function r(e,t,r,n){e=s(e=i(e),r.decPrivateModes.bracketedPasteMode&&!0!==n.rawOptions.ignoreBracketedPasteMode),r.triggerDataEvent(e,!0),t.value=\"\"}function n(e,t,i){const s=i.getBoundingClientRect(),r=e.clientX-s.left-10,n=e.clientY-s.top-10;t.style.width=\"20px\",t.style.height=\"20px\",t.style.left=`${r}px`,t.style.top=`${n}px`,t.style.zIndex=\"1000\",t.focus()}Object.defineProperty(t,\"__esModule\",{value:!0}),t.rightClickHandler=t.moveTextAreaUnderMouseCursor=t.paste=t.handlePasteEvent=t.copyHandler=t.bracketTextForPaste=t.prepareTextForTerminal=void 0,t.prepareTextForTerminal=i,t.bracketTextForPaste=s,t.copyHandler=function(e,t){e.clipboardData&&e.clipboardData.setData(\"text/plain\",t.selectionText),e.preventDefault()},t.handlePasteEvent=function(e,t,i,s){e.stopPropagation(),e.clipboardData&&r(e.clipboardData.getData(\"text/plain\"),t,i,s)},t.paste=r,t.moveTextAreaUnderMouseCursor=n,t.rightClickHandler=function(e,t,i,s,r){n(e,t,i),r&&s.rightClickSelect(e),t.value=s.selectionText,t.select()}},7239:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ColorContrastCache=void 0;const s=i(1505);t.ColorContrastCache=class{constructor(){this._color=new s.TwoKeyMap,this._css=new s.TwoKeyMap}setCss(e,t,i){this._css.set(e,t,i)}getCss(e,t){return this._css.get(e,t)}setColor(e,t,i){this._color.set(e,t,i)}getColor(e,t){return this._color.get(e,t)}clear(){this._color.clear(),this._css.clear()}}},3656:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.addDisposableDomListener=void 0,t.addDisposableDomListener=function(e,t,i,s){e.addEventListener(t,i,s);let r=!1;return{dispose:()=>{r||(r=!0,e.removeEventListener(t,i,s))}}}},3551:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Linkifier=void 0;const n=i(3656),o=i(8460),a=i(844),h=i(2585),c=i(4725);let l=t.Linkifier=class extends a.Disposable{get currentLink(){return this._currentLink}constructor(e,t,i,s,r){super(),this._element=e,this._mouseService=t,this._renderService=i,this._bufferService=s,this._linkProviderService=r,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this.register(new o.EventEmitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this.register(new o.EventEmitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this.register((0,a.getDisposeArrayDisposable)(this._linkCacheDisposables)),this.register((0,a.toDisposable)((()=>{this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()}))),this.register(this._bufferService.onResize((()=>{this._clearCurrentLink(),this._wasResized=!0}))),this.register((0,n.addDisposableDomListener)(this._element,\"mouseleave\",(()=>{this._isMouseOut=!0,this._clearCurrentLink()}))),this.register((0,n.addDisposableDomListener)(this._element,\"mousemove\",this._handleMouseMove.bind(this))),this.register((0,n.addDisposableDomListener)(this._element,\"mousedown\",this._handleMouseDown.bind(this))),this.register((0,n.addDisposableDomListener)(this._element,\"mouseup\",this._handleMouseUp.bind(this)))}_handleMouseMove(e){this._lastMouseEvent=e;const t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!t)return;this._isMouseOut=!1;const i=e.composedPath();for(let e=0;e{e?.forEach((e=>{e.link.dispose&&e.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);let i=!1;for(const[s,r]of this._linkProviderService.linkProviders.entries())if(t){const t=this._activeProviderReplies?.get(s);t&&(i=this._checkLinkProviderResult(s,e,i))}else r.provideLinks(e.y,(t=>{if(this._isMouseOut)return;const r=t?.map((e=>({link:e})));this._activeProviderReplies?.set(s,r),i=this._checkLinkProviderResult(s,e,i),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)}))}_removeIntersectingLinks(e,t){const i=new Set;for(let s=0;se?this._bufferService.cols:s.link.range.end.x;for(let e=n;e<=o;e++){if(i.has(e)){r.splice(t--,1);break}i.add(e)}}}}_checkLinkProviderResult(e,t,i){if(!this._activeProviderReplies)return i;const s=this._activeProviderReplies.get(e);let r=!1;for(let t=0;tthis._linkAtPosition(e.link,t)));e&&(i=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!i)for(let e=0;ethis._linkAtPosition(e.link,t)));if(s){i=!0,this._handleNewLink(s);break}}return i}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;const t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink===this._currentLink&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){this._currentLink&&this._lastMouseEvent&&(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,a.disposeArray)(this._linkCacheDisposables))}_handleNewLink(e){if(!this._lastMouseEvent)return;const t=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:void 0===e.link.decorations||e.link.decorations.underline,pointerCursor:void 0===e.link.decorations||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle(\"xterm-cursor-pointer\",e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange((e=>{if(!this._currentLink)return;const t=0===e.start?0:e.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(t,i),this._lastMouseEvent)){const e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._askForLink(e,!1)}}))))}_linkHover(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(\"xterm-cursor-pointer\")),t.hover&&t.hover(i,t.text)}_fireUnderlineEvent(e,t){const i=e.range,s=this._bufferService.buffer.ydisp,r=this._createLinkUnderlineEvent(i.start.x-1,i.start.y-s-1,i.end.x,i.end.y-s-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(r)}_linkLeave(e,t,i){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(\"xterm-cursor-pointer\")),t.leave&&t.leave(i,t.text)}_linkAtPosition(e,t){const i=e.range.start.y*this._bufferService.cols+e.range.start.x,s=e.range.end.y*this._bufferService.cols+e.range.end.x,r=t.y*this._bufferService.cols+t.x;return i<=r&&r<=s}_positionFromMouseEvent(e,t,i){const s=i.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(s)return{x:s[0],y:s[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,i,s,r){return{x1:e,y1:t,x2:i,y2:s,cols:this._bufferService.cols,fg:r}}};t.Linkifier=l=s([r(1,c.IMouseService),r(2,c.IRenderService),r(3,h.IBufferService),r(4,c.ILinkProviderService)],l)},9042:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.tooMuchOutput=t.promptLabel=void 0,t.promptLabel=\"Terminal input\",t.tooMuchOutput=\"Too much output to announce, navigate to rows manually to read\"},3730:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscLinkProvider=void 0;const n=i(511),o=i(2585);let a=t.OscLinkProvider=class{constructor(e,t,i){this._bufferService=e,this._optionsService=t,this._oscLinkService=i}provideLinks(e,t){const i=this._bufferService.buffer.lines.get(e-1);if(!i)return void t(void 0);const s=[],r=this._optionsService.rawOptions.linkHandler,o=new n.CellData,a=i.getTrimmedLength();let c=-1,l=-1,d=!1;for(let t=0;tr?r.activate(e,t,n):h(0,t),hover:(e,t)=>r?.hover?.(e,t,n),leave:(e,t)=>r?.leave?.(e,t,n)})}d=!1,o.hasExtendedAttrs()&&o.extended.urlId?(l=t,c=o.extended.urlId):(l=-1,c=-1)}}t(s)}};function h(e,t){if(confirm(`Do you want to navigate to ${t}?\\n\\nWARNING: This link could potentially be dangerous`)){const e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(\"Opening link blocked as opener could not be cleared\")}}t.OscLinkProvider=a=s([r(0,o.IBufferService),r(1,o.IOptionsService),r(2,o.IOscLinkService)],a)},6193:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.RenderDebouncer=void 0,t.RenderDebouncer=class{constructor(e,t){this._renderCallback=e,this._coreBrowserService=t,this._refreshCallbacks=[]}dispose(){this._animationFrame&&(this._coreBrowserService.window.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(e){return this._refreshCallbacks.push(e),this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh()))),this._animationFrame}refresh(e,t,i){this._rowCount=i,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t,this._animationFrame||(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._animationFrame=void 0,void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return void this._runRefreshCallbacks();const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const e of this._refreshCallbacks)e(0);this._refreshCallbacks=[]}}},3236:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Terminal=void 0;const s=i(3614),r=i(3656),n=i(3551),o=i(9042),a=i(3730),h=i(1680),c=i(3107),l=i(5744),d=i(2950),_=i(1296),u=i(428),f=i(4269),v=i(5114),p=i(8934),g=i(3230),m=i(9312),S=i(4725),C=i(6731),b=i(8055),w=i(8969),y=i(8460),E=i(844),k=i(6114),L=i(8437),D=i(2584),R=i(7399),x=i(5941),A=i(9074),B=i(2585),T=i(5435),M=i(4567),O=i(779);class P extends w.CoreTerminal{get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}constructor(e={}){super(e),this.browser=k,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this.register(new E.MutableDisposable),this._onCursorMove=this.register(new y.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onKey=this.register(new y.EventEmitter),this.onKey=this._onKey.event,this._onRender=this.register(new y.EventEmitter),this.onRender=this._onRender.event,this._onSelectionChange=this.register(new y.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this.register(new y.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onBell=this.register(new y.EventEmitter),this.onBell=this._onBell.event,this._onFocus=this.register(new y.EventEmitter),this._onBlur=this.register(new y.EventEmitter),this._onA11yCharEmitter=this.register(new y.EventEmitter),this._onA11yTabEmitter=this.register(new y.EventEmitter),this._onWillOpen=this.register(new y.EventEmitter),this._setup(),this._decorationService=this._instantiationService.createInstance(A.DecorationService),this._instantiationService.setService(B.IDecorationService,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(O.LinkProviderService),this._instantiationService.setService(S.ILinkProviderService,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(a.OscLinkProvider)),this.register(this._inputHandler.onRequestBell((()=>this._onBell.fire()))),this.register(this._inputHandler.onRequestRefreshRows(((e,t)=>this.refresh(e,t)))),this.register(this._inputHandler.onRequestSendFocus((()=>this._reportFocus()))),this.register(this._inputHandler.onRequestReset((()=>this.reset()))),this.register(this._inputHandler.onRequestWindowsOptionsReport((e=>this._reportWindowsOptions(e)))),this.register(this._inputHandler.onColor((e=>this._handleColorEvent(e)))),this.register((0,y.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,y.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,y.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,y.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this.register(this._bufferService.onResize((e=>this._afterResize(e.cols,e.rows)))),this.register((0,E.toDisposable)((()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)})))}_handleColorEvent(e){if(this._themeService)for(const t of e){let e,i=\"\";switch(t.index){case 256:e=\"foreground\",i=\"10\";break;case 257:e=\"background\",i=\"11\";break;case 258:e=\"cursor\",i=\"12\";break;default:e=\"ansi\",i=\"4;\"+t.index}switch(t.type){case 0:const s=b.color.toColorRGB(\"ansi\"===e?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`${D.C0.ESC}]${i};${(0,x.toRgbString)(s)}${D.C1_ESCAPED.ST}`);break;case 1:if(\"ansi\"===e)this._themeService.modifyColors((e=>e.ansi[t.index]=b.channels.toColor(...t.color)));else{const i=e;this._themeService.modifyColors((e=>e[i]=b.channels.toColor(...t.color)))}break;case 2:this._themeService.restoreColor(t.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(M.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(D.C0.ESC+\"[I\"),this.element.classList.add(\"focus\"),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=\"\",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(D.C0.ESC+\"[O\"),this.element.classList.remove(\"focus\"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;const i=Math.min(this.buffer.x,this.cols-1),s=this._renderService.dimensions.css.cell.height,r=t.getWidth(i),n=this._renderService.dimensions.css.cell.width*r,o=this.buffer.y*this._renderService.dimensions.css.cell.height,a=i*this._renderService.dimensions.css.cell.width;this.textarea.style.left=a+\"px\",this.textarea.style.top=o+\"px\",this.textarea.style.width=n+\"px\",this.textarea.style.height=s+\"px\",this.textarea.style.lineHeight=s+\"px\",this.textarea.style.zIndex=\"-5\"}_initGlobal(){this._bindKeys(),this.register((0,r.addDisposableDomListener)(this.element,\"copy\",(e=>{this.hasSelection()&&(0,s.copyHandler)(e,this._selectionService)})));const e=e=>(0,s.handlePasteEvent)(e,this.textarea,this.coreService,this.optionsService);this.register((0,r.addDisposableDomListener)(this.textarea,\"paste\",e)),this.register((0,r.addDisposableDomListener)(this.element,\"paste\",e)),k.isFirefox?this.register((0,r.addDisposableDomListener)(this.element,\"mousedown\",(e=>{2===e.button&&(0,s.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))):this.register((0,r.addDisposableDomListener)(this.element,\"contextmenu\",(e=>{(0,s.rightClickHandler)(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))),k.isLinux&&this.register((0,r.addDisposableDomListener)(this.element,\"auxclick\",(e=>{1===e.button&&(0,s.moveTextAreaUnderMouseCursor)(e,this.textarea,this.screenElement)})))}_bindKeys(){this.register((0,r.addDisposableDomListener)(this.textarea,\"keyup\",(e=>this._keyUp(e)),!0)),this.register((0,r.addDisposableDomListener)(this.textarea,\"keydown\",(e=>this._keyDown(e)),!0)),this.register((0,r.addDisposableDomListener)(this.textarea,\"keypress\",(e=>this._keyPress(e)),!0)),this.register((0,r.addDisposableDomListener)(this.textarea,\"compositionstart\",(()=>this._compositionHelper.compositionstart()))),this.register((0,r.addDisposableDomListener)(this.textarea,\"compositionupdate\",(e=>this._compositionHelper.compositionupdate(e)))),this.register((0,r.addDisposableDomListener)(this.textarea,\"compositionend\",(()=>this._compositionHelper.compositionend()))),this.register((0,r.addDisposableDomListener)(this.textarea,\"input\",(e=>this._inputEvent(e)),!0)),this.register(this.onRender((()=>this._compositionHelper.updateCompositionElements())))}open(e){if(!e)throw new Error(\"Terminal requires a parent element.\");if(e.isConnected||this._logService.debug(\"Terminal.open was called on an element that was not attached to the DOM\"),this.element?.ownerDocument.defaultView&&this._coreBrowserService)return void(this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView));this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(\"div\"),this.element.dir=\"ltr\",this.element.classList.add(\"terminal\"),this.element.classList.add(\"xterm\"),e.appendChild(this.element);const t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(\"div\"),this._viewportElement.classList.add(\"xterm-viewport\"),t.appendChild(this._viewportElement),this._viewportScrollArea=this._document.createElement(\"div\"),this._viewportScrollArea.classList.add(\"xterm-scroll-area\"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=this._document.createElement(\"div\"),this.screenElement.classList.add(\"xterm-screen\"),this.register((0,r.addDisposableDomListener)(this.screenElement,\"mousemove\",(e=>this.updateCursorStyle(e)))),this._helperContainer=this._document.createElement(\"div\"),this._helperContainer.classList.add(\"xterm-helpers\"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement),this.textarea=this._document.createElement(\"textarea\"),this.textarea.classList.add(\"xterm-helper-textarea\"),this.textarea.setAttribute(\"aria-label\",o.promptLabel),k.isChromeOS||this.textarea.setAttribute(\"aria-multiline\",\"false\"),this.textarea.setAttribute(\"autocorrect\",\"off\"),this.textarea.setAttribute(\"autocapitalize\",\"off\"),this.textarea.setAttribute(\"spellcheck\",\"false\"),this.textarea.tabIndex=0,this._coreBrowserService=this.register(this._instantiationService.createInstance(v.CoreBrowserService,this.textarea,e.ownerDocument.defaultView??window,this._document??\"undefined\"!=typeof window?window.document:null)),this._instantiationService.setService(S.ICoreBrowserService,this._coreBrowserService),this.register((0,r.addDisposableDomListener)(this.textarea,\"focus\",(e=>this._handleTextAreaFocus(e)))),this.register((0,r.addDisposableDomListener)(this.textarea,\"blur\",(()=>this._handleTextAreaBlur()))),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(u.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(S.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(C.ThemeService),this._instantiationService.setService(S.IThemeService,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(f.CharacterJoinerService),this._instantiationService.setService(S.ICharacterJoinerService,this._characterJoinerService),this._renderService=this.register(this._instantiationService.createInstance(g.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(S.IRenderService,this._renderService),this.register(this._renderService.onRenderedViewportChange((e=>this._onRender.fire(e)))),this.onResize((e=>this._renderService.resize(e.cols,e.rows))),this._compositionView=this._document.createElement(\"div\"),this._compositionView.classList.add(\"composition-view\"),this._compositionHelper=this._instantiationService.createInstance(d.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(p.MouseService),this._instantiationService.setService(S.IMouseService,this._mouseService),this.linkifier=this.register(this._instantiationService.createInstance(n.Linkifier,this.screenElement)),this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this.viewport=this._instantiationService.createInstance(h.Viewport,this._viewportElement,this._viewportScrollArea),this.viewport.onRequestScrollLines((e=>this.scrollLines(e.amount,e.suppressScrollEvent,1))),this.register(this._inputHandler.onRequestSyncScrollBar((()=>this.viewport.syncScrollArea()))),this.register(this.viewport),this.register(this.onCursorMove((()=>{this._renderService.handleCursorMove(),this._syncTextArea()}))),this.register(this.onResize((()=>this._renderService.handleResize(this.cols,this.rows)))),this.register(this.onBlur((()=>this._renderService.handleBlur()))),this.register(this.onFocus((()=>this._renderService.handleFocus()))),this.register(this._renderService.onDimensionsChange((()=>this.viewport.syncScrollArea()))),this._selectionService=this.register(this._instantiationService.createInstance(m.SelectionService,this.element,this.screenElement,this.linkifier)),this._instantiationService.setService(S.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((e=>this.scrollLines(e.amount,e.suppressScrollEvent)))),this.register(this._selectionService.onSelectionChange((()=>this._onSelectionChange.fire()))),this.register(this._selectionService.onRequestRedraw((e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode)))),this.register(this._selectionService.onLinuxMouseSelection((e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()}))),this.register(this._onScroll.event((e=>{this.viewport.syncScrollArea(),this._selectionService.refresh()}))),this.register((0,r.addDisposableDomListener)(this._viewportElement,\"scroll\",(()=>this._selectionService.refresh()))),this.register(this._instantiationService.createInstance(c.BufferDecorationRenderer,this.screenElement)),this.register((0,r.addDisposableDomListener)(this.element,\"mousedown\",(e=>this._selectionService.handleMouseDown(e)))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(\"enable-mouse-events\")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(M.AccessibilityManager,this)),this.register(this.optionsService.onSpecificOptionChange(\"screenReaderMode\",(e=>this._handleScreenReaderModeOptionChange(e)))),this.options.overviewRulerWidth&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(l.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(\"overviewRulerWidth\",(e=>{!this._overviewRulerRenderer&&e&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(l.OverviewRulerRenderer,this._viewportElement,this.screenElement)))})),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(_.DomRenderer,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){const e=this,t=this.element;function i(t){const i=e._mouseService.getMouseReportCoords(t,e.screenElement);if(!i)return!1;let s,r;switch(t.overrideType||t.type){case\"mousemove\":r=32,void 0===t.buttons?(s=3,void 0!==t.button&&(s=t.button<3?t.button:3)):s=1&t.buttons?0:4&t.buttons?1:2&t.buttons?2:3;break;case\"mouseup\":r=0,s=t.button<3?t.button:3;break;case\"mousedown\":r=1,s=t.button<3?t.button:3;break;case\"wheel\":if(e._customWheelEventHandler&&!1===e._customWheelEventHandler(t))return!1;if(0===e.viewport.getLinesScrolled(t))return!1;r=t.deltaY<0?0:1,s=4;break;default:return!1}return!(void 0===r||void 0===s||s>4)&&e.coreMouseService.triggerMouseEvent({col:i.col,row:i.row,x:i.x,y:i.y,button:s,action:r,ctrl:t.ctrlKey,alt:t.altKey,shift:t.shiftKey})}const s={mouseup:null,wheel:null,mousedrag:null,mousemove:null},n={mouseup:e=>(i(e),e.buttons||(this._document.removeEventListener(\"mouseup\",s.mouseup),s.mousedrag&&this._document.removeEventListener(\"mousemove\",s.mousedrag)),this.cancel(e)),wheel:e=>(i(e),this.cancel(e,!0)),mousedrag:e=>{e.buttons&&i(e)},mousemove:e=>{e.buttons||i(e)}};this.register(this.coreMouseService.onProtocolChange((e=>{e?(\"debug\"===this.optionsService.rawOptions.logLevel&&this._logService.debug(\"Binding to mouse events:\",this.coreMouseService.explainEvents(e)),this.element.classList.add(\"enable-mouse-events\"),this._selectionService.disable()):(this._logService.debug(\"Unbinding from mouse events.\"),this.element.classList.remove(\"enable-mouse-events\"),this._selectionService.enable()),8&e?s.mousemove||(t.addEventListener(\"mousemove\",n.mousemove),s.mousemove=n.mousemove):(t.removeEventListener(\"mousemove\",s.mousemove),s.mousemove=null),16&e?s.wheel||(t.addEventListener(\"wheel\",n.wheel,{passive:!1}),s.wheel=n.wheel):(t.removeEventListener(\"wheel\",s.wheel),s.wheel=null),2&e?s.mouseup||(s.mouseup=n.mouseup):(this._document.removeEventListener(\"mouseup\",s.mouseup),s.mouseup=null),4&e?s.mousedrag||(s.mousedrag=n.mousedrag):(this._document.removeEventListener(\"mousemove\",s.mousedrag),s.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,r.addDisposableDomListener)(t,\"mousedown\",(e=>{if(e.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(e))return i(e),s.mouseup&&this._document.addEventListener(\"mouseup\",s.mouseup),s.mousedrag&&this._document.addEventListener(\"mousemove\",s.mousedrag),this.cancel(e)}))),this.register((0,r.addDisposableDomListener)(t,\"wheel\",(e=>{if(!s.wheel){if(this._customWheelEventHandler&&!1===this._customWheelEventHandler(e))return!1;if(!this.buffer.hasScrollback){const t=this.viewport.getLinesScrolled(e);if(0===t)return;const i=D.C0.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?\"O\":\"[\")+(e.deltaY<0?\"A\":\"B\");let s=\"\";for(let e=0;e{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchStart(e),this.cancel(e)}),{passive:!0})),this.register((0,r.addDisposableDomListener)(t,\"touchmove\",(e=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchMove(e)?void 0:this.cancel(e)}),{passive:!1}))}refresh(e,t){this._renderService?.refreshRows(e,t)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(\"column-select\"):this.element.classList.remove(\"column-select\")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t,i=0){1===i?(super.scrollLines(e,t,i),this.refresh(0,this.rows-1)):this.viewport?.scrollLines(e)}paste(e){(0,s.paste)(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw new Error(\"Terminal must be opened first\");const t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw new Error(\"Terminal must be opened first\");this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(e,t,i){this._selectionService.setSelection(e,t,i)}getSelection(){return this._selectionService?this._selectionService.selectionText:\"\"}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;const t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;t||\"Dead\"!==e.key&&\"AltGraph\"!==e.key||(this._unprocessedDeadKey=!0);const i=(0,R.evaluateKeyboardEvent)(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),3===i.type||2===i.type){const t=this.rows-1;return this.scrollLines(2===i.type?-t:t),this.cancel(e,!0)}return 1===i.type&&this.selectAll(),!!this._isThirdLevelShift(this.browser,e)||(i.cancel&&this.cancel(e,!0),!i.key||!!(e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&1===e.key.length&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(i.key!==D.C0.ETX&&i.key!==D.C0.CR||(this.textarea.value=\"\"),this._onKey.fire({key:i.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(i.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey?this.cancel(e,!0):void(this._keyDownHandled=!0))))}_isThirdLevelShift(e,t){const i=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState(\"AltGraph\");return\"keypress\"===t.type?i:i&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,this._customKeyEventHandler&&!1===this._customKeyEventHandler(e)||(function(e){return 16===e.keyCode||17===e.keyCode||18===e.keyCode}(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled)return!1;if(this._customKeyEventHandler&&!1===this._customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null===e.which||void 0===e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)||(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(e){if(e.data&&\"insertText\"===e.inputType&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1}resize(e,t){e!==this.cols||t!==this.rows?super.resize(e,t):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(e,t){this._charSizeService?.measure(),this.viewport?.syncScrollArea(!0)}clear(){if(0!==this.buffer.ybase||0!==this.buffer.y){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.TimeBasedDebouncer=void 0,t.TimeBasedDebouncer=class{constructor(e,t=1e3){this._renderCallback=e,this._debounceThresholdMS=t,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(e,t,i){this._rowCount=i,e=void 0!==e?e:0,t=void 0!==t?t:this._rowCount-1,this._rowStart=void 0!==this._rowStart?Math.min(this._rowStart,e):e,this._rowEnd=void 0!==this._rowEnd?Math.max(this._rowEnd,t):t;const s=Date.now();if(s-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=s,this._innerRefresh();else if(!this._additionalRefreshRequested){const e=s-this._lastRefreshMs,t=this._debounceThresholdMS-e;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((()=>{this._lastRefreshMs=Date.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0}),t)}}_innerRefresh(){if(void 0===this._rowStart||void 0===this._rowEnd||void 0===this._rowCount)return;const e=Math.max(this._rowStart,0),t=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(e,t)}}},1680:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.Viewport=void 0;const n=i(3656),o=i(4725),a=i(8460),h=i(844),c=i(2585);let l=t.Viewport=class extends h.Disposable{constructor(e,t,i,s,r,o,h,c){super(),this._viewportElement=e,this._scrollArea=t,this._bufferService=i,this._optionsService=s,this._charSizeService=r,this._renderService=o,this._coreBrowserService=h,this.scrollBarWidth=0,this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._wheelPartialScroll=0,this._refreshAnimationFrame=null,this._ignoreNextScrollEvent=!1,this._smoothScrollState={startTime:0,origin:-1,target:-1},this._onRequestScrollLines=this.register(new a.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this.register((0,n.addDisposableDomListener)(this._viewportElement,\"scroll\",this._handleScroll.bind(this))),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((e=>this._activeBuffer=e.activeBuffer))),this._renderDimensions=this._renderService.dimensions,this.register(this._renderService.onDimensionsChange((e=>this._renderDimensions=e))),this._handleThemeChange(c.colors),this.register(c.onChangeColors((e=>this._handleThemeChange(e)))),this.register(this._optionsService.onSpecificOptionChange(\"scrollback\",(()=>this.syncScrollArea()))),setTimeout((()=>this.syncScrollArea()))}_handleThemeChange(e){this._viewportElement.style.backgroundColor=e.background.css}reset(){this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._coreBrowserService.window.requestAnimationFrame((()=>this.syncScrollArea()))}_refresh(e){if(e)return this._innerRefresh(),void(null!==this._refreshAnimationFrame&&this._coreBrowserService.window.cancelAnimationFrame(this._refreshAnimationFrame));null===this._refreshAnimationFrame&&(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderDimensions.device.cell.height/this._coreBrowserService.dpr,this._currentDeviceCellHeight=this._renderDimensions.device.cell.height,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;const e=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderDimensions.css.canvas.height);this._lastRecordedBufferHeight!==e&&(this._lastRecordedBufferHeight=e,this._scrollArea.style.height=this._lastRecordedBufferHeight+\"px\")}const e=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==e&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=e),this._refreshAnimationFrame=null}syncScrollArea(e=!1){if(this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(e);this._lastRecordedViewportHeight===this._renderService.dimensions.css.canvas.height&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.device.cell.height===this._currentDeviceCellHeight||this._refresh(e)}_handleScroll(e){if(this._lastScrollTop=this._viewportElement.scrollTop,!this._viewportElement.offsetParent)return;if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._onRequestScrollLines.fire({amount:0,suppressScrollEvent:!0});const t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._onRequestScrollLines.fire({amount:t,suppressScrollEvent:!0})}_smoothScroll(){if(this._isDisposed||-1===this._smoothScrollState.origin||-1===this._smoothScrollState.target)return;const e=this._smoothScrollPercent();this._viewportElement.scrollTop=this._smoothScrollState.origin+Math.round(e*(this._smoothScrollState.target-this._smoothScrollState.origin)),e<1?this._coreBrowserService.window.requestAnimationFrame((()=>this._smoothScroll())):this._clearSmoothScrollState()}_smoothScrollPercent(){return this._optionsService.rawOptions.smoothScrollDuration&&this._smoothScrollState.startTime?Math.max(Math.min((Date.now()-this._smoothScrollState.startTime)/this._optionsService.rawOptions.smoothScrollDuration,1),0):1}_clearSmoothScrollState(){this._smoothScrollState.startTime=0,this._smoothScrollState.origin=-1,this._smoothScrollState.target=-1}_bubbleScroll(e,t){const i=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&0!==this._viewportElement.scrollTop||t>0&&i0&&(i=e),s=\"\"}}return{bufferElements:r,cursorElement:i}}getLinesScrolled(e){if(0===e.deltaY||e.shiftKey)return 0;let t=this._applyScrollModifier(e.deltaY,e);return e.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t}_applyScrollModifier(e,t){const i=this._optionsService.rawOptions.fastScrollModifier;return\"alt\"===i&&t.altKey||\"ctrl\"===i&&t.ctrlKey||\"shift\"===i&&t.shiftKey?e*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:e*this._optionsService.rawOptions.scrollSensitivity}handleTouchStart(e){this._lastTouchY=e.touches[0].pageY}handleTouchMove(e){const t=this._lastTouchY-e.touches[0].pageY;return this._lastTouchY=e.touches[0].pageY,0!==t&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(e,t))}};t.Viewport=l=s([r(2,c.IBufferService),r(3,c.IOptionsService),r(4,o.ICharSizeService),r(5,o.IRenderService),r(6,o.ICoreBrowserService),r(7,o.IThemeService)],l)},3107:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferDecorationRenderer=void 0;const n=i(4725),o=i(844),a=i(2585);let h=t.BufferDecorationRenderer=class extends o.Disposable{constructor(e,t,i,s,r){super(),this._screenElement=e,this._bufferService=t,this._coreBrowserService=i,this._decorationService=s,this._renderService=r,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement(\"div\"),this._container.classList.add(\"xterm-decoration-container\"),this._screenElement.appendChild(this._container),this.register(this._renderService.onRenderedViewportChange((()=>this._doRefreshDecorations()))),this.register(this._renderService.onDimensionsChange((()=>{this._dimensionsChanged=!0,this._queueRefresh()}))),this.register(this._coreBrowserService.onDprChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt}))),this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh()))),this.register(this._decorationService.onDecorationRemoved((e=>this._removeDecoration(e)))),this.register((0,o.toDisposable)((()=>{this._container.remove(),this._decorationElements.clear()})))}_queueRefresh(){void 0===this._animationFrame&&(this._animationFrame=this._renderService.addRefreshCallback((()=>{this._doRefreshDecorations(),this._animationFrame=void 0})))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){const t=this._coreBrowserService.mainDocument.createElement(\"div\");t.classList.add(\"xterm-decoration\"),t.classList.toggle(\"xterm-decoration-top-layer\",\"top\"===e?.options?.layer),t.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,t.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+\"px\",t.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+\"px\",t.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const i=e.options.x??0;return i&&i>this._bufferService.cols&&(t.style.display=\"none\"),this._refreshXPosition(e,t),t}_refreshStyle(e){const t=e.marker.line-this._bufferService.buffers.active.ydisp;if(t<0||t>=this._bufferService.rows)e.element&&(e.element.style.display=\"none\",e.onRenderEmitter.fire(e.element));else{let i=this._decorationElements.get(e);i||(i=this._createElement(e),e.element=i,this._decorationElements.set(e,i),this._container.appendChild(i),e.onDispose((()=>{this._decorationElements.delete(e),i.remove()}))),i.style.top=t*this._renderService.dimensions.css.cell.height+\"px\",i.style.display=this._altBufferIsActive?\"none\":\"block\",e.onRenderEmitter.fire(i)}}_refreshXPosition(e,t=e.element){if(!t)return;const i=e.options.x??0;\"right\"===(e.options.anchor||\"left\")?t.style.right=i?i*this._renderService.dimensions.css.cell.width+\"px\":\"\":t.style.left=i?i*this._renderService.dimensions.css.cell.width+\"px\":\"\"}_removeDecoration(e){this._decorationElements.get(e)?.remove(),this._decorationElements.delete(e),e.dispose()}};t.BufferDecorationRenderer=h=s([r(1,a.IBufferService),r(2,n.ICoreBrowserService),r(3,a.IDecorationService),r(4,n.IRenderService)],h)},5871:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ColorZoneStore=void 0,t.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(e){if(e.options.overviewRulerOptions){for(const t of this._zones)if(t.color===e.options.overviewRulerOptions.color&&t.position===e.options.overviewRulerOptions.position){if(this._lineIntersectsZone(t,e.marker.line))return;if(this._lineAdjacentToZone(t,e.marker.line,e.options.overviewRulerOptions.position))return void this._addLineToZone(t,e.marker.line)}if(this._zonePoolIndex=e.startBufferLine&&t<=e.endBufferLine}_lineAdjacentToZone(e,t,i){return t>=e.startBufferLine-this._linePadding[i||\"full\"]&&t<=e.endBufferLine+this._linePadding[i||\"full\"]}_addLineToZone(e,t){e.startBufferLine=Math.min(e.startBufferLine,t),e.endBufferLine=Math.max(e.endBufferLine,t)}}},5744:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OverviewRulerRenderer=void 0;const n=i(5871),o=i(4725),a=i(844),h=i(2585),c={full:0,left:0,center:0,right:0},l={full:0,left:0,center:0,right:0},d={full:0,left:0,center:0,right:0};let _=t.OverviewRulerRenderer=class extends a.Disposable{get _width(){return this._optionsService.options.overviewRulerWidth||0}constructor(e,t,i,s,r,o,h){super(),this._viewportElement=e,this._screenElement=t,this._bufferService=i,this._decorationService=s,this._renderService=r,this._optionsService=o,this._coreBrowserService=h,this._colorZoneStore=new n.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=this._coreBrowserService.mainDocument.createElement(\"canvas\"),this._canvas.classList.add(\"xterm-decoration-overview-ruler\"),this._refreshCanvasDimensions(),this._viewportElement.parentElement?.insertBefore(this._canvas,this._viewportElement);const c=this._canvas.getContext(\"2d\");if(!c)throw new Error(\"Ctx cannot be null\");this._ctx=c,this._registerDecorationListeners(),this._registerBufferChangeListeners(),this._registerDimensionChangeListeners(),this.register((0,a.toDisposable)((()=>{this._canvas?.remove()})))}_registerDecorationListeners(){this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh(void 0,!0)))),this.register(this._decorationService.onDecorationRemoved((()=>this._queueRefresh(void 0,!0))))}_registerBufferChangeListeners(){this.register(this._renderService.onRenderedViewportChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?\"none\":\"block\"}))),this.register(this._bufferService.onScroll((()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})))}_registerDimensionChangeListeners(){this.register(this._renderService.onRender((()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)}))),this.register(this._optionsService.onSpecificOptionChange(\"overviewRulerWidth\",(()=>this._queueRefresh(!0)))),this.register(this._coreBrowserService.onDprChange((()=>this._queueRefresh(!0)))),this._queueRefresh(!0)}_refreshDrawConstants(){const e=Math.floor(this._canvas.width/3),t=Math.ceil(this._canvas.width/3);l.full=this._canvas.width,l.left=e,l.center=t,l.right=e,this._refreshDrawHeightConstants(),d.full=0,d.left=0,d.center=l.left,d.right=l.left+l.center}_refreshDrawHeightConstants(){c.full=Math.round(2*this._coreBrowserService.dpr);const e=this._canvas.height/this._bufferService.buffer.lines.length,t=Math.round(Math.max(Math.min(e,12),6)*this._coreBrowserService.dpr);c.left=t,c.center=t,c.right=t}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*c.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowserService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowserService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const e of this._decorationService.decorations)this._colorZoneStore.addDecoration(e);this._ctx.lineWidth=1;const e=this._colorZoneStore.zones;for(const t of e)\"full\"!==t.position&&this._renderColorZone(t);for(const t of e)\"full\"===t.position&&this._renderColorZone(t);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderColorZone(e){this._ctx.fillStyle=e.color,this._ctx.fillRect(d[e.position||\"full\"],Math.round((this._canvas.height-1)*(e.startBufferLine/this._bufferService.buffers.active.lines.length)-c[e.position||\"full\"]/2),l[e.position||\"full\"],Math.round((this._canvas.height-1)*((e.endBufferLine-e.startBufferLine)/this._bufferService.buffers.active.lines.length)+c[e.position||\"full\"]))}_queueRefresh(e,t){this._shouldUpdateDimensions=e||this._shouldUpdateDimensions,this._shouldUpdateAnchor=t||this._shouldUpdateAnchor,void 0===this._animationFrame&&(this._animationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>{this._refreshDecorations(),this._animationFrame=void 0})))}};t.OverviewRulerRenderer=_=s([r(2,h.IBufferService),r(3,h.IDecorationService),r(4,o.IRenderService),r(5,h.IOptionsService),r(6,o.ICoreBrowserService)],_)},2950:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CompositionHelper=void 0;const n=i(4725),o=i(2585),a=i(2584);let h=t.CompositionHelper=class{get isComposing(){return this._isComposing}constructor(e,t,i,s,r,n){this._textarea=e,this._compositionView=t,this._bufferService=i,this._optionsService=s,this._coreService=r,this._renderService=n,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=\"\"}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent=\"\",this._dataAlreadySent=\"\",this._compositionView.classList.add(\"active\")}compositionupdate(e){this._compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout((()=>{this._compositionPosition.end=this._textarea.value.length}),0)}compositionend(){this._finalizeComposition(!0)}keydown(e){if(this._isComposing||this._isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this._finalizeComposition(!1)}return 229!==e.keyCode||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(e){if(this._compositionView.classList.remove(\"active\"),this._isComposing=!1,e){const e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((()=>{if(this._isSendingComposition){let t;this._isSendingComposition=!1,e.start+=this._dataAlreadySent.length,t=this._isComposing?this._textarea.value.substring(e.start,e.end):this._textarea.value.substring(e.start),t.length>0&&this._coreService.triggerDataEvent(t,!0)}}),0)}else{this._isSendingComposition=!1;const e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){const e=this._textarea.value;setTimeout((()=>{if(!this._isComposing){const t=this._textarea.value,i=t.replace(e,\"\");this._dataAlreadySent=i,t.length>e.length?this._coreService.triggerDataEvent(i,!0):t.lengththis.updateCompositionElements(!0)),0)}}};t.CompositionHelper=h=s([r(2,o.IBufferService),r(3,o.IOptionsService),r(4,o.ICoreService),r(5,n.IRenderService)],h)},9806:(e,t)=>{function i(e,t,i){const s=i.getBoundingClientRect(),r=e.getComputedStyle(i),n=parseInt(r.getPropertyValue(\"padding-left\")),o=parseInt(r.getPropertyValue(\"padding-top\"));return[t.clientX-s.left-n,t.clientY-s.top-o]}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getCoords=t.getCoordsRelativeToElement=void 0,t.getCoordsRelativeToElement=i,t.getCoords=function(e,t,s,r,n,o,a,h,c){if(!o)return;const l=i(e,t,s);return l?(l[0]=Math.ceil((l[0]+(c?a/2:0))/a),l[1]=Math.ceil(l[1]/h),l[0]=Math.min(Math.max(l[0],1),r+(c?1:0)),l[1]=Math.min(Math.max(l[1],1),n),l):void 0}},9504:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.moveToCellSequence=void 0;const s=i(2584);function r(e,t,i,s){const r=e-n(e,i),a=t-n(t,i),l=Math.abs(r-a)-function(e,t,i){let s=0;const r=e-n(e,i),a=t-n(t,i);for(let n=0;n=0&&et?\"A\":\"B\"}function a(e,t,i,s,r,n){let o=e,a=t,h=\"\";for(;o!==i||a!==s;)o+=r?1:-1,r&&o>n.cols-1?(h+=n.buffer.translateBufferLineToString(a,!1,e,o),o=0,e=0,a++):!r&&o<0&&(h+=n.buffer.translateBufferLineToString(a,!1,0,e+1),o=n.cols-1,e=o,a--);return h+n.buffer.translateBufferLineToString(a,!1,e,o)}function h(e,t){const i=t?\"O\":\"[\";return s.C0.ESC+i+e}function c(e,t){e=Math.floor(e);let i=\"\";for(let s=0;s0?s-n(s,o):t;const _=s,u=function(e,t,i,s,o,a){let h;return h=r(i,s,o,a).length>0?s-n(s,o):t,e=i&&he?\"D\":\"C\",c(Math.abs(o-e),h(d,s));d=l>t?\"D\":\"C\";const _=Math.abs(l-t);return c(function(e,t){return t.cols-e}(l>t?e:o,i)+(_-1)*i.cols+1+((l>t?o:e)-1),h(d,s))}},1296:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.DomRenderer=void 0;const n=i(3787),o=i(2550),a=i(2223),h=i(6171),c=i(6052),l=i(4725),d=i(8055),_=i(8460),u=i(844),f=i(2585),v=\"xterm-dom-renderer-owner-\",p=\"xterm-rows\",g=\"xterm-fg-\",m=\"xterm-bg-\",S=\"xterm-focus\",C=\"xterm-selection\";let b=1,w=t.DomRenderer=class extends u.Disposable{constructor(e,t,i,s,r,a,l,d,f,g,m,S,w){super(),this._terminal=e,this._document=t,this._element=i,this._screenElement=s,this._viewportElement=r,this._helperContainer=a,this._linkifier2=l,this._charSizeService=f,this._optionsService=g,this._bufferService=m,this._coreBrowserService=S,this._themeService=w,this._terminalClass=b++,this._rowElements=[],this._selectionRenderModel=(0,c.createSelectionRenderModel)(),this.onRequestRedraw=this.register(new _.EventEmitter).event,this._rowContainer=this._document.createElement(\"div\"),this._rowContainer.classList.add(p),this._rowContainer.style.lineHeight=\"normal\",this._rowContainer.setAttribute(\"aria-hidden\",\"true\"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=this._document.createElement(\"div\"),this._selectionContainer.classList.add(C),this._selectionContainer.setAttribute(\"aria-hidden\",\"true\"),this.dimensions=(0,h.createRenderDimensions)(),this._updateDimensions(),this.register(this._optionsService.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._themeService.onChangeColors((e=>this._injectCss(e)))),this._injectCss(this._themeService.colors),this._rowFactory=d.createInstance(n.DomRendererRowFactory,document),this._element.classList.add(v+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this.register(this._linkifier2.onShowLinkUnderline((e=>this._handleLinkHover(e)))),this.register(this._linkifier2.onHideLinkUnderline((e=>this._handleLinkLeave(e)))),this.register((0,u.toDisposable)((()=>{this._element.classList.remove(v+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()}))),this._widthCache=new o.WidthCache(this._document,this._helperContainer),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const e=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*e,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*e),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/e),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/e),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const e of this._rowElements)e.style.width=`${this.dimensions.css.canvas.width}px`,e.style.height=`${this.dimensions.css.cell.height}px`,e.style.lineHeight=`${this.dimensions.css.cell.height}px`,e.style.overflow=\"hidden\";this._dimensionsStyleElement||(this._dimensionsStyleElement=this._document.createElement(\"style\"),this._screenElement.appendChild(this._dimensionsStyleElement));const t=`${this._terminalSelector} .${p} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=t,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(e){this._themeStyleElement||(this._themeStyleElement=this._document.createElement(\"style\"),this._screenElement.appendChild(this._themeStyleElement));let t=`${this._terminalSelector} .${p} { color: ${e.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;t+=`${this._terminalSelector} .${p} .xterm-dim { color: ${d.color.multiplyOpacity(e.foreground,.5).css};}`,t+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`;const i=`blink_underline_${this._terminalClass}`,s=`blink_bar_${this._terminalClass}`,r=`blink_block_${this._terminalClass}`;t+=`@keyframes ${i} { 50% { border-bottom-style: hidden; }}`,t+=`@keyframes ${s} { 50% { box-shadow: none; }}`,t+=`@keyframes ${r} { 0% { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css}; } 50% { background-color: inherit; color: ${e.cursor.css}; }}`,t+=`${this._terminalSelector} .${p}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-underline { animation: ${i} 1s step-end infinite;}${this._terminalSelector} .${p}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-bar { animation: ${s} 1s step-end infinite;}${this._terminalSelector} .${p}.${S} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: ${r} 1s step-end infinite;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-block { background-color: ${e.cursor.css}; color: ${e.cursorAccent.css};}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-block:not(.xterm-cursor-blink) { background-color: ${e.cursor.css} !important; color: ${e.cursorAccent.css} !important;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${e.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${e.cursor.css} inset;}${this._terminalSelector} .${p} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${e.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,t+=`${this._terminalSelector} .${C} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${C} div { position: absolute; background-color: ${e.selectionBackgroundOpaque.css};}${this._terminalSelector} .${C} div { position: absolute; background-color: ${e.selectionInactiveBackgroundOpaque.css};}`;for(const[i,s]of e.ansi.entries())t+=`${this._terminalSelector} .${g}${i} { color: ${s.css}; }${this._terminalSelector} .${g}${i}.xterm-dim { color: ${d.color.multiplyOpacity(s,.5).css}; }${this._terminalSelector} .${m}${i} { background-color: ${s.css}; }`;t+=`${this._terminalSelector} .${g}${a.INVERTED_DEFAULT_COLOR} { color: ${d.color.opaque(e.background).css}; }${this._terminalSelector} .${g}${a.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${d.color.multiplyOpacity(d.color.opaque(e.background),.5).css}; }${this._terminalSelector} .${m}${a.INVERTED_DEFAULT_COLOR} { background-color: ${e.foreground.css}; }`,this._themeStyleElement.textContent=t}_setDefaultSpacing(){const e=this.dimensions.css.cell.width-this._widthCache.get(\"W\",!1,!1);this._rowContainer.style.letterSpacing=`${e}px`,this._rowFactory.defaultSpacing=e}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(e,t){for(let e=this._rowElements.length;e<=t;e++){const e=this._document.createElement(\"div\");this._rowContainer.appendChild(e),this._rowElements.push(e)}for(;this._rowElements.length>t;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(e,t){this._refreshRowElements(e,t),this._updateDimensions(),this.handleSelectionChanged(this._selectionRenderModel.selectionStart,this._selectionRenderModel.selectionEnd,this._selectionRenderModel.columnSelectMode)}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(S),this.renderRows(0,this._bufferService.rows-1)}handleFocus(){this._rowContainer.classList.add(S),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(e,t,i){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(e,t,i),this.renderRows(0,this._bufferService.rows-1),!e||!t)return;this._selectionRenderModel.update(this._terminal,e,t,i);const s=this._selectionRenderModel.viewportStartRow,r=this._selectionRenderModel.viewportEndRow,n=this._selectionRenderModel.viewportCappedStartRow,o=this._selectionRenderModel.viewportCappedEndRow;if(n>=this._bufferService.rows||o<0)return;const a=this._document.createDocumentFragment();if(i){const i=e[0]>t[0];a.appendChild(this._createSelectionElement(n,i?t[0]:e[0],i?e[0]:t[0],o-n+1))}else{const i=s===n?e[0]:0,h=n===r?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(n,i,h));const c=o-n-1;if(a.appendChild(this._createSelectionElement(n+1,0,this._bufferService.cols,c)),n!==o){const e=r===o?t[0]:this._bufferService.cols;a.appendChild(this._createSelectionElement(o,0,e))}}this._selectionContainer.appendChild(a)}_createSelectionElement(e,t,i,s=1){const r=this._document.createElement(\"div\"),n=t*this.dimensions.css.cell.width;let o=this.dimensions.css.cell.width*(i-t);return n+o>this.dimensions.css.canvas.width&&(o=this.dimensions.css.canvas.width-n),r.style.height=s*this.dimensions.css.cell.height+\"px\",r.style.top=e*this.dimensions.css.cell.height+\"px\",r.style.left=`${n}px`,r.style.width=`${o}px`,r}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const e of this._rowElements)e.replaceChildren()}renderRows(e,t){const i=this._bufferService.buffer,s=i.ybase+i.y,r=Math.min(i.x,this._bufferService.cols-1),n=this._optionsService.rawOptions.cursorBlink,o=this._optionsService.rawOptions.cursorStyle,a=this._optionsService.rawOptions.cursorInactiveStyle;for(let h=e;h<=t;h++){const e=h+i.ydisp,t=this._rowElements[h],c=i.lines.get(e);if(!t||!c)break;t.replaceChildren(...this._rowFactory.createRow(c,e,e===s,o,a,r,n,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${v}${this._terminalClass}`}_handleLinkHover(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!0)}_handleLinkLeave(e){this._setCellUnderline(e.x1,e.x2,e.y1,e.y2,e.cols,!1)}_setCellUnderline(e,t,i,s,r,n){i<0&&(e=0),s<0&&(t=0);const o=this._bufferService.rows-1;i=Math.max(Math.min(i,o),0),s=Math.max(Math.min(s,o),0),r=Math.min(r,this._bufferService.cols);const a=this._bufferService.buffer,h=a.ybase+a.y,c=Math.min(a.x,r-1),l=this._optionsService.rawOptions.cursorBlink,d=this._optionsService.rawOptions.cursorStyle,_=this._optionsService.rawOptions.cursorInactiveStyle;for(let o=i;o<=s;++o){const u=o+a.ydisp,f=this._rowElements[o],v=a.lines.get(u);if(!f||!v)break;f.replaceChildren(...this._rowFactory.createRow(v,u,u===h,d,_,c,l,this.dimensions.css.cell.width,this._widthCache,n?o===i?e:0:-1,n?(o===s?t:r)-1:-1))}}};t.DomRenderer=w=s([r(7,f.IInstantiationService),r(8,l.ICharSizeService),r(9,f.IOptionsService),r(10,f.IBufferService),r(11,l.ICoreBrowserService),r(12,l.IThemeService)],w)},3787:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.DomRendererRowFactory=void 0;const n=i(2223),o=i(643),a=i(511),h=i(2585),c=i(8055),l=i(4725),d=i(4269),_=i(6171),u=i(3734);let f=t.DomRendererRowFactory=class{constructor(e,t,i,s,r,n,o){this._document=e,this._characterJoinerService=t,this._optionsService=i,this._coreBrowserService=s,this._coreService=r,this._decorationService=n,this._themeService=o,this._workCell=new a.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(e,t,i){this._selectionStart=e,this._selectionEnd=t,this._columnSelectMode=i}createRow(e,t,i,s,r,a,h,l,_,f,p){const g=[],m=this._characterJoinerService.getJoinedCharacters(t),S=this._themeService.colors;let C,b=e.getNoBgTrimmedLength();i&&b0&&M===m[0][0]){O=!0;const t=m.shift();I=new d.JoinedCellData(this._workCell,e.translateToString(!0,t[0],t[1]),t[1]-t[0]),P=t[1]-1,b=I.getWidth()}const H=this._isCellInSelection(M,t),F=i&&M===a,W=T&&M>=f&&M<=p;let U=!1;this._decorationService.forEachDecorationAtCell(M,t,void 0,(e=>{U=!0}));let N=I.getChars()||o.WHITESPACE_CELL_CHAR;if(\" \"===N&&(I.isUnderline()||I.isOverline())&&(N=\" \"),A=b*l-_.get(N,I.isBold(),I.isItalic()),C){if(w&&(H&&x||!H&&!x&&I.bg===E)&&(H&&x&&S.selectionForeground||I.fg===k)&&I.extended.ext===L&&W===D&&A===R&&!F&&!O&&!U){I.isInvisible()?y+=o.WHITESPACE_CELL_CHAR:y+=N,w++;continue}w&&(C.textContent=y),C=this._document.createElement(\"span\"),w=0,y=\"\"}else C=this._document.createElement(\"span\");if(E=I.bg,k=I.fg,L=I.extended.ext,D=W,R=A,x=H,O&&a>=M&&a<=P&&(a=M),!this._coreService.isCursorHidden&&F&&this._coreService.isCursorInitialized)if(B.push(\"xterm-cursor\"),this._coreBrowserService.isFocused)h&&B.push(\"xterm-cursor-blink\"),B.push(\"bar\"===s?\"xterm-cursor-bar\":\"underline\"===s?\"xterm-cursor-underline\":\"xterm-cursor-block\");else if(r)switch(r){case\"outline\":B.push(\"xterm-cursor-outline\");break;case\"block\":B.push(\"xterm-cursor-block\");break;case\"bar\":B.push(\"xterm-cursor-bar\");break;case\"underline\":B.push(\"xterm-cursor-underline\")}if(I.isBold()&&B.push(\"xterm-bold\"),I.isItalic()&&B.push(\"xterm-italic\"),I.isDim()&&B.push(\"xterm-dim\"),y=I.isInvisible()?o.WHITESPACE_CELL_CHAR:I.getChars()||o.WHITESPACE_CELL_CHAR,I.isUnderline()&&(B.push(`xterm-underline-${I.extended.underlineStyle}`),\" \"===y&&(y=\" \"),!I.isUnderlineColorDefault()))if(I.isUnderlineColorRGB())C.style.textDecorationColor=`rgb(${u.AttributeData.toColorRGB(I.getUnderlineColor()).join(\",\")})`;else{let e=I.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&I.isBold()&&e<8&&(e+=8),C.style.textDecorationColor=S.ansi[e].css}I.isOverline()&&(B.push(\"xterm-overline\"),\" \"===y&&(y=\" \")),I.isStrikethrough()&&B.push(\"xterm-strikethrough\"),W&&(C.style.textDecoration=\"underline\");let $=I.getFgColor(),j=I.getFgColorMode(),z=I.getBgColor(),K=I.getBgColorMode();const q=!!I.isInverse();if(q){const e=$;$=z,z=e;const t=j;j=K,K=t}let V,G,X,J=!1;switch(this._decorationService.forEachDecorationAtCell(M,t,void 0,(e=>{\"top\"!==e.options.layer&&J||(e.backgroundColorRGB&&(K=50331648,z=e.backgroundColorRGB.rgba>>8&16777215,V=e.backgroundColorRGB),e.foregroundColorRGB&&(j=50331648,$=e.foregroundColorRGB.rgba>>8&16777215,G=e.foregroundColorRGB),J=\"top\"===e.options.layer)})),!J&&H&&(V=this._coreBrowserService.isFocused?S.selectionBackgroundOpaque:S.selectionInactiveBackgroundOpaque,z=V.rgba>>8&16777215,K=50331648,J=!0,S.selectionForeground&&(j=50331648,$=S.selectionForeground.rgba>>8&16777215,G=S.selectionForeground)),J&&B.push(\"xterm-decoration-top\"),K){case 16777216:case 33554432:X=S.ansi[z],B.push(`xterm-bg-${z}`);break;case 50331648:X=c.channels.toColor(z>>16,z>>8&255,255&z),this._addStyle(C,`background-color:#${v((z>>>0).toString(16),\"0\",6)}`);break;default:q?(X=S.foreground,B.push(`xterm-bg-${n.INVERTED_DEFAULT_COLOR}`)):X=S.background}switch(V||I.isDim()&&(V=c.color.multiplyOpacity(X,.5)),j){case 16777216:case 33554432:I.isBold()&&$<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&($+=8),this._applyMinimumContrast(C,X,S.ansi[$],I,V,void 0)||B.push(`xterm-fg-${$}`);break;case 50331648:const e=c.channels.toColor($>>16&255,$>>8&255,255&$);this._applyMinimumContrast(C,X,e,I,V,G)||this._addStyle(C,`color:#${v($.toString(16),\"0\",6)}`);break;default:this._applyMinimumContrast(C,X,S.foreground,I,V,G)||q&&B.push(`xterm-fg-${n.INVERTED_DEFAULT_COLOR}`)}B.length&&(C.className=B.join(\" \"),B.length=0),F||O||U?C.textContent=y:w++,A!==this.defaultSpacing&&(C.style.letterSpacing=`${A}px`),g.push(C),M=P}return C&&w&&(C.textContent=y),g}_applyMinimumContrast(e,t,i,s,r,n){if(1===this._optionsService.rawOptions.minimumContrastRatio||(0,_.treatGlyphAsBackgroundColor)(s.getCode()))return!1;const o=this._getContrastCache(s);let a;if(r||n||(a=o.getColor(t.rgba,i.rgba)),void 0===a){const e=this._optionsService.rawOptions.minimumContrastRatio/(s.isDim()?2:1);a=c.color.ensureContrastRatio(r||t,n||i,e),o.setColor((r||t).rgba,(n||i).rgba,a??null)}return!!a&&(this._addStyle(e,`color:${a.css}`),!0)}_getContrastCache(e){return e.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(e,t){e.setAttribute(\"style\",`${e.getAttribute(\"style\")||\"\"}${t};`)}_isCellInSelection(e,t){const i=this._selectionStart,s=this._selectionEnd;return!(!i||!s)&&(this._columnSelectMode?i[0]<=s[0]?e>=i[0]&&t>=i[1]&&e=i[1]&&e>=s[0]&&t<=s[1]:t>i[1]&&t=i[0]&&e=i[0])}};function v(e,t,i){for(;e.length{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WidthCache=void 0,t.WidthCache=class{constructor(e,t){this._flat=new Float32Array(256),this._font=\"\",this._fontSize=0,this._weight=\"normal\",this._weightBold=\"bold\",this._measureElements=[],this._container=e.createElement(\"div\"),this._container.classList.add(\"xterm-width-cache-measure-container\"),this._container.setAttribute(\"aria-hidden\",\"true\"),this._container.style.whiteSpace=\"pre\",this._container.style.fontKerning=\"none\";const i=e.createElement(\"span\");i.classList.add(\"xterm-char-measure-element\");const s=e.createElement(\"span\");s.classList.add(\"xterm-char-measure-element\"),s.style.fontWeight=\"bold\";const r=e.createElement(\"span\");r.classList.add(\"xterm-char-measure-element\"),r.style.fontStyle=\"italic\";const n=e.createElement(\"span\");n.classList.add(\"xterm-char-measure-element\"),n.style.fontWeight=\"bold\",n.style.fontStyle=\"italic\",this._measureElements=[i,s,r,n],this._container.appendChild(i),this._container.appendChild(s),this._container.appendChild(r),this._container.appendChild(n),t.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(e,t,i,s){e===this._font&&t===this._fontSize&&i===this._weight&&s===this._weightBold||(this._font=e,this._fontSize=t,this._weight=i,this._weightBold=s,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${i}`,this._measureElements[1].style.fontWeight=`${s}`,this._measureElements[2].style.fontWeight=`${i}`,this._measureElements[3].style.fontWeight=`${s}`,this.clear())}get(e,t,i){let s=0;if(!t&&!i&&1===e.length&&(s=e.charCodeAt(0))<256){if(-9999!==this._flat[s])return this._flat[s];const t=this._measure(e,0);return t>0&&(this._flat[s]=t),t}let r=e;t&&(r+=\"B\"),i&&(r+=\"I\");let n=this._holey.get(r);if(void 0===n){let s=0;t&&(s|=1),i&&(s|=2),n=this._measure(e,s),n>0&&this._holey.set(r,n)}return n}_measure(e,t){const i=this._measureElements[t];return i.textContent=e.repeat(32),i.offsetWidth/32}}},2223:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.TEXT_BASELINE=t.DIM_OPACITY=t.INVERTED_DEFAULT_COLOR=void 0;const s=i(6114);t.INVERTED_DEFAULT_COLOR=257,t.DIM_OPACITY=.5,t.TEXT_BASELINE=s.isFirefox||s.isLegacyEdge?\"bottom\":\"ideographic\"},6171:(e,t)=>{function i(e){return 57508<=e&&e<=57558}function s(e){return e>=128512&&e<=128591||e>=127744&&e<=128511||e>=128640&&e<=128767||e>=9728&&e<=9983||e>=9984&&e<=10175||e>=65024&&e<=65039||e>=129280&&e<=129535||e>=127462&&e<=127487}Object.defineProperty(t,\"__esModule\",{value:!0}),t.computeNextVariantOffset=t.createRenderDimensions=t.treatGlyphAsBackgroundColor=t.allowRescaling=t.isEmoji=t.isRestrictedPowerlineGlyph=t.isPowerlineGlyph=t.throwIfFalsy=void 0,t.throwIfFalsy=function(e){if(!e)throw new Error(\"value must not be falsy\");return e},t.isPowerlineGlyph=i,t.isRestrictedPowerlineGlyph=function(e){return 57520<=e&&e<=57527},t.isEmoji=s,t.allowRescaling=function(e,t,r,n){return 1===t&&r>Math.ceil(1.5*n)&&void 0!==e&&e>255&&!s(e)&&!i(e)&&!function(e){return 57344<=e&&e<=63743}(e)},t.treatGlyphAsBackgroundColor=function(e){return i(e)||function(e){return 9472<=e&&e<=9631}(e)},t.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}},t.computeNextVariantOffset=function(e,t,i=0){return(e-(2*Math.round(t)-i))%(2*Math.round(t))}},6052:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createSelectionRenderModel=void 0;class i{constructor(){this.clear()}clear(){this.hasSelection=!1,this.columnSelectMode=!1,this.viewportStartRow=0,this.viewportEndRow=0,this.viewportCappedStartRow=0,this.viewportCappedEndRow=0,this.startCol=0,this.endCol=0,this.selectionStart=void 0,this.selectionEnd=void 0}update(e,t,i,s=!1){if(this.selectionStart=t,this.selectionEnd=i,!t||!i||t[0]===i[0]&&t[1]===i[1])return void this.clear();const r=e.buffers.active.ydisp,n=t[1]-r,o=i[1]-r,a=Math.max(n,0),h=Math.min(o,e.rows-1);a>=e.rows||h<0?this.clear():(this.hasSelection=!0,this.columnSelectMode=s,this.viewportStartRow=n,this.viewportEndRow=o,this.viewportCappedStartRow=a,this.viewportCappedEndRow=h,this.startCol=t[0],this.endCol=i[0])}isCellSelected(e,t,i){return!!this.hasSelection&&(i-=e.buffer.active.viewportY,this.columnSelectMode?this.startCol<=this.endCol?t>=this.startCol&&i>=this.viewportCappedStartRow&&t=this.viewportCappedStartRow&&t>=this.endCol&&i<=this.viewportCappedEndRow:i>this.viewportStartRow&&i=this.startCol&&t=this.startCol)}}t.createSelectionRenderModel=function(){return new i}},456:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionModel=void 0,t.SelectionModel=class{constructor(e){this._bufferService=e,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?e%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)-1]:[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[e,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const e=this.selectionStart[0]+this.selectionStartLength;return e>this._bufferService.cols?[e%this._bufferService.cols,this.selectionStart[1]+Math.floor(e/this._bufferService.cols)]:[Math.max(e,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const e=this.selectionStart,t=this.selectionEnd;return!(!e||!t)&&(e[1]>t[1]||e[1]===t[1]&&e[0]>t[0])}handleTrim(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}}},428:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharSizeService=void 0;const n=i(2585),o=i(8460),a=i(844);let h=t.CharSizeService=class extends a.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,t,i){super(),this._optionsService=i,this.width=0,this.height=0,this._onCharSizeChange=this.register(new o.EventEmitter),this.onCharSizeChange=this._onCharSizeChange.event;try{this._measureStrategy=this.register(new d(this._optionsService))}catch{this._measureStrategy=this.register(new l(e,t,this._optionsService))}this.register(this._optionsService.onMultipleOptionChange([\"fontFamily\",\"fontSize\"],(()=>this.measure())))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};t.CharSizeService=h=s([r(2,n.IOptionsService)],h);class c extends a.Disposable{constructor(){super(...arguments),this._result={width:0,height:0}}_validateAndSet(e,t){void 0!==e&&e>0&&void 0!==t&&t>0&&(this._result.width=e,this._result.height=t)}}class l extends c{constructor(e,t,i){super(),this._document=e,this._parentElement=t,this._optionsService=i,this._measureElement=this._document.createElement(\"span\"),this._measureElement.classList.add(\"xterm-char-measure-element\"),this._measureElement.textContent=\"W\".repeat(32),this._measureElement.setAttribute(\"aria-hidden\",\"true\"),this._measureElement.style.whiteSpace=\"pre\",this._measureElement.style.fontKerning=\"none\",this._parentElement.appendChild(this._measureElement)}measure(){return this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`,this._validateAndSet(Number(this._measureElement.offsetWidth)/32,Number(this._measureElement.offsetHeight)),this._result}}class d extends c{constructor(e){super(),this._optionsService=e,this._canvas=new OffscreenCanvas(100,100),this._ctx=this._canvas.getContext(\"2d\");const t=this._ctx.measureText(\"W\");if(!(\"width\"in t&&\"fontBoundingBoxAscent\"in t&&\"fontBoundingBoxDescent\"in t))throw new Error(\"Required font metrics not supported\")}measure(){this._ctx.font=`${this._optionsService.rawOptions.fontSize}px ${this._optionsService.rawOptions.fontFamily}`;const e=this._ctx.measureText(\"W\");return this._validateAndSet(e.width,e.fontBoundingBoxAscent+e.fontBoundingBoxDescent),this._result}}},4269:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharacterJoinerService=t.JoinedCellData=void 0;const n=i(3734),o=i(643),a=i(511),h=i(2585);class c extends n.AttributeData{constructor(e,t,i){super(),this.content=0,this.combinedData=\"\",this.fg=e.fg,this.bg=e.bg,this.combinedData=t,this._width=i}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(e){throw new Error(\"not implemented\")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.JoinedCellData=c;let l=t.CharacterJoinerService=class e{constructor(e){this._bufferService=e,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new a.CellData}register(e){const t={id:this._nextCharacterJoinerId++,handler:e};return this._characterJoiners.push(t),t.id}deregister(e){for(let t=0;t1){const e=this._getJoinedRanges(s,a,n,t,r);for(let t=0;t1){const e=this._getJoinedRanges(s,a,n,t,r);for(let t=0;t{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreBrowserService=void 0;const s=i(844),r=i(8460),n=i(3656);class o extends s.Disposable{constructor(e,t,i){super(),this._textarea=e,this._window=t,this.mainDocument=i,this._isFocused=!1,this._cachedIsFocused=void 0,this._screenDprMonitor=new a(this._window),this._onDprChange=this.register(new r.EventEmitter),this.onDprChange=this._onDprChange.event,this._onWindowChange=this.register(new r.EventEmitter),this.onWindowChange=this._onWindowChange.event,this.register(this.onWindowChange((e=>this._screenDprMonitor.setWindow(e)))),this.register((0,r.forwardEvent)(this._screenDprMonitor.onDprChange,this._onDprChange)),this._textarea.addEventListener(\"focus\",(()=>this._isFocused=!0)),this._textarea.addEventListener(\"blur\",(()=>this._isFocused=!1))}get window(){return this._window}set window(e){this._window!==e&&(this._window=e,this._onWindowChange.fire(this._window))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return void 0===this._cachedIsFocused&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask((()=>this._cachedIsFocused=void 0))),this._cachedIsFocused}}t.CoreBrowserService=o;class a extends s.Disposable{constructor(e){super(),this._parentWindow=e,this._windowResizeListener=this.register(new s.MutableDisposable),this._onDprChange=this.register(new r.EventEmitter),this.onDprChange=this._onDprChange.event,this._outerListener=()=>this._setDprAndFireIfDiffers(),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._updateDpr(),this._setWindowResizeListener(),this.register((0,s.toDisposable)((()=>this.clearListener())))}setWindow(e){this._parentWindow=e,this._setWindowResizeListener(),this._setDprAndFireIfDiffers()}_setWindowResizeListener(){this._windowResizeListener.value=(0,n.addDisposableDomListener)(this._parentWindow,\"resize\",(()=>this._setDprAndFireIfDiffers()))}_setDprAndFireIfDiffers(){this._parentWindow.devicePixelRatio!==this._currentDevicePixelRatio&&this._onDprChange.fire(this._parentWindow.devicePixelRatio),this._updateDpr()}_updateDpr(){this._outerListener&&(this._resolutionMediaMatchList?.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._outerListener=void 0)}}},779:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.LinkProviderService=void 0;const s=i(844);class r extends s.Disposable{constructor(){super(),this.linkProviders=[],this.register((0,s.toDisposable)((()=>this.linkProviders.length=0)))}registerLinkProvider(e){return this.linkProviders.push(e),{dispose:()=>{const t=this.linkProviders.indexOf(e);-1!==t&&this.linkProviders.splice(t,1)}}}}t.LinkProviderService=r},8934:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.MouseService=void 0;const n=i(4725),o=i(9806);let a=t.MouseService=class{constructor(e,t){this._renderService=e,this._charSizeService=t}getCoords(e,t,i,s,r){return(0,o.getCoords)(window,e,t,i,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,r)}getMouseReportCoords(e,t){const i=(0,o.getCoordsRelativeToElement)(window,e,t);if(this._charSizeService.hasValidSize)return i[0]=Math.min(Math.max(i[0],0),this._renderService.dimensions.css.canvas.width-1),i[1]=Math.min(Math.max(i[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(i[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(i[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(i[0]),y:Math.floor(i[1])}}};t.MouseService=a=s([r(0,n.IRenderService),r(1,n.ICharSizeService)],a)},3230:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.RenderService=void 0;const n=i(6193),o=i(4725),a=i(8460),h=i(844),c=i(7226),l=i(2585);let d=t.RenderService=class extends h.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(e,t,i,s,r,o,l,d){super(),this._rowCount=e,this._charSizeService=s,this._renderer=this.register(new h.MutableDisposable),this._pausedResizeTask=new c.DebouncedIdleTask,this._observerDisposable=this.register(new h.MutableDisposable),this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this.register(new a.EventEmitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this.register(new a.EventEmitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this.register(new a.EventEmitter),this.onRender=this._onRender.event,this._onRefreshRequest=this.register(new a.EventEmitter),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new n.RenderDebouncer(((e,t)=>this._renderRows(e,t)),l),this.register(this._renderDebouncer),this.register(l.onDprChange((()=>this.handleDevicePixelRatioChange()))),this.register(o.onResize((()=>this._fullRefresh()))),this.register(o.buffers.onBufferActivate((()=>this._renderer.value?.clear()))),this.register(i.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._charSizeService.onCharSizeChange((()=>this.handleCharSizeChanged()))),this.register(r.onDecorationRegistered((()=>this._fullRefresh()))),this.register(r.onDecorationRemoved((()=>this._fullRefresh()))),this.register(i.onMultipleOptionChange([\"customGlyphs\",\"drawBoldTextInBrightColors\",\"letterSpacing\",\"lineHeight\",\"fontFamily\",\"fontSize\",\"fontWeight\",\"fontWeightBold\",\"minimumContrastRatio\",\"rescaleOverlappingGlyphs\"],(()=>{this.clear(),this.handleResize(o.cols,o.rows),this._fullRefresh()}))),this.register(i.onMultipleOptionChange([\"cursorBlink\",\"cursorStyle\"],(()=>this.refreshRows(o.buffer.y,o.buffer.y,!0)))),this.register(d.onChangeColors((()=>this._fullRefresh()))),this._registerIntersectionObserver(l.window,t),this.register(l.onWindowChange((e=>this._registerIntersectionObserver(e,t))))}_registerIntersectionObserver(e,t){if(\"IntersectionObserver\"in e){const i=new e.IntersectionObserver((e=>this._handleIntersectionChange(e[e.length-1])),{threshold:0});i.observe(t),this._observerDisposable.value=(0,h.toDisposable)((()=>i.disconnect()))}}_handleIntersectionChange(e){this._isPaused=void 0===e.isIntersecting?0===e.intersectionRatio:!e.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(e,t,i=!1){this._isPaused?this._needsFullRefresh=!0:(i||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(e,t,this._rowCount))}_renderRows(e,t){this._renderer.value&&(e=Math.min(e,this._rowCount-1),t=Math.min(t,this._rowCount-1),this._renderer.value.renderRows(e,t),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:e,end:t}),this._onRender.fire({start:e,end:t}),this._isNextRenderRedrawOnly=!0)}resize(e,t){this._rowCount=t,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(e){this._renderer.value=e,this._renderer.value&&(this._renderer.value.onRequestRedraw((e=>this.refreshRows(e.start,e.end,!0))),this._needsSelectionRefresh=!0,this._fullRefresh())}addRefreshCallback(e){return this._renderDebouncer.addRefreshCallback(e)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){this._renderer.value&&(this._renderer.value.clearTextureAtlas?.(),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(e,t){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set((()=>this._renderer.value?.handleResize(e,t))):this._renderer.value.handleResize(e,t),this._fullRefresh())}handleCharSizeChanged(){this._renderer.value?.handleCharSizeChanged()}handleBlur(){this._renderer.value?.handleBlur()}handleFocus(){this._renderer.value?.handleFocus()}handleSelectionChanged(e,t,i){this._selectionState.start=e,this._selectionState.end=t,this._selectionState.columnSelectMode=i,this._renderer.value?.handleSelectionChanged(e,t,i)}handleCursorMove(){this._renderer.value?.handleCursorMove()}clear(){this._renderer.value?.clear()}};t.RenderService=d=s([r(2,l.IOptionsService),r(3,o.ICharSizeService),r(4,l.IDecorationService),r(5,l.IBufferService),r(6,o.ICoreBrowserService),r(7,o.IThemeService)],d)},9312:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.SelectionService=void 0;const n=i(9806),o=i(9504),a=i(456),h=i(4725),c=i(8460),l=i(844),d=i(6114),_=i(4841),u=i(511),f=i(2585),v=String.fromCharCode(160),p=new RegExp(v,\"g\");let g=t.SelectionService=class extends l.Disposable{constructor(e,t,i,s,r,n,o,h,d){super(),this._element=e,this._screenElement=t,this._linkifier=i,this._bufferService=s,this._coreService=r,this._mouseService=n,this._optionsService=o,this._renderService=h,this._coreBrowserService=d,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new u.CellData,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this.register(new c.EventEmitter),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this.register(new c.EventEmitter),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this.register(new c.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this.register(new c.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=e=>this._handleMouseMove(e),this._mouseUpListener=e=>this._handleMouseUp(e),this._coreService.onUserInput((()=>{this.hasSelection&&this.clearSelection()})),this._trimListener=this._bufferService.buffer.lines.onTrim((e=>this._handleTrim(e))),this.register(this._bufferService.buffers.onBufferActivate((e=>this._handleBufferActivate(e)))),this.enable(),this._model=new a.SelectionModel(this._bufferService),this._activeSelectionMode=0,this.register((0,l.toDisposable)((()=>{this._removeMouseDownListeners()})))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t||e[0]===t[0]&&e[1]===t[1])}get selectionText(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return\"\";const i=this._bufferService.buffer,s=[];if(3===this._activeSelectionMode){if(e[0]===t[0])return\"\";const r=e[0]e.replace(p,\" \"))).join(d.isWindows?\"\\r\\n\":\"\\n\")}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(e){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._refresh()))),d.isLinux&&e&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:3===this._activeSelectionMode})}_isClickInSelection(e){const t=this._getMouseBufferCoords(e),i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!!(i&&s&&t)&&this._areCoordsInSelection(t,i,s)}isCellInSelection(e,t){const i=this._model.finalSelectionStart,s=this._model.finalSelectionEnd;return!(!i||!s)&&this._areCoordsInSelection([e,t],i,s)}_areCoordsInSelection(e,t,i){return e[1]>t[1]&&e[1]=t[0]&&e[0]=t[0]}_selectWordAtCursor(e,t){const i=this._linkifier.currentLink?.link?.range;if(i)return this._model.selectionStart=[i.start.x-1,i.start.y-1],this._model.selectionStartLength=(0,_.getRangeLength)(i,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const s=this._getMouseBufferCoords(e);return!!s&&(this._selectWordAt(s,t),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(e,t){this._model.clearSelection(),e=Math.max(e,0),t=Math.min(t,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,e],this._model.selectionEnd=[this._bufferService.cols,t],this.refresh(),this._onSelectionChange.fire()}_handleTrim(e){this._model.handleTrim(e)&&this.refresh()}_getMouseBufferCoords(e){const t=this._mouseService.getCoords(e,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(t)return t[0]--,t[1]--,t[1]+=this._bufferService.buffer.ydisp,t}_getMouseEventScrollAmount(e){let t=(0,n.getCoordsRelativeToElement)(this._coreBrowserService.window,e,this._screenElement)[1];const i=this._renderService.dimensions.css.canvas.height;return t>=0&&t<=i?0:(t>i&&(t-=i),t=Math.min(Math.max(t,-50),50),t/=50,t/Math.abs(t)+Math.round(14*t))}shouldForceSelection(e){return d.isMac?e.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:e.shiftKey}handleMouseDown(e){if(this._mouseDownTimeStamp=e.timeStamp,(2!==e.button||!this.hasSelection)&&0===e.button){if(!this._enabled){if(!this.shouldForceSelection(e))return;e.stopPropagation()}e.preventDefault(),this._dragScrollAmount=0,this._enabled&&e.shiftKey?this._handleIncrementalClick(e):1===e.detail?this._handleSingleClick(e):2===e.detail?this._handleDoubleClick(e):3===e.detail&&this._handleTripleClick(e),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener(\"mouseup\",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval((()=>this._dragScroll()),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener(\"mousemove\",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener(\"mouseup\",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))}_handleSingleClick(e){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(e)?3:0,this._model.selectionStart=this._getMouseBufferCoords(e),!this._model.selectionStart)return;this._model.selectionEnd=void 0;const t=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);t&&t.length!==this._model.selectionStart[0]&&0===t.hasWidth(this._model.selectionStart[0])&&this._model.selectionStart[0]++}_handleDoubleClick(e){this._selectWordAtCursor(e,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(e){const t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=2,this._selectLineAt(t[1]))}shouldColumnSelect(e){return e.altKey&&!(d.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(e){if(e.stopImmediatePropagation(),!this._model.selectionStart)return;const t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),!this._model.selectionEnd)return void this.refresh(!0);2===this._activeSelectionMode?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const i=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(e.ydisp+this._bufferService.rows,e.lines.length-1)):(3!==this._activeSelectionMode&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=e.ydisp),this.refresh()}}_handleMouseUp(e){const t=e.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&t<500&&e.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const t=this._mouseService.getCoords(e,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(t&&void 0!==t[0]&&void 0!==t[1]){const e=(0,o.moveToCellSequence)(t[0]-1,t[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(e,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd,i=!(!e||!t||e[0]===t[0]&&e[1]===t[1]);i?e&&t&&(this._oldSelectionStart&&this._oldSelectionEnd&&e[0]===this._oldSelectionStart[0]&&e[1]===this._oldSelectionStart[1]&&t[0]===this._oldSelectionEnd[0]&&t[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(e,t,i)):this._oldHasSelection&&this._fireOnSelectionChange(e,t,i)}_fireOnSelectionChange(e,t,i){this._oldSelectionStart=e,this._oldSelectionEnd=t,this._oldHasSelection=i,this._onSelectionChange.fire()}_handleBufferActivate(e){this.clearSelection(),this._trimListener.dispose(),this._trimListener=e.activeBuffer.lines.onTrim((e=>this._handleTrim(e)))}_convertViewportColToCharacterIndex(e,t){let i=t;for(let s=0;t>=s;s++){const r=e.loadCell(s,this._workCell).getChars().length;0===this._workCell.getWidth()?i--:r>1&&t!==s&&(i+=r-1)}return i}setSelection(e,t,i){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[e,t],this._model.selectionStartLength=i,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(e){this._isClickInSelection(e)||(this._selectWordAtCursor(e,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(e,t,i=!0,s=!0){if(e[0]>=this._bufferService.cols)return;const r=this._bufferService.buffer,n=r.lines.get(e[1]);if(!n)return;const o=r.translateBufferLineToString(e[1],!1);let a=this._convertViewportColToCharacterIndex(n,e[0]),h=a;const c=e[0]-a;let l=0,d=0,_=0,u=0;if(\" \"===o.charAt(a)){for(;a>0&&\" \"===o.charAt(a-1);)a--;for(;h1&&(u+=s-1,h+=s-1);t>0&&a>0&&!this._isCharWordSeparator(n.loadCell(t-1,this._workCell));){n.loadCell(t-1,this._workCell);const e=this._workCell.getChars().length;0===this._workCell.getWidth()?(l++,t--):e>1&&(_+=e-1,a-=e-1),a--,t--}for(;i1&&(u+=e-1,h+=e-1),h++,i++}}h++;let f=a+c-l+_,v=Math.min(this._bufferService.cols,h-a+l+d-_-u);if(t||\"\"!==o.slice(a,h).trim()){if(i&&0===f&&32!==n.getCodePoint(0)){const t=r.lines.get(e[1]-1);if(t&&n.isWrapped&&32!==t.getCodePoint(this._bufferService.cols-1)){const t=this._getWordAt([this._bufferService.cols-1,e[1]-1],!1,!0,!1);if(t){const e=this._bufferService.cols-t.start;f-=e,v+=e}}}if(s&&f+v===this._bufferService.cols&&32!==n.getCodePoint(this._bufferService.cols-1)){const t=r.lines.get(e[1]+1);if(t?.isWrapped&&32!==t.getCodePoint(0)){const t=this._getWordAt([0,e[1]+1],!1,!1,!0);t&&(v+=t.length)}}return{start:f,length:v}}}_selectWordAt(e,t){const i=this._getWordAt(e,t);if(i){for(;i.start<0;)i.start+=this._bufferService.cols,e[1]--;this._model.selectionStart=[i.start,e[1]],this._model.selectionStartLength=i.length}}_selectToWordAt(e){const t=this._getWordAt(e,!0);if(t){let i=e[1];for(;t.start<0;)t.start+=this._bufferService.cols,i--;if(!this._model.areSelectionValuesReversed())for(;t.start+t.length>this._bufferService.cols;)t.length-=this._bufferService.cols,i++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?t.start:t.start+t.length,i]}}_isCharWordSeparator(e){return 0!==e.getWidth()&&this._optionsService.rawOptions.wordSeparator.indexOf(e.getChars())>=0}_selectLineAt(e){const t=this._bufferService.buffer.getWrappedRangeForLine(e),i={start:{x:0,y:t.first},end:{x:this._bufferService.cols-1,y:t.last}};this._model.selectionStart=[0,t.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,_.getRangeLength)(i,this._bufferService.cols)}};t.SelectionService=g=s([r(3,f.IBufferService),r(4,f.ICoreService),r(5,h.IMouseService),r(6,f.IOptionsService),r(7,h.IRenderService),r(8,h.ICoreBrowserService)],g)},4725:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ILinkProviderService=t.IThemeService=t.ICharacterJoinerService=t.ISelectionService=t.IRenderService=t.IMouseService=t.ICoreBrowserService=t.ICharSizeService=void 0;const s=i(8343);t.ICharSizeService=(0,s.createDecorator)(\"CharSizeService\"),t.ICoreBrowserService=(0,s.createDecorator)(\"CoreBrowserService\"),t.IMouseService=(0,s.createDecorator)(\"MouseService\"),t.IRenderService=(0,s.createDecorator)(\"RenderService\"),t.ISelectionService=(0,s.createDecorator)(\"SelectionService\"),t.ICharacterJoinerService=(0,s.createDecorator)(\"CharacterJoinerService\"),t.IThemeService=(0,s.createDecorator)(\"ThemeService\"),t.ILinkProviderService=(0,s.createDecorator)(\"LinkProviderService\")},6731:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.ThemeService=t.DEFAULT_ANSI_COLORS=void 0;const n=i(7239),o=i(8055),a=i(8460),h=i(844),c=i(2585),l=o.css.toColor(\"#ffffff\"),d=o.css.toColor(\"#000000\"),_=o.css.toColor(\"#ffffff\"),u=o.css.toColor(\"#000000\"),f={css:\"rgba(255, 255, 255, 0.3)\",rgba:4294967117};t.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const e=[o.css.toColor(\"#2e3436\"),o.css.toColor(\"#cc0000\"),o.css.toColor(\"#4e9a06\"),o.css.toColor(\"#c4a000\"),o.css.toColor(\"#3465a4\"),o.css.toColor(\"#75507b\"),o.css.toColor(\"#06989a\"),o.css.toColor(\"#d3d7cf\"),o.css.toColor(\"#555753\"),o.css.toColor(\"#ef2929\"),o.css.toColor(\"#8ae234\"),o.css.toColor(\"#fce94f\"),o.css.toColor(\"#729fcf\"),o.css.toColor(\"#ad7fa8\"),o.css.toColor(\"#34e2e2\"),o.css.toColor(\"#eeeeec\")],t=[0,95,135,175,215,255];for(let i=0;i<216;i++){const s=t[i/36%6|0],r=t[i/6%6|0],n=t[i%6];e.push({css:o.channels.toCss(s,r,n),rgba:o.channels.toRgba(s,r,n)})}for(let t=0;t<24;t++){const i=8+10*t;e.push({css:o.channels.toCss(i,i,i),rgba:o.channels.toRgba(i,i,i)})}return e})());let v=t.ThemeService=class extends h.Disposable{get colors(){return this._colors}constructor(e){super(),this._optionsService=e,this._contrastCache=new n.ColorContrastCache,this._halfContrastCache=new n.ColorContrastCache,this._onChangeColors=this.register(new a.EventEmitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:l,background:d,cursor:_,cursorAccent:u,selectionForeground:void 0,selectionBackgroundTransparent:f,selectionBackgroundOpaque:o.color.blend(d,f),selectionInactiveBackgroundTransparent:f,selectionInactiveBackgroundOpaque:o.color.blend(d,f),ansi:t.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this.register(this._optionsService.onSpecificOptionChange(\"minimumContrastRatio\",(()=>this._contrastCache.clear()))),this.register(this._optionsService.onSpecificOptionChange(\"theme\",(()=>this._setTheme(this._optionsService.rawOptions.theme))))}_setTheme(e={}){const i=this._colors;if(i.foreground=p(e.foreground,l),i.background=p(e.background,d),i.cursor=p(e.cursor,_),i.cursorAccent=p(e.cursorAccent,u),i.selectionBackgroundTransparent=p(e.selectionBackground,f),i.selectionBackgroundOpaque=o.color.blend(i.background,i.selectionBackgroundTransparent),i.selectionInactiveBackgroundTransparent=p(e.selectionInactiveBackground,i.selectionBackgroundTransparent),i.selectionInactiveBackgroundOpaque=o.color.blend(i.background,i.selectionInactiveBackgroundTransparent),i.selectionForeground=e.selectionForeground?p(e.selectionForeground,o.NULL_COLOR):void 0,i.selectionForeground===o.NULL_COLOR&&(i.selectionForeground=void 0),o.color.isOpaque(i.selectionBackgroundTransparent)){const e=.3;i.selectionBackgroundTransparent=o.color.opacity(i.selectionBackgroundTransparent,e)}if(o.color.isOpaque(i.selectionInactiveBackgroundTransparent)){const e=.3;i.selectionInactiveBackgroundTransparent=o.color.opacity(i.selectionInactiveBackgroundTransparent,e)}if(i.ansi=t.DEFAULT_ANSI_COLORS.slice(),i.ansi[0]=p(e.black,t.DEFAULT_ANSI_COLORS[0]),i.ansi[1]=p(e.red,t.DEFAULT_ANSI_COLORS[1]),i.ansi[2]=p(e.green,t.DEFAULT_ANSI_COLORS[2]),i.ansi[3]=p(e.yellow,t.DEFAULT_ANSI_COLORS[3]),i.ansi[4]=p(e.blue,t.DEFAULT_ANSI_COLORS[4]),i.ansi[5]=p(e.magenta,t.DEFAULT_ANSI_COLORS[5]),i.ansi[6]=p(e.cyan,t.DEFAULT_ANSI_COLORS[6]),i.ansi[7]=p(e.white,t.DEFAULT_ANSI_COLORS[7]),i.ansi[8]=p(e.brightBlack,t.DEFAULT_ANSI_COLORS[8]),i.ansi[9]=p(e.brightRed,t.DEFAULT_ANSI_COLORS[9]),i.ansi[10]=p(e.brightGreen,t.DEFAULT_ANSI_COLORS[10]),i.ansi[11]=p(e.brightYellow,t.DEFAULT_ANSI_COLORS[11]),i.ansi[12]=p(e.brightBlue,t.DEFAULT_ANSI_COLORS[12]),i.ansi[13]=p(e.brightMagenta,t.DEFAULT_ANSI_COLORS[13]),i.ansi[14]=p(e.brightCyan,t.DEFAULT_ANSI_COLORS[14]),i.ansi[15]=p(e.brightWhite,t.DEFAULT_ANSI_COLORS[15]),e.extendedAnsi){const s=Math.min(i.ansi.length-16,e.extendedAnsi.length);for(let r=0;r{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CircularList=void 0;const s=i(8460),r=i(844);class n extends r.Disposable{constructor(e){super(),this._maxLength=e,this.onDeleteEmitter=this.register(new s.EventEmitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this.register(new s.EventEmitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this.register(new s.EventEmitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(e){if(this._maxLength===e)return;const t=new Array(e);for(let i=0;ithis._length)for(let t=this._length;t=e;t--)this._array[this._getCyclicIndex(t+i.length)]=this._array[this._getCyclicIndex(t)];for(let t=0;tthis._maxLength){const e=this._length+i.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=i.length}trimStart(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.onTrimEmitter.fire(e)}shiftElements(e,t,i){if(!(t<=0)){if(e<0||e>=this._length)throw new Error(\"start argument out of range\");if(e+i<0)throw new Error(\"Cannot shift elements in list beyond index 0\");if(i>0){for(let s=t-1;s>=0;s--)this.set(e+s+i,this.get(e+s));const s=e+t+i-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s{Object.defineProperty(t,\"__esModule\",{value:!0}),t.clone=void 0,t.clone=function e(t,i=5){if(\"object\"!=typeof t)return t;const s=Array.isArray(t)?[]:{};for(const r in t)s[r]=i<=1?t[r]:t[r]&&e(t[r],i-1);return s}},8055:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.contrastRatio=t.toPaddedHex=t.rgba=t.rgb=t.css=t.color=t.channels=t.NULL_COLOR=void 0;let i=0,s=0,r=0,n=0;var o,a,h,c,l;function d(e){const t=e.toString(16);return t.length<2?\"0\"+t:t}function _(e,t){return e>>0},e.toColor=function(t,i,s,r){return{css:e.toCss(t,i,s,r),rgba:e.toRgba(t,i,s,r)}}}(o||(t.channels=o={})),function(e){function t(e,t){return n=Math.round(255*t),[i,s,r]=l.toChannels(e.rgba),{css:o.toCss(i,s,r,n),rgba:o.toRgba(i,s,r,n)}}e.blend=function(e,t){if(n=(255&t.rgba)/255,1===n)return{css:t.css,rgba:t.rgba};const a=t.rgba>>24&255,h=t.rgba>>16&255,c=t.rgba>>8&255,l=e.rgba>>24&255,d=e.rgba>>16&255,_=e.rgba>>8&255;return i=l+Math.round((a-l)*n),s=d+Math.round((h-d)*n),r=_+Math.round((c-_)*n),{css:o.toCss(i,s,r),rgba:o.toRgba(i,s,r)}},e.isOpaque=function(e){return 255==(255&e.rgba)},e.ensureContrastRatio=function(e,t,i){const s=l.ensureContrastRatio(e.rgba,t.rgba,i);if(s)return o.toColor(s>>24&255,s>>16&255,s>>8&255)},e.opaque=function(e){const t=(255|e.rgba)>>>0;return[i,s,r]=l.toChannels(t),{css:o.toCss(i,s,r),rgba:t}},e.opacity=t,e.multiplyOpacity=function(e,i){return n=255&e.rgba,t(e,n*i/255)},e.toColorRGB=function(e){return[e.rgba>>24&255,e.rgba>>16&255,e.rgba>>8&255]}}(a||(t.color=a={})),function(e){let t,a;try{const e=document.createElement(\"canvas\");e.width=1,e.height=1;const i=e.getContext(\"2d\",{willReadFrequently:!0});i&&(t=i,t.globalCompositeOperation=\"copy\",a=t.createLinearGradient(0,0,1,1))}catch{}e.toColor=function(e){if(e.match(/#[\\da-f]{3,8}/i))switch(e.length){case 4:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),o.toColor(i,s,r);case 5:return i=parseInt(e.slice(1,2).repeat(2),16),s=parseInt(e.slice(2,3).repeat(2),16),r=parseInt(e.slice(3,4).repeat(2),16),n=parseInt(e.slice(4,5).repeat(2),16),o.toColor(i,s,r,n);case 7:return{css:e,rgba:(parseInt(e.slice(1),16)<<8|255)>>>0};case 9:return{css:e,rgba:parseInt(e.slice(1),16)>>>0}}const h=e.match(/rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(,\\s*(0|1|\\d?\\.(\\d+))\\s*)?\\)/);if(h)return i=parseInt(h[1]),s=parseInt(h[2]),r=parseInt(h[3]),n=Math.round(255*(void 0===h[5]?1:parseFloat(h[5]))),o.toColor(i,s,r,n);if(!t||!a)throw new Error(\"css.toColor: Unsupported css format\");if(t.fillStyle=a,t.fillStyle=e,\"string\"!=typeof t.fillStyle)throw new Error(\"css.toColor: Unsupported css format\");if(t.fillRect(0,0,1,1),[i,s,r,n]=t.getImageData(0,0,1,1).data,255!==n)throw new Error(\"css.toColor: Unsupported css format\");return{rgba:o.toRgba(i,s,r,n),css:e}}}(h||(t.css=h={})),function(e){function t(e,t,i){const s=e/255,r=t/255,n=i/255;return.2126*(s<=.03928?s/12.92:Math.pow((s+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))}e.relativeLuminance=function(e){return t(e>>16&255,e>>8&255,255&e)},e.relativeLuminance2=t}(c||(t.rgb=c={})),function(e){function t(e,t,i){const s=e>>24&255,r=e>>16&255,n=e>>8&255;let o=t>>24&255,a=t>>16&255,h=t>>8&255,l=_(c.relativeLuminance2(o,a,h),c.relativeLuminance2(s,r,n));for(;l0||a>0||h>0);)o-=Math.max(0,Math.ceil(.1*o)),a-=Math.max(0,Math.ceil(.1*a)),h-=Math.max(0,Math.ceil(.1*h)),l=_(c.relativeLuminance2(o,a,h),c.relativeLuminance2(s,r,n));return(o<<24|a<<16|h<<8|255)>>>0}function a(e,t,i){const s=e>>24&255,r=e>>16&255,n=e>>8&255;let o=t>>24&255,a=t>>16&255,h=t>>8&255,l=_(c.relativeLuminance2(o,a,h),c.relativeLuminance2(s,r,n));for(;l>>0}e.blend=function(e,t){if(n=(255&t)/255,1===n)return t;const a=t>>24&255,h=t>>16&255,c=t>>8&255,l=e>>24&255,d=e>>16&255,_=e>>8&255;return i=l+Math.round((a-l)*n),s=d+Math.round((h-d)*n),r=_+Math.round((c-_)*n),o.toRgba(i,s,r)},e.ensureContrastRatio=function(e,i,s){const r=c.relativeLuminance(e>>8),n=c.relativeLuminance(i>>8);if(_(r,n)>8));if(o_(r,c.relativeLuminance(t>>8))?n:t}return n}const o=a(e,i,s),h=_(r,c.relativeLuminance(o>>8));if(h_(r,c.relativeLuminance(n>>8))?o:n}return o}},e.reduceLuminance=t,e.increaseLuminance=a,e.toChannels=function(e){return[e>>24&255,e>>16&255,e>>8&255,255&e]}}(l||(t.rgba=l={})),t.toPaddedHex=d,t.contrastRatio=_},8969:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreTerminal=void 0;const s=i(844),r=i(2585),n=i(4348),o=i(7866),a=i(744),h=i(7302),c=i(6975),l=i(8460),d=i(1753),_=i(1480),u=i(7994),f=i(9282),v=i(5435),p=i(5981),g=i(2660);let m=!1;class S extends s.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this.register(new l.EventEmitter),this._onScroll.event((e=>{this._onScrollApi?.fire(e.position)}))),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(e){for(const t in e)this.optionsService.options[t]=e[t]}constructor(e){super(),this._windowsWrappingHeuristics=this.register(new s.MutableDisposable),this._onBinary=this.register(new l.EventEmitter),this.onBinary=this._onBinary.event,this._onData=this.register(new l.EventEmitter),this.onData=this._onData.event,this._onLineFeed=this.register(new l.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this.register(new l.EventEmitter),this.onResize=this._onResize.event,this._onWriteParsed=this.register(new l.EventEmitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this.register(new l.EventEmitter),this._instantiationService=new n.InstantiationService,this.optionsService=this.register(new h.OptionsService(e)),this._instantiationService.setService(r.IOptionsService,this.optionsService),this._bufferService=this.register(this._instantiationService.createInstance(a.BufferService)),this._instantiationService.setService(r.IBufferService,this._bufferService),this._logService=this.register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(r.ILogService,this._logService),this.coreService=this.register(this._instantiationService.createInstance(c.CoreService)),this._instantiationService.setService(r.ICoreService,this.coreService),this.coreMouseService=this.register(this._instantiationService.createInstance(d.CoreMouseService)),this._instantiationService.setService(r.ICoreMouseService,this.coreMouseService),this.unicodeService=this.register(this._instantiationService.createInstance(_.UnicodeService)),this._instantiationService.setService(r.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(u.CharsetService),this._instantiationService.setService(r.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(g.OscLinkService),this._instantiationService.setService(r.IOscLinkService,this._oscLinkService),this._inputHandler=this.register(new v.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this.register((0,l.forwardEvent)(this._inputHandler.onLineFeed,this._onLineFeed)),this.register(this._inputHandler),this.register((0,l.forwardEvent)(this._bufferService.onResize,this._onResize)),this.register((0,l.forwardEvent)(this.coreService.onData,this._onData)),this.register((0,l.forwardEvent)(this.coreService.onBinary,this._onBinary)),this.register(this.coreService.onRequestScrollToBottom((()=>this.scrollToBottom()))),this.register(this.coreService.onUserInput((()=>this._writeBuffer.handleUserInput()))),this.register(this.optionsService.onMultipleOptionChange([\"windowsMode\",\"windowsPty\"],(()=>this._handleWindowsPtyOptionChange()))),this.register(this._bufferService.onScroll((e=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this.register(this._inputHandler.onScroll((e=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this._writeBuffer=this.register(new p.WriteBuffer(((e,t)=>this._inputHandler.parse(e,t)))),this.register((0,l.forwardEvent)(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(e,t){this._writeBuffer.write(e,t)}writeSync(e,t){this._logService.logLevel<=r.LogLevelEnum.WARN&&!m&&(this._logService.warn(\"writeSync is unreliable and will be removed soon.\"),m=!0),this._writeBuffer.writeSync(e,t)}input(e,t=!0){this.coreService.triggerDataEvent(e,t)}resize(e,t){isNaN(e)||isNaN(t)||(e=Math.max(e,a.MINIMUM_COLS),t=Math.max(t,a.MINIMUM_ROWS),this._bufferService.resize(e,t))}scroll(e,t=!1){this._bufferService.scroll(e,t)}scrollLines(e,t,i){this._bufferService.scrollLines(e,t,i)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){const t=e-this._bufferService.buffer.ydisp;0!==t&&this.scrollLines(t)}registerEscHandler(e,t){return this._inputHandler.registerEscHandler(e,t)}registerDcsHandler(e,t){return this._inputHandler.registerDcsHandler(e,t)}registerCsiHandler(e,t){return this._inputHandler.registerCsiHandler(e,t)}registerOscHandler(e,t){return this._inputHandler.registerOscHandler(e,t)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let e=!1;const t=this.optionsService.rawOptions.windowsPty;t&&void 0!==t.buildNumber&&void 0!==t.buildNumber?e=!!(\"conpty\"===t.backend&&t.buildNumber<21376):this.optionsService.rawOptions.windowsMode&&(e=!0),e?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const e=[];e.push(this.onLineFeed(f.updateWindowsModeWrappedState.bind(null,this._bufferService))),e.push(this.registerCsiHandler({final:\"H\"},(()=>((0,f.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,s.toDisposable)((()=>{for(const t of e)t.dispose()}))}}}t.CoreTerminal=S},8460:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.runAndSubscribe=t.forwardEvent=t.EventEmitter=void 0,t.EventEmitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=e=>(this._listeners.push(e),{dispose:()=>{if(!this._disposed)for(let t=0;tt.fire(e)))},t.runAndSubscribe=function(e,t){return t(void 0),e((e=>t(e)))}},5435:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.InputHandler=t.WindowsOptionsReportType=void 0;const n=i(2584),o=i(7116),a=i(2015),h=i(844),c=i(482),l=i(8437),d=i(8460),_=i(643),u=i(511),f=i(3734),v=i(2585),p=i(1480),g=i(6242),m=i(6351),S=i(5941),C={\"(\":0,\")\":1,\"*\":2,\"+\":3,\"-\":1,\".\":2},b=131072;function w(e,t){if(e>24)return t.setWinLines||!1;switch(e){case 1:return!!t.restoreWin;case 2:return!!t.minimizeWin;case 3:return!!t.setWinPosition;case 4:return!!t.setWinSizePixels;case 5:return!!t.raiseWin;case 6:return!!t.lowerWin;case 7:return!!t.refreshWin;case 8:return!!t.setWinSizeChars;case 9:return!!t.maximizeWin;case 10:return!!t.fullscreenWin;case 11:return!!t.getWinState;case 13:return!!t.getWinPosition;case 14:return!!t.getWinSizePixels;case 15:return!!t.getScreenSizePixels;case 16:return!!t.getCellSizePixels;case 18:return!!t.getWinSizeChars;case 19:return!!t.getScreenSizeChars;case 20:return!!t.getIconTitle;case 21:return!!t.getWinTitle;case 22:return!!t.pushTitle;case 23:return!!t.popTitle;case 24:return!!t.setWinLines}return!1}var y;!function(e){e[e.GET_WIN_SIZE_PIXELS=0]=\"GET_WIN_SIZE_PIXELS\",e[e.GET_CELL_SIZE_PIXELS=1]=\"GET_CELL_SIZE_PIXELS\"}(y||(t.WindowsOptionsReportType=y={}));let E=0;class k extends h.Disposable{getAttrData(){return this._curAttrData}constructor(e,t,i,s,r,h,_,f,v=new a.EscapeSequenceParser){super(),this._bufferService=e,this._charsetService=t,this._coreService=i,this._logService=s,this._optionsService=r,this._oscLinkService=h,this._coreMouseService=_,this._unicodeService=f,this._parser=v,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new c.StringToUtf32,this._utf8Decoder=new c.Utf8ToUtf32,this._workCell=new u.CellData,this._windowTitle=\"\",this._iconName=\"\",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this.register(new d.EventEmitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this.register(new d.EventEmitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this.register(new d.EventEmitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this.register(new d.EventEmitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this.register(new d.EventEmitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this.register(new d.EventEmitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this.register(new d.EventEmitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this.register(new d.EventEmitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this.register(new d.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this.register(new d.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this.register(new d.EventEmitter),this.onScroll=this._onScroll.event,this._onTitleChange=this.register(new d.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this.register(new d.EventEmitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this.register(this._parser),this._dirtyRowTracker=new L(this._bufferService),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((e=>this._activeBuffer=e.activeBuffer))),this._parser.setCsiHandlerFallback(((e,t)=>{this._logService.debug(\"Unknown CSI code: \",{identifier:this._parser.identToString(e),params:t.toArray()})})),this._parser.setEscHandlerFallback((e=>{this._logService.debug(\"Unknown ESC code: \",{identifier:this._parser.identToString(e)})})),this._parser.setExecuteHandlerFallback((e=>{this._logService.debug(\"Unknown EXECUTE code: \",{code:e})})),this._parser.setOscHandlerFallback(((e,t,i)=>{this._logService.debug(\"Unknown OSC code: \",{identifier:e,action:t,data:i})})),this._parser.setDcsHandlerFallback(((e,t,i)=>{\"HOOK\"===t&&(i=i.toArray()),this._logService.debug(\"Unknown DCS code: \",{identifier:this._parser.identToString(e),action:t,payload:i})})),this._parser.setPrintHandler(((e,t,i)=>this.print(e,t,i))),this._parser.registerCsiHandler({final:\"@\"},(e=>this.insertChars(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"@\"},(e=>this.scrollLeft(e))),this._parser.registerCsiHandler({final:\"A\"},(e=>this.cursorUp(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"A\"},(e=>this.scrollRight(e))),this._parser.registerCsiHandler({final:\"B\"},(e=>this.cursorDown(e))),this._parser.registerCsiHandler({final:\"C\"},(e=>this.cursorForward(e))),this._parser.registerCsiHandler({final:\"D\"},(e=>this.cursorBackward(e))),this._parser.registerCsiHandler({final:\"E\"},(e=>this.cursorNextLine(e))),this._parser.registerCsiHandler({final:\"F\"},(e=>this.cursorPrecedingLine(e))),this._parser.registerCsiHandler({final:\"G\"},(e=>this.cursorCharAbsolute(e))),this._parser.registerCsiHandler({final:\"H\"},(e=>this.cursorPosition(e))),this._parser.registerCsiHandler({final:\"I\"},(e=>this.cursorForwardTab(e))),this._parser.registerCsiHandler({final:\"J\"},(e=>this.eraseInDisplay(e,!1))),this._parser.registerCsiHandler({prefix:\"?\",final:\"J\"},(e=>this.eraseInDisplay(e,!0))),this._parser.registerCsiHandler({final:\"K\"},(e=>this.eraseInLine(e,!1))),this._parser.registerCsiHandler({prefix:\"?\",final:\"K\"},(e=>this.eraseInLine(e,!0))),this._parser.registerCsiHandler({final:\"L\"},(e=>this.insertLines(e))),this._parser.registerCsiHandler({final:\"M\"},(e=>this.deleteLines(e))),this._parser.registerCsiHandler({final:\"P\"},(e=>this.deleteChars(e))),this._parser.registerCsiHandler({final:\"S\"},(e=>this.scrollUp(e))),this._parser.registerCsiHandler({final:\"T\"},(e=>this.scrollDown(e))),this._parser.registerCsiHandler({final:\"X\"},(e=>this.eraseChars(e))),this._parser.registerCsiHandler({final:\"Z\"},(e=>this.cursorBackwardTab(e))),this._parser.registerCsiHandler({final:\"`\"},(e=>this.charPosAbsolute(e))),this._parser.registerCsiHandler({final:\"a\"},(e=>this.hPositionRelative(e))),this._parser.registerCsiHandler({final:\"b\"},(e=>this.repeatPrecedingCharacter(e))),this._parser.registerCsiHandler({final:\"c\"},(e=>this.sendDeviceAttributesPrimary(e))),this._parser.registerCsiHandler({prefix:\">\",final:\"c\"},(e=>this.sendDeviceAttributesSecondary(e))),this._parser.registerCsiHandler({final:\"d\"},(e=>this.linePosAbsolute(e))),this._parser.registerCsiHandler({final:\"e\"},(e=>this.vPositionRelative(e))),this._parser.registerCsiHandler({final:\"f\"},(e=>this.hVPosition(e))),this._parser.registerCsiHandler({final:\"g\"},(e=>this.tabClear(e))),this._parser.registerCsiHandler({final:\"h\"},(e=>this.setMode(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"h\"},(e=>this.setModePrivate(e))),this._parser.registerCsiHandler({final:\"l\"},(e=>this.resetMode(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"l\"},(e=>this.resetModePrivate(e))),this._parser.registerCsiHandler({final:\"m\"},(e=>this.charAttributes(e))),this._parser.registerCsiHandler({final:\"n\"},(e=>this.deviceStatus(e))),this._parser.registerCsiHandler({prefix:\"?\",final:\"n\"},(e=>this.deviceStatusPrivate(e))),this._parser.registerCsiHandler({intermediates:\"!\",final:\"p\"},(e=>this.softReset(e))),this._parser.registerCsiHandler({intermediates:\" \",final:\"q\"},(e=>this.setCursorStyle(e))),this._parser.registerCsiHandler({final:\"r\"},(e=>this.setScrollRegion(e))),this._parser.registerCsiHandler({final:\"s\"},(e=>this.saveCursor(e))),this._parser.registerCsiHandler({final:\"t\"},(e=>this.windowOptions(e))),this._parser.registerCsiHandler({final:\"u\"},(e=>this.restoreCursor(e))),this._parser.registerCsiHandler({intermediates:\"'\",final:\"}\"},(e=>this.insertColumns(e))),this._parser.registerCsiHandler({intermediates:\"'\",final:\"~\"},(e=>this.deleteColumns(e))),this._parser.registerCsiHandler({intermediates:'\"',final:\"q\"},(e=>this.selectProtected(e))),this._parser.registerCsiHandler({intermediates:\"$\",final:\"p\"},(e=>this.requestMode(e,!0))),this._parser.registerCsiHandler({prefix:\"?\",intermediates:\"$\",final:\"p\"},(e=>this.requestMode(e,!1))),this._parser.setExecuteHandler(n.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(n.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(n.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(n.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(n.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(n.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(n.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(n.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(n.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(n.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new g.OscHandler((e=>(this.setTitle(e),this.setIconName(e),!0)))),this._parser.registerOscHandler(1,new g.OscHandler((e=>this.setIconName(e)))),this._parser.registerOscHandler(2,new g.OscHandler((e=>this.setTitle(e)))),this._parser.registerOscHandler(4,new g.OscHandler((e=>this.setOrReportIndexedColor(e)))),this._parser.registerOscHandler(8,new g.OscHandler((e=>this.setHyperlink(e)))),this._parser.registerOscHandler(10,new g.OscHandler((e=>this.setOrReportFgColor(e)))),this._parser.registerOscHandler(11,new g.OscHandler((e=>this.setOrReportBgColor(e)))),this._parser.registerOscHandler(12,new g.OscHandler((e=>this.setOrReportCursorColor(e)))),this._parser.registerOscHandler(104,new g.OscHandler((e=>this.restoreIndexedColor(e)))),this._parser.registerOscHandler(110,new g.OscHandler((e=>this.restoreFgColor(e)))),this._parser.registerOscHandler(111,new g.OscHandler((e=>this.restoreBgColor(e)))),this._parser.registerOscHandler(112,new g.OscHandler((e=>this.restoreCursorColor(e)))),this._parser.registerEscHandler({final:\"7\"},(()=>this.saveCursor())),this._parser.registerEscHandler({final:\"8\"},(()=>this.restoreCursor())),this._parser.registerEscHandler({final:\"D\"},(()=>this.index())),this._parser.registerEscHandler({final:\"E\"},(()=>this.nextLine())),this._parser.registerEscHandler({final:\"H\"},(()=>this.tabSet())),this._parser.registerEscHandler({final:\"M\"},(()=>this.reverseIndex())),this._parser.registerEscHandler({final:\"=\"},(()=>this.keypadApplicationMode())),this._parser.registerEscHandler({final:\">\"},(()=>this.keypadNumericMode())),this._parser.registerEscHandler({final:\"c\"},(()=>this.fullReset())),this._parser.registerEscHandler({final:\"n\"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:\"o\"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:\"|\"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:\"}\"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:\"~\"},(()=>this.setgLevel(1))),this._parser.registerEscHandler({intermediates:\"%\",final:\"@\"},(()=>this.selectDefaultCharset())),this._parser.registerEscHandler({intermediates:\"%\",final:\"G\"},(()=>this.selectDefaultCharset()));for(const e in o.CHARSETS)this._parser.registerEscHandler({intermediates:\"(\",final:e},(()=>this.selectCharset(\"(\"+e))),this._parser.registerEscHandler({intermediates:\")\",final:e},(()=>this.selectCharset(\")\"+e))),this._parser.registerEscHandler({intermediates:\"*\",final:e},(()=>this.selectCharset(\"*\"+e))),this._parser.registerEscHandler({intermediates:\"+\",final:e},(()=>this.selectCharset(\"+\"+e))),this._parser.registerEscHandler({intermediates:\"-\",final:e},(()=>this.selectCharset(\"-\"+e))),this._parser.registerEscHandler({intermediates:\".\",final:e},(()=>this.selectCharset(\".\"+e))),this._parser.registerEscHandler({intermediates:\"/\",final:e},(()=>this.selectCharset(\"/\"+e)));this._parser.registerEscHandler({intermediates:\"#\",final:\"8\"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((e=>(this._logService.error(\"Parsing error: \",e),e))),this._parser.registerDcsHandler({intermediates:\"$\",final:\"q\"},new m.DcsHandler(((e,t)=>this.requestStatusString(e,t))))}_preserveStack(e,t,i,s){this._parseStack.paused=!0,this._parseStack.cursorStartX=e,this._parseStack.cursorStartY=t,this._parseStack.decodedLength=i,this._parseStack.position=s}_logSlowResolvingAsync(e){this._logService.logLevel<=v.LogLevelEnum.WARN&&Promise.race([e,new Promise(((e,t)=>setTimeout((()=>t(\"#SLOW_TIMEOUT\")),5e3)))]).catch((e=>{if(\"#SLOW_TIMEOUT\"!==e)throw e;console.warn(\"async parser handler taking longer than 5000 ms\")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(e,t){let i,s=this._activeBuffer.x,r=this._activeBuffer.y,n=0;const o=this._parseStack.paused;if(o){if(i=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,t))return this._logSlowResolvingAsync(i),i;s=this._parseStack.cursorStartX,r=this._parseStack.cursorStartY,this._parseStack.paused=!1,e.length>b&&(n=this._parseStack.position+b)}if(this._logService.logLevel<=v.LogLevelEnum.DEBUG&&this._logService.debug(\"parsing data\"+(\"string\"==typeof e?` \"${e}\"`:` \"${Array.prototype.map.call(e,(e=>String.fromCharCode(e))).join(\"\")}\"`),\"string\"==typeof e?e.split(\"\").map((e=>e.charCodeAt(0))):e),this._parseBuffer.lengthb)for(let t=n;t0&&2===f.getWidth(this._activeBuffer.x-1)&&f.setCellFromCodepoint(this._activeBuffer.x-1,0,1,u);let v=this._parser.precedingJoinState;for(let g=t;ga)if(h){const e=f;let t=this._activeBuffer.x-m;for(this._activeBuffer.x=m,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),f=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),m>0&&f instanceof l.BufferLine&&f.copyCellsFrom(e,t,0,m,!1);t=0;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}else if(d&&(f.insertCells(this._activeBuffer.x,r-m,this._activeBuffer.getNullCell(u)),2===f.getWidth(a-1)&&f.setCellFromCodepoint(a-1,_.NULL_CELL_CODE,_.NULL_CELL_WIDTH,u)),f.setCellFromCodepoint(this._activeBuffer.x++,s,r,u),r>0)for(;--r;)f.setCellFromCodepoint(this._activeBuffer.x++,0,0,u)}this._parser.precedingJoinState=v,this._activeBuffer.x0&&0===f.getWidth(this._activeBuffer.x)&&!f.hasContent(this._activeBuffer.x)&&f.setCellFromCodepoint(this._activeBuffer.x,0,1,u),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(e,t){return\"t\"!==e.final||e.prefix||e.intermediates?this._parser.registerCsiHandler(e,t):this._parser.registerCsiHandler(e,(e=>!w(e.params[0],this._optionsService.rawOptions.windowOptions)||t(e)))}registerDcsHandler(e,t){return this._parser.registerDcsHandler(e,new m.DcsHandler(t))}registerEscHandler(e,t){return this._parser.registerEscHandler(e,t)}registerOscHandler(e,t){return this._parser.registerOscHandler(e,new g.OscHandler(t))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(0===this._activeBuffer.x&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const e=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);e.hasWidth(this._activeBuffer.x)&&!e.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const e=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-e),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(e=this._bufferService.cols-1){this._activeBuffer.x=Math.min(e,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(e,t){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=e,this._activeBuffer.y=this._activeBuffer.scrollTop+t):(this._activeBuffer.x=e,this._activeBuffer.y=t),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(e,t){this._restrictCursor(),this._setCursor(this._activeBuffer.x+e,this._activeBuffer.y+t)}cursorUp(e){const t=this._activeBuffer.y-this._activeBuffer.scrollTop;return t>=0?this._moveCursor(0,-Math.min(t,e.params[0]||1)):this._moveCursor(0,-(e.params[0]||1)),!0}cursorDown(e){const t=this._activeBuffer.scrollBottom-this._activeBuffer.y;return t>=0?this._moveCursor(0,Math.min(t,e.params[0]||1)):this._moveCursor(0,e.params[0]||1),!0}cursorForward(e){return this._moveCursor(e.params[0]||1,0),!0}cursorBackward(e){return this._moveCursor(-(e.params[0]||1),0),!0}cursorNextLine(e){return this.cursorDown(e),this._activeBuffer.x=0,!0}cursorPrecedingLine(e){return this.cursorUp(e),this._activeBuffer.x=0,!0}cursorCharAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(e){return this._setCursor(e.length>=2?(e.params[1]||1)-1:0,(e.params[0]||1)-1),!0}charPosAbsolute(e){return this._setCursor((e.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(e){return this._moveCursor(e.params[0]||1,0),!0}linePosAbsolute(e){return this._setCursor(this._activeBuffer.x,(e.params[0]||1)-1),!0}vPositionRelative(e){return this._moveCursor(0,e.params[0]||1),!0}hVPosition(e){return this.cursorPosition(e),!0}tabClear(e){const t=e.params[0];return 0===t?delete this._activeBuffer.tabs[this._activeBuffer.x]:3===t&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(e){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let t=e.params[0]||1;for(;t--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(e){const t=e.params[0];return 1===t&&(this._curAttrData.bg|=536870912),2!==t&&0!==t||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(e,t,i,s=!1,r=!1){const n=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);n.replaceCells(t,i,this._activeBuffer.getNullCell(this._eraseAttrData()),r),s&&(n.isWrapped=!1)}_resetBufferLine(e,t=!1){const i=this._activeBuffer.lines.get(this._activeBuffer.ybase+e);i&&(i.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),t),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+e),i.isWrapped=!1)}eraseInDisplay(e,t=!1){let i;switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:for(i=this._activeBuffer.y,this._dirtyRowTracker.markDirty(i),this._eraseInBufferLine(i++,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);i=this._bufferService.cols&&(this._activeBuffer.lines.get(i+1).isWrapped=!1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 2:for(i=this._bufferService.rows,this._dirtyRowTracker.markDirty(i-1);i--;)this._resetBufferLine(i,t);this._dirtyRowTracker.markDirty(0);break;case 3:const e=this._activeBuffer.lines.length-this._bufferService.rows;e>0&&(this._activeBuffer.lines.trimStart(e),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-e,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-e,0),this._onScroll.fire(0))}return!0}eraseInLine(e,t=!1){switch(this._restrictCursor(this._bufferService.cols),e.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,0===this._activeBuffer.x,t);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,t);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,t)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(e){this._restrictCursor();let t=e.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y65535?2:1}let h=a;for(let e=1;e0||(this._is(\"xterm\")||this._is(\"rxvt-unicode\")||this._is(\"screen\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[?1;2c\"):this._is(\"linux\")&&this._coreService.triggerDataEvent(n.C0.ESC+\"[?6c\")),!0}sendDeviceAttributesSecondary(e){return e.params[0]>0||(this._is(\"xterm\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[>0;276;0c\"):this._is(\"rxvt-unicode\")?this._coreService.triggerDataEvent(n.C0.ESC+\"[>85;95;0c\"):this._is(\"linux\")?this._coreService.triggerDataEvent(e.params[0]+\"c\"):this._is(\"screen\")&&this._coreService.triggerDataEvent(n.C0.ESC+\"[>83;40003;0c\")),!0}_is(e){return 0===(this._optionsService.rawOptions.termName+\"\").indexOf(e)}setMode(e){for(let t=0;te?1:2,u=e.params[0];return f=u,v=t?2===u?4:4===u?_(o.modes.insertMode):12===u?3:20===u?_(d.convertEol):0:1===u?_(i.applicationCursorKeys):3===u?d.windowOptions.setWinLines?80===h?2:132===h?1:0:0:6===u?_(i.origin):7===u?_(i.wraparound):8===u?3:9===u?_(\"X10\"===s):12===u?_(d.cursorBlink):25===u?_(!o.isCursorHidden):45===u?_(i.reverseWraparound):66===u?_(i.applicationKeypad):67===u?4:1e3===u?_(\"VT200\"===s):1002===u?_(\"DRAG\"===s):1003===u?_(\"ANY\"===s):1004===u?_(i.sendFocus):1005===u?4:1006===u?_(\"SGR\"===r):1015===u?4:1016===u?_(\"SGR_PIXELS\"===r):1048===u?1:47===u||1047===u||1049===u?_(c===l):2004===u?_(i.bracketedPasteMode):0,o.triggerDataEvent(`${n.C0.ESC}[${t?\"\":\"?\"}${f};${v}$y`),!0;var f,v}_updateAttrColor(e,t,i,s,r){return 2===t?(e|=50331648,e&=-16777216,e|=f.AttributeData.fromColorRGB([i,s,r])):5===t&&(e&=-50331904,e|=33554432|255&i),e}_extractColor(e,t,i){const s=[0,0,-1,0,0,0];let r=0,n=0;do{if(s[n+r]=e.params[t+n],e.hasSubParams(t+n)){const i=e.getSubParams(t+n);let o=0;do{5===s[1]&&(r=1),s[n+o+1+r]=i[o]}while(++o=2||2===s[1]&&n+r>=5)break;s[1]&&(r=1)}while(++n+t5)&&(e=1),t.extended.underlineStyle=e,t.fg|=268435456,0===e&&(t.fg&=-268435457),t.updateExtended()}_processSGR0(e){e.fg=l.DEFAULT_ATTR_DATA.fg,e.bg=l.DEFAULT_ATTR_DATA.bg,e.extended=e.extended.clone(),e.extended.underlineStyle=0,e.extended.underlineColor&=-67108864,e.updateExtended()}charAttributes(e){if(1===e.length&&0===e.params[0])return this._processSGR0(this._curAttrData),!0;const t=e.length;let i;const s=this._curAttrData;for(let r=0;r=30&&i<=37?(s.fg&=-50331904,s.fg|=16777216|i-30):i>=40&&i<=47?(s.bg&=-50331904,s.bg|=16777216|i-40):i>=90&&i<=97?(s.fg&=-50331904,s.fg|=16777224|i-90):i>=100&&i<=107?(s.bg&=-50331904,s.bg|=16777224|i-100):0===i?this._processSGR0(s):1===i?s.fg|=134217728:3===i?s.bg|=67108864:4===i?(s.fg|=268435456,this._processUnderline(e.hasSubParams(r)?e.getSubParams(r)[0]:1,s)):5===i?s.fg|=536870912:7===i?s.fg|=67108864:8===i?s.fg|=1073741824:9===i?s.fg|=2147483648:2===i?s.bg|=134217728:21===i?this._processUnderline(2,s):22===i?(s.fg&=-134217729,s.bg&=-134217729):23===i?s.bg&=-67108865:24===i?(s.fg&=-268435457,this._processUnderline(0,s)):25===i?s.fg&=-536870913:27===i?s.fg&=-67108865:28===i?s.fg&=-1073741825:29===i?s.fg&=2147483647:39===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg):49===i?(s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):38===i||48===i||58===i?r+=this._extractColor(e,r,s):53===i?s.bg|=1073741824:55===i?s.bg&=-1073741825:59===i?(s.extended=s.extended.clone(),s.extended.underlineColor=-1,s.updateExtended()):100===i?(s.fg&=-67108864,s.fg|=16777215&l.DEFAULT_ATTR_DATA.fg,s.bg&=-67108864,s.bg|=16777215&l.DEFAULT_ATTR_DATA.bg):this._logService.debug(\"Unknown SGR attribute: %d.\",i);return!0}deviceStatus(e){switch(e.params[0]){case 5:this._coreService.triggerDataEvent(`${n.C0.ESC}[0n`);break;case 6:const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${n.C0.ESC}[${e};${t}R`)}return!0}deviceStatusPrivate(e){if(6===e.params[0]){const e=this._activeBuffer.y+1,t=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${n.C0.ESC}[?${e};${t}R`)}return!0}softReset(e){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(e){const t=e.params[0]||1;switch(t){case 1:case 2:this._optionsService.options.cursorStyle=\"block\";break;case 3:case 4:this._optionsService.options.cursorStyle=\"underline\";break;case 5:case 6:this._optionsService.options.cursorStyle=\"bar\"}const i=t%2==1;return this._optionsService.options.cursorBlink=i,!0}setScrollRegion(e){const t=e.params[0]||1;let i;return(e.length<2||(i=e.params[1])>this._bufferService.rows||0===i)&&(i=this._bufferService.rows),i>t&&(this._activeBuffer.scrollTop=t-1,this._activeBuffer.scrollBottom=i-1,this._setCursor(0,0)),!0}windowOptions(e){if(!w(e.params[0],this._optionsService.rawOptions.windowOptions))return!0;const t=e.length>1?e.params[1]:0;switch(e.params[0]){case 14:2!==t&&this._onRequestWindowsOptionsReport.fire(y.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(y.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${n.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:0!==t&&2!==t||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),0!==t&&1!==t||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:0!==t&&2!==t||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),0!==t&&1!==t||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(e){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(e){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(e){return this._windowTitle=e,this._onTitleChange.fire(e),!0}setIconName(e){return this._iconName=e,!0}setOrReportIndexedColor(e){const t=[],i=e.split(\";\");for(;i.length>1;){const e=i.shift(),s=i.shift();if(/^\\d+$/.exec(e)){const i=parseInt(e);if(D(i))if(\"?\"===s)t.push({type:0,index:i});else{const e=(0,S.parseColor)(s);e&&t.push({type:1,index:i,color:e})}}}return t.length&&this._onColor.fire(t),!0}setHyperlink(e){const t=e.split(\";\");return!(t.length<2)&&(t[1]?this._createHyperlink(t[0],t[1]):!t[0]&&this._finishHyperlink())}_createHyperlink(e,t){this._getCurrentLinkId()&&this._finishHyperlink();const i=e.split(\":\");let s;const r=i.findIndex((e=>e.startsWith(\"id=\")));return-1!==r&&(s=i[r].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:s,uri:t}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(e,t){const i=e.split(\";\");for(let e=0;e=this._specialColors.length);++e,++t)if(\"?\"===i[e])this._onColor.fire([{type:0,index:this._specialColors[t]}]);else{const s=(0,S.parseColor)(i[e]);s&&this._onColor.fire([{type:1,index:this._specialColors[t],color:s}])}return!0}setOrReportFgColor(e){return this._setOrReportSpecialColor(e,0)}setOrReportBgColor(e){return this._setOrReportSpecialColor(e,1)}setOrReportCursorColor(e){return this._setOrReportSpecialColor(e,2)}restoreIndexedColor(e){if(!e)return this._onColor.fire([{type:2}]),!0;const t=[],i=e.split(\";\");for(let e=0;e=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const e=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,e,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=l.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=l.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(e){return this._charsetService.setgLevel(e),!0}screenAlignmentPattern(){const e=new u.CellData;e.content=1<<22|\"E\".charCodeAt(0),e.fg=this._curAttrData.fg,e.bg=this._curAttrData.bg,this._setCursor(0,0);for(let t=0;t(this._coreService.triggerDataEvent(`${n.C0.ESC}${e}${n.C0.ESC}\\\\`),!0))('\"q'===e?`P1$r${this._curAttrData.isProtected()?1:0}\"q`:'\"p'===e?'P1$r61;1\"p':\"r\"===e?`P1$r${i.scrollTop+1};${i.scrollBottom+1}r`:\"m\"===e?\"P1$r0m\":\" q\"===e?`P1$r${{block:2,underline:4,bar:6}[s.cursorStyle]-(s.cursorBlink?1:0)} q`:\"P0$r\")}markRangeDirty(e,t){this._dirtyRowTracker.markRangeDirty(e,t)}}t.InputHandler=k;let L=class{constructor(e){this._bufferService=e,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(e){ethis.end&&(this.end=e)}markRangeDirty(e,t){e>t&&(E=e,e=t,t=E),ethis.end&&(this.end=t)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function D(e){return 0<=e&&e<256}L=s([r(0,v.IBufferService)],L)},844:(e,t)=>{function i(e){for(const t of e)t.dispose();e.length=0}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getDisposeArrayDisposable=t.disposeArray=t.toDisposable=t.MutableDisposable=t.Disposable=void 0,t.Disposable=class{constructor(){this._disposables=[],this._isDisposed=!1}dispose(){this._isDisposed=!0;for(const e of this._disposables)e.dispose();this._disposables.length=0}register(e){return this._disposables.push(e),e}unregister(e){const t=this._disposables.indexOf(e);-1!==t&&this._disposables.splice(t,1)}},t.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){this._isDisposed||e===this._value||(this._value?.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}},t.toDisposable=function(e){return{dispose:e}},t.disposeArray=i,t.getDisposeArrayDisposable=function(e){return{dispose:()=>i(e)}}},1505:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.FourKeyMap=t.TwoKeyMap=void 0;class i{constructor(){this._data={}}set(e,t,i){this._data[e]||(this._data[e]={}),this._data[e][t]=i}get(e,t){return this._data[e]?this._data[e][t]:void 0}clear(){this._data={}}}t.TwoKeyMap=i,t.FourKeyMap=class{constructor(){this._data=new i}set(e,t,s,r,n){this._data.get(e,t)||this._data.set(e,t,new i),this._data.get(e,t).set(s,r,n)}get(e,t,i,s){return this._data.get(e,t)?.get(i,s)}clear(){this._data.clear()}}},6114:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.isChromeOS=t.isLinux=t.isWindows=t.isIphone=t.isIpad=t.isMac=t.getSafariVersion=t.isSafari=t.isLegacyEdge=t.isFirefox=t.isNode=void 0,t.isNode=\"undefined\"!=typeof process&&\"title\"in process;const i=t.isNode?\"node\":navigator.userAgent,s=t.isNode?\"node\":navigator.platform;t.isFirefox=i.includes(\"Firefox\"),t.isLegacyEdge=i.includes(\"Edge\"),t.isSafari=/^((?!chrome|android).)*safari/i.test(i),t.getSafariVersion=function(){if(!t.isSafari)return 0;const e=i.match(/Version\\/(\\d+)/);return null===e||e.length<2?0:parseInt(e[1])},t.isMac=[\"Macintosh\",\"MacIntel\",\"MacPPC\",\"Mac68K\"].includes(s),t.isIpad=\"iPad\"===s,t.isIphone=\"iPhone\"===s,t.isWindows=[\"Windows\",\"Win16\",\"Win32\",\"WinCE\"].includes(s),t.isLinux=s.indexOf(\"Linux\")>=0,t.isChromeOS=/\\bCrOS\\b/.test(i)},6106:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.SortedList=void 0;let i=0;t.SortedList=class{constructor(e){this._getKey=e,this._array=[]}clear(){this._array.length=0}insert(e){0!==this._array.length?(i=this._search(this._getKey(e)),this._array.splice(i,0,e)):this._array.push(e)}delete(e){if(0===this._array.length)return!1;const t=this._getKey(e);if(void 0===t)return!1;if(i=this._search(t),-1===i)return!1;if(this._getKey(this._array[i])!==t)return!1;do{if(this._array[i]===e)return this._array.splice(i,1),!0}while(++i=this._array.length)&&this._getKey(this._array[i])===e))do{yield this._array[i]}while(++i=this._array.length)&&this._getKey(this._array[i])===e))do{t(this._array[i])}while(++i=t;){let s=t+i>>1;const r=this._getKey(this._array[s]);if(r>e)i=s-1;else{if(!(r0&&this._getKey(this._array[s-1])===e;)s--;return s}t=s+1}}return t}}},7226:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DebouncedIdleTask=t.IdleTaskQueue=t.PriorityTaskQueue=void 0;const s=i(6114);class r{constructor(){this._tasks=[],this._i=0}enqueue(e){this._tasks.push(e),this._start()}flush(){for(;this._ir)return s-t<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-t))}ms`),void this._start();s=r}this.clear()}}class n extends r{_requestCallback(e){return setTimeout((()=>e(this._createDeadline(16))))}_cancelCallback(e){clearTimeout(e)}_createDeadline(e){const t=Date.now()+e;return{timeRemaining:()=>Math.max(0,t-Date.now())}}}t.PriorityTaskQueue=n,t.IdleTaskQueue=!s.isNode&&\"requestIdleCallback\"in window?class extends r{_requestCallback(e){return requestIdleCallback(e)}_cancelCallback(e){cancelIdleCallback(e)}}:n,t.DebouncedIdleTask=class{constructor(){this._queue=new t.IdleTaskQueue}set(e){this._queue.clear(),this._queue.enqueue(e)}flush(){this._queue.flush()}}},9282:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.updateWindowsModeWrappedState=void 0;const s=i(643);t.updateWindowsModeWrappedState=function(e){const t=e.buffer.lines.get(e.buffer.ybase+e.buffer.y-1),i=t?.get(e.cols-1),r=e.buffer.lines.get(e.buffer.ybase+e.buffer.y);r&&i&&(r.isWrapped=i[s.CHAR_DATA_CODE_INDEX]!==s.NULL_CELL_CODE&&i[s.CHAR_DATA_CODE_INDEX]!==s.WHITESPACE_CELL_CODE)}},3734:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ExtendedAttrs=t.AttributeData=void 0;class i{constructor(){this.fg=0,this.bg=0,this.extended=new s}static toColorRGB(e){return[e>>>16&255,e>>>8&255,255&e]}static fromColorRGB(e){return(255&e[0])<<16|(255&e[1])<<8|255&e[2]}clone(){const e=new i;return e.fg=this.fg,e.bg=this.bg,e.extended=this.extended.clone(),e}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&0!==this.extended.underlineStyle?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return 50331648==(50331648&this.fg)}isBgRGB(){return 50331648==(50331648&this.bg)}isFgPalette(){return 16777216==(50331648&this.fg)||33554432==(50331648&this.fg)}isBgPalette(){return 16777216==(50331648&this.bg)||33554432==(50331648&this.bg)}isFgDefault(){return 0==(50331648&this.fg)}isBgDefault(){return 0==(50331648&this.bg)}isAttributeDefault(){return 0===this.fg&&0===this.bg}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?50331648==(50331648&this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?16777216==(50331648&this.extended.underlineColor)||33554432==(50331648&this.extended.underlineColor):this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?0==(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}t.AttributeData=i;class s{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(e){this._ext&=-67108864,this._ext|=67108863&e}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){const e=(3758096384&this._ext)>>29;return e<0?4294967288^e:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}clone(){return new s(this._ext,this._urlId)}isEmpty(){return 0===this.underlineStyle&&0===this._urlId}}t.ExtendedAttrs=s},9092:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Buffer=t.MAX_BUFFER_SIZE=void 0;const s=i(6349),r=i(7226),n=i(3734),o=i(8437),a=i(4634),h=i(511),c=i(643),l=i(4863),d=i(7116);t.MAX_BUFFER_SIZE=4294967295,t.Buffer=class{constructor(e,t,i){this._hasScrollback=e,this._optionsService=t,this._bufferService=i,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=o.DEFAULT_ATTR_DATA.clone(),this.savedCharset=d.DEFAULT_CHARSET,this.markers=[],this._nullCell=h.CellData.fromCharData([0,c.NULL_CELL_CHAR,c.NULL_CELL_WIDTH,c.NULL_CELL_CODE]),this._whitespaceCell=h.CellData.fromCharData([0,c.WHITESPACE_CELL_CHAR,c.WHITESPACE_CELL_WIDTH,c.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new r.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(e){return e?(this._nullCell.fg=e.fg,this._nullCell.bg=e.bg,this._nullCell.extended=e.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new n.ExtendedAttrs),this._nullCell}getWhitespaceCell(e){return e?(this._whitespaceCell.fg=e.fg,this._whitespaceCell.bg=e.bg,this._whitespaceCell.extended=e.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new n.ExtendedAttrs),this._whitespaceCell}getBlankLine(e,t){return new o.BufferLine(this._bufferService.cols,this.getNullCell(e),t)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const e=this.ybase+this.y-this.ydisp;return e>=0&&et.MAX_BUFFER_SIZE?t.MAX_BUFFER_SIZE:i}fillViewportRows(e){if(0===this.lines.length){void 0===e&&(e=o.DEFAULT_ATTR_DATA);let t=this._rows;for(;t--;)this.lines.push(this.getBlankLine(e))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new s.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(e,t){const i=this.getNullCell(o.DEFAULT_ATTR_DATA);let s=0;const r=this._getCorrectBufferLength(t);if(r>this.lines.maxLength&&(this.lines.maxLength=r),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+n+1?(this.ybase--,n++,this.ydisp>0&&this.ydisp--):this.lines.push(new o.BufferLine(e,i)));else for(let e=this._rows;e>t;e--)this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(r0&&(this.lines.trimStart(e),this.ybase=Math.max(this.ybase-e,0),this.ydisp=Math.max(this.ydisp-e,0),this.savedY=Math.max(this.savedY-e,0)),this.lines.maxLength=r}this.x=Math.min(this.x,e-1),this.y=Math.min(this.y,t-1),n&&(this.y+=n),this.savedX=Math.min(this.savedX,e-1),this.scrollTop=0}if(this.scrollBottom=t-1,this._isReflowEnabled&&(this._reflow(e,t),this._cols>e))for(let t=0;t.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let e=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,e=!1);let t=0;for(;this._memoryCleanupPosition100)return!0;return e}get _isReflowEnabled(){const e=this._optionsService.rawOptions.windowsPty;return e&&e.buildNumber?this._hasScrollback&&\"conpty\"===e.backend&&e.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(e,t){this._cols!==e&&(e>this._cols?this._reflowLarger(e,t):this._reflowSmaller(e,t))}_reflowLarger(e,t){const i=(0,a.reflowLargerGetLinesToRemove)(this.lines,this._cols,e,this.ybase+this.y,this.getNullCell(o.DEFAULT_ATTR_DATA));if(i.length>0){const s=(0,a.reflowLargerCreateNewLayout)(this.lines,i);(0,a.reflowLargerApplyNewLayout)(this.lines,s.layout),this._reflowLargerAdjustViewport(e,t,s.countRemoved)}}_reflowLargerAdjustViewport(e,t,i){const s=this.getNullCell(o.DEFAULT_ATTR_DATA);let r=i;for(;r-- >0;)0===this.ybase?(this.y>0&&this.y--,this.lines.length=0;n--){let h=this.lines.get(n);if(!h||!h.isWrapped&&h.getTrimmedLength()<=e)continue;const c=[h];for(;h.isWrapped&&n>0;)h=this.lines.get(--n),c.unshift(h);const l=this.ybase+this.y;if(l>=n&&l0&&(s.push({start:n+c.length+r,newLines:v}),r+=v.length),c.push(...v);let p=_.length-1,g=_[p];0===g&&(p--,g=_[p]);let m=c.length-u-1,S=d;for(;m>=0;){const e=Math.min(S,g);if(void 0===c[p])break;if(c[p].copyCellsFrom(c[m],S-e,g-e,e,!0),g-=e,0===g&&(p--,g=_[p]),S-=e,0===S){m--;const e=Math.max(m,0);S=(0,a.getWrappedLineTrimmedLength)(c,e,this._cols)}}for(let t=0;t0;)0===this.ybase?this.y0){const e=[],t=[];for(let e=0;e=0;c--)if(a&&a.start>n+h){for(let e=a.newLines.length-1;e>=0;e--)this.lines.set(c--,a.newLines[e]);c++,e.push({index:n+1,amount:a.newLines.length}),h+=a.newLines.length,a=s[++o]}else this.lines.set(c,t[n--]);let c=0;for(let t=e.length-1;t>=0;t--)e[t].index+=c,this.lines.onInsertEmitter.fire(e[t]),c+=e[t].amount;const l=Math.max(0,i+r-this.lines.maxLength);l>0&&this.lines.onTrimEmitter.fire(l)}}translateBufferLineToString(e,t,i=0,s){const r=this.lines.get(e);return r?r.translateToString(t,i,s):\"\"}getWrappedRangeForLine(e){let t=e,i=e;for(;t>0&&this.lines.get(t).isWrapped;)t--;for(;i+10;);return e>=this._cols?this._cols-1:e<0?0:e}nextStop(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e=this._cols?this._cols-1:e<0?0:e}clearMarkers(e){this._isClearing=!0;for(let t=0;t{t.line-=e,t.line<0&&t.dispose()}))),t.register(this.lines.onInsert((e=>{t.line>=e.index&&(t.line+=e.amount)}))),t.register(this.lines.onDelete((e=>{t.line>=e.index&&t.linee.index&&(t.line-=e.amount)}))),t.register(t.onDispose((()=>this._removeMarker(t)))),t}_removeMarker(e){this._isClearing||this.markers.splice(this.markers.indexOf(e),1)}}},8437:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLine=t.DEFAULT_ATTR_DATA=void 0;const s=i(3734),r=i(511),n=i(643),o=i(482);t.DEFAULT_ATTR_DATA=Object.freeze(new s.AttributeData);let a=0;class h{constructor(e,t,i=!1){this.isWrapped=i,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);const s=t||r.CellData.fromCharData([0,n.NULL_CELL_CHAR,n.NULL_CELL_WIDTH,n.NULL_CELL_CODE]);for(let t=0;t>22,2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):i]}set(e,t){this._data[3*e+1]=t[n.CHAR_DATA_ATTR_INDEX],t[n.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=t[1],this._data[3*e+0]=2097152|e|t[n.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=t[n.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|t[n.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&t}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const t=this._data[3*e+0];return 2097152&t?this._combined[e]:2097151&t?(0,o.stringFromCodePoint)(2097151&t):\"\"}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,t){return a=3*e,t.content=this._data[a+0],t.fg=this._data[a+1],t.bg=this._data[a+2],2097152&t.content&&(t.combinedData=this._combined[e]),268435456&t.bg&&(t.extended=this._extendedAttrs[e]),t}setCell(e,t){2097152&t.content&&(this._combined[e]=t.combinedData),268435456&t.bg&&(this._extendedAttrs[e]=t.extended),this._data[3*e+0]=t.content,this._data[3*e+1]=t.fg,this._data[3*e+2]=t.bg}setCellFromCodepoint(e,t,i,s){268435456&s.bg&&(this._extendedAttrs[e]=s.extended),this._data[3*e+0]=t|i<<22,this._data[3*e+1]=s.fg,this._data[3*e+2]=s.bg}addCodepointToCell(e,t,i){let s=this._data[3*e+0];2097152&s?this._combined[e]+=(0,o.stringFromCodePoint)(t):2097151&s?(this._combined[e]=(0,o.stringFromCodePoint)(2097151&s)+(0,o.stringFromCodePoint)(t),s&=-2097152,s|=2097152):s=t|1<<22,i&&(s&=-12582913,s|=i<<22),this._data[3*e+0]=s}insertCells(e,t,i){if((e%=this.length)&&2===this.getWidth(e-1)&&this.setCellFromCodepoint(e-1,0,1,i),t=0;--i)this.setCell(e+t+i,this.loadCell(e+i,s));for(let s=0;sthis.length){if(this._data.buffer.byteLength>=4*i)this._data=new Uint32Array(this._data.buffer,0,i);else{const e=new Uint32Array(i);e.set(this._data),this._data=e}for(let i=this.length;i=e&&delete this._combined[s]}const s=Object.keys(this._extendedAttrs);for(let t=0;t=e&&delete this._extendedAttrs[i]}}return this.length=e,4*i*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,t,i,s,r){const n=e._data;if(r)for(let r=s-1;r>=0;r--){for(let e=0;e<3;e++)this._data[3*(i+r)+e]=n[3*(t+r)+e];268435456&n[3*(t+r)+2]&&(this._extendedAttrs[i+r]=e._extendedAttrs[t+r])}else for(let r=0;r=t&&(this._combined[r-t+i]=e._combined[r])}}translateToString(e,t,i,s){t=t??0,i=i??this.length,e&&(i=Math.min(i,this.getTrimmedLength())),s&&(s.length=0);let r=\"\";for(;t>22||1}return s&&s.push(t),r}}t.BufferLine=h},4841:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.getRangeLength=void 0,t.getRangeLength=function(e,t){if(e.start.y>e.end.y)throw new Error(`Buffer range end (${e.end.x}, ${e.end.y}) cannot be before start (${e.start.x}, ${e.start.y})`);return t*(e.end.y-e.start.y)+(e.end.x-e.start.x+1)}},4634:(e,t)=>{function i(e,t,i){if(t===e.length-1)return e[t].getTrimmedLength();const s=!e[t].hasContent(i-1)&&1===e[t].getWidth(i-1),r=2===e[t+1].getWidth(0);return s&&r?i-1:i}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getWrappedLineTrimmedLength=t.reflowSmallerGetNewLineLengths=t.reflowLargerApplyNewLayout=t.reflowLargerCreateNewLayout=t.reflowLargerGetLinesToRemove=void 0,t.reflowLargerGetLinesToRemove=function(e,t,s,r,n){const o=[];for(let a=0;a=a&&r0&&(e>d||0===l[e].getTrimmedLength());e--)v++;v>0&&(o.push(a+l.length-v),o.push(v)),a+=l.length-1}return o},t.reflowLargerCreateNewLayout=function(e,t){const i=[];let s=0,r=t[s],n=0;for(let o=0;oi(e,r,t))).reduce(((e,t)=>e+t));let o=0,a=0,h=0;for(;hc&&(o-=c,a++);const l=2===e[a].getWidth(o-1);l&&o--;const d=l?s-1:s;r.push(d),h+=d}return r},t.getWrappedLineTrimmedLength=i},5295:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferSet=void 0;const s=i(8460),r=i(844),n=i(9092);class o extends r.Disposable{constructor(e,t){super(),this._optionsService=e,this._bufferService=t,this._onBufferActivate=this.register(new s.EventEmitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this.register(this._optionsService.onSpecificOptionChange(\"scrollback\",(()=>this.resize(this._bufferService.cols,this._bufferService.rows)))),this.register(this._optionsService.onSpecificOptionChange(\"tabStopWidth\",(()=>this.setupTabStops())))}reset(){this._normal=new n.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new n.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(e){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(e),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(e,t){this._normal.resize(e,t),this._alt.resize(e,t),this.setupTabStops(e)}setupTabStops(e){this._normal.setupTabStops(e),this._alt.setupTabStops(e)}}t.BufferSet=o},511:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CellData=void 0;const s=i(482),r=i(643),n=i(3734);class o extends n.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new n.ExtendedAttrs,this.combinedData=\"\"}static fromCharData(e){const t=new o;return t.setFromCharData(e),t}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,s.stringFromCodePoint)(2097151&this.content):\"\"}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(e){this.fg=e[r.CHAR_DATA_ATTR_INDEX],this.bg=0;let t=!1;if(e[r.CHAR_DATA_CHAR_INDEX].length>2)t=!0;else if(2===e[r.CHAR_DATA_CHAR_INDEX].length){const i=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){const s=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(i-55296)+s-56320+65536|e[r.CHAR_DATA_WIDTH_INDEX]<<22:t=!0}else t=!0}else this.content=e[r.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|e[r.CHAR_DATA_WIDTH_INDEX]<<22;t&&(this.combinedData=e[r.CHAR_DATA_CHAR_INDEX],this.content=2097152|e[r.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}t.CellData=o},643:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WHITESPACE_CELL_CODE=t.WHITESPACE_CELL_WIDTH=t.WHITESPACE_CELL_CHAR=t.NULL_CELL_CODE=t.NULL_CELL_WIDTH=t.NULL_CELL_CHAR=t.CHAR_DATA_CODE_INDEX=t.CHAR_DATA_WIDTH_INDEX=t.CHAR_DATA_CHAR_INDEX=t.CHAR_DATA_ATTR_INDEX=t.DEFAULT_EXT=t.DEFAULT_ATTR=t.DEFAULT_COLOR=void 0,t.DEFAULT_COLOR=0,t.DEFAULT_ATTR=256|t.DEFAULT_COLOR<<9,t.DEFAULT_EXT=0,t.CHAR_DATA_ATTR_INDEX=0,t.CHAR_DATA_CHAR_INDEX=1,t.CHAR_DATA_WIDTH_INDEX=2,t.CHAR_DATA_CODE_INDEX=3,t.NULL_CELL_CHAR=\"\",t.NULL_CELL_WIDTH=1,t.NULL_CELL_CODE=0,t.WHITESPACE_CELL_CHAR=\" \",t.WHITESPACE_CELL_WIDTH=1,t.WHITESPACE_CELL_CODE=32},4863:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Marker=void 0;const s=i(8460),r=i(844);class n{get id(){return this._id}constructor(e){this.line=e,this.isDisposed=!1,this._disposables=[],this._id=n._nextId++,this._onDispose=this.register(new s.EventEmitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,r.disposeArray)(this._disposables),this._disposables.length=0)}register(e){return this._disposables.push(e),e}}t.Marker=n,n._nextId=1},7116:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DEFAULT_CHARSET=t.CHARSETS=void 0,t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={\"`\":\"◆\",a:\"▒\",b:\"␉\",c:\"␌\",d:\"␍\",e:\"␊\",f:\"°\",g:\"±\",h:\"␤\",i:\"␋\",j:\"┘\",k:\"┐\",l:\"┌\",m:\"└\",n:\"┼\",o:\"⎺\",p:\"⎻\",q:\"─\",r:\"⎼\",s:\"⎽\",t:\"├\",u:\"┤\",v:\"┴\",w:\"┬\",x:\"│\",y:\"≤\",z:\"≥\",\"{\":\"π\",\"|\":\"≠\",\"}\":\"£\",\"~\":\"·\"},t.CHARSETS.A={\"#\":\"£\"},t.CHARSETS.B=void 0,t.CHARSETS[4]={\"#\":\"£\",\"@\":\"¾\",\"[\":\"ij\",\"\\\\\":\"½\",\"]\":\"|\",\"{\":\"¨\",\"|\":\"f\",\"}\":\"¼\",\"~\":\"´\"},t.CHARSETS.C=t.CHARSETS[5]={\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.R={\"#\":\"£\",\"@\":\"à\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"§\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"¨\"},t.CHARSETS.Q={\"@\":\"à\",\"[\":\"â\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",\"`\":\"ô\",\"{\":\"é\",\"|\":\"ù\",\"}\":\"è\",\"~\":\"û\"},t.CHARSETS.K={\"@\":\"§\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Ü\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"ß\"},t.CHARSETS.Y={\"#\":\"£\",\"@\":\"§\",\"[\":\"°\",\"\\\\\":\"ç\",\"]\":\"é\",\"`\":\"ù\",\"{\":\"à\",\"|\":\"ò\",\"}\":\"è\",\"~\":\"ì\"},t.CHARSETS.E=t.CHARSETS[6]={\"@\":\"Ä\",\"[\":\"Æ\",\"\\\\\":\"Ø\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"ä\",\"{\":\"æ\",\"|\":\"ø\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS.Z={\"#\":\"£\",\"@\":\"§\",\"[\":\"¡\",\"\\\\\":\"Ñ\",\"]\":\"¿\",\"{\":\"°\",\"|\":\"ñ\",\"}\":\"ç\"},t.CHARSETS.H=t.CHARSETS[7]={\"@\":\"É\",\"[\":\"Ä\",\"\\\\\":\"Ö\",\"]\":\"Å\",\"^\":\"Ü\",\"`\":\"é\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"å\",\"~\":\"ü\"},t.CHARSETS[\"=\"]={\"#\":\"ù\",\"@\":\"à\",\"[\":\"é\",\"\\\\\":\"ç\",\"]\":\"ê\",\"^\":\"î\",_:\"è\",\"`\":\"ô\",\"{\":\"ä\",\"|\":\"ö\",\"}\":\"ü\",\"~\":\"û\"}},2584:(e,t)=>{var i,s,r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.C1_ESCAPED=t.C1=t.C0=void 0,function(e){e.NUL=\"\\0\",e.SOH=\"\u0001\",e.STX=\"\u0002\",e.ETX=\"\u0003\",e.EOT=\"\u0004\",e.ENQ=\"\u0005\",e.ACK=\"\u0006\",e.BEL=\"\u0007\",e.BS=\"\\b\",e.HT=\"\\t\",e.LF=\"\\n\",e.VT=\"\\v\",e.FF=\"\\f\",e.CR=\"\\r\",e.SO=\"\u000e\",e.SI=\"\u000f\",e.DLE=\"\u0010\",e.DC1=\"\u0011\",e.DC2=\"\u0012\",e.DC3=\"\u0013\",e.DC4=\"\u0014\",e.NAK=\"\u0015\",e.SYN=\"\u0016\",e.ETB=\"\u0017\",e.CAN=\"\u0018\",e.EM=\"\u0019\",e.SUB=\"\u001a\",e.ESC=\"\u001b\",e.FS=\"\u001c\",e.GS=\"\u001d\",e.RS=\"\u001e\",e.US=\"\u001f\",e.SP=\" \",e.DEL=\"\"}(i||(t.C0=i={})),function(e){e.PAD=\"€\",e.HOP=\"\",e.BPH=\"‚\",e.NBH=\"ƒ\",e.IND=\"„\",e.NEL=\"…\",e.SSA=\"†\",e.ESA=\"‡\",e.HTS=\"ˆ\",e.HTJ=\"‰\",e.VTS=\"Š\",e.PLD=\"‹\",e.PLU=\"Œ\",e.RI=\"\",e.SS2=\"Ž\",e.SS3=\"\",e.DCS=\"\",e.PU1=\"‘\",e.PU2=\"’\",e.STS=\"“\",e.CCH=\"”\",e.MW=\"•\",e.SPA=\"–\",e.EPA=\"—\",e.SOS=\"˜\",e.SGCI=\"™\",e.SCI=\"š\",e.CSI=\"›\",e.ST=\"œ\",e.OSC=\"\",e.PM=\"ž\",e.APC=\"Ÿ\"}(s||(t.C1=s={})),function(e){e.ST=`${i.ESC}\\\\`}(r||(t.C1_ESCAPED=r={}))},7399:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.evaluateKeyboardEvent=void 0;const s=i(2584),r={48:[\"0\",\")\"],49:[\"1\",\"!\"],50:[\"2\",\"@\"],51:[\"3\",\"#\"],52:[\"4\",\"$\"],53:[\"5\",\"%\"],54:[\"6\",\"^\"],55:[\"7\",\"&\"],56:[\"8\",\"*\"],57:[\"9\",\"(\"],186:[\";\",\":\"],187:[\"=\",\"+\"],188:[\",\",\"<\"],189:[\"-\",\"_\"],190:[\".\",\">\"],191:[\"/\",\"?\"],192:[\"`\",\"~\"],219:[\"[\",\"{\"],220:[\"\\\\\",\"|\"],221:[\"]\",\"}\"],222:[\"'\",'\"']};t.evaluateKeyboardEvent=function(e,t,i,n){const o={type:0,cancel:!1,key:void 0},a=(e.shiftKey?1:0)|(e.altKey?2:0)|(e.ctrlKey?4:0)|(e.metaKey?8:0);switch(e.keyCode){case 0:\"UIKeyInputUpArrow\"===e.key?o.key=t?s.C0.ESC+\"OA\":s.C0.ESC+\"[A\":\"UIKeyInputLeftArrow\"===e.key?o.key=t?s.C0.ESC+\"OD\":s.C0.ESC+\"[D\":\"UIKeyInputRightArrow\"===e.key?o.key=t?s.C0.ESC+\"OC\":s.C0.ESC+\"[C\":\"UIKeyInputDownArrow\"===e.key&&(o.key=t?s.C0.ESC+\"OB\":s.C0.ESC+\"[B\");break;case 8:o.key=e.ctrlKey?\"\\b\":s.C0.DEL,e.altKey&&(o.key=s.C0.ESC+o.key);break;case 9:if(e.shiftKey){o.key=s.C0.ESC+\"[Z\";break}o.key=s.C0.HT,o.cancel=!0;break;case 13:o.key=e.altKey?s.C0.ESC+s.C0.CR:s.C0.CR,o.cancel=!0;break;case 27:o.key=s.C0.ESC,e.altKey&&(o.key=s.C0.ESC+s.C0.ESC),o.cancel=!0;break;case 37:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"D\",o.key===s.C0.ESC+\"[1;3D\"&&(o.key=s.C0.ESC+(i?\"b\":\"[1;5D\"))):o.key=t?s.C0.ESC+\"OD\":s.C0.ESC+\"[D\";break;case 39:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"C\",o.key===s.C0.ESC+\"[1;3C\"&&(o.key=s.C0.ESC+(i?\"f\":\"[1;5C\"))):o.key=t?s.C0.ESC+\"OC\":s.C0.ESC+\"[C\";break;case 38:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"A\",i||o.key!==s.C0.ESC+\"[1;3A\"||(o.key=s.C0.ESC+\"[1;5A\")):o.key=t?s.C0.ESC+\"OA\":s.C0.ESC+\"[A\";break;case 40:if(e.metaKey)break;a?(o.key=s.C0.ESC+\"[1;\"+(a+1)+\"B\",i||o.key!==s.C0.ESC+\"[1;3B\"||(o.key=s.C0.ESC+\"[1;5B\")):o.key=t?s.C0.ESC+\"OB\":s.C0.ESC+\"[B\";break;case 45:e.shiftKey||e.ctrlKey||(o.key=s.C0.ESC+\"[2~\");break;case 46:o.key=a?s.C0.ESC+\"[3;\"+(a+1)+\"~\":s.C0.ESC+\"[3~\";break;case 36:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"H\":t?s.C0.ESC+\"OH\":s.C0.ESC+\"[H\";break;case 35:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"F\":t?s.C0.ESC+\"OF\":s.C0.ESC+\"[F\";break;case 33:e.shiftKey?o.type=2:e.ctrlKey?o.key=s.C0.ESC+\"[5;\"+(a+1)+\"~\":o.key=s.C0.ESC+\"[5~\";break;case 34:e.shiftKey?o.type=3:e.ctrlKey?o.key=s.C0.ESC+\"[6;\"+(a+1)+\"~\":o.key=s.C0.ESC+\"[6~\";break;case 112:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"P\":s.C0.ESC+\"OP\";break;case 113:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"Q\":s.C0.ESC+\"OQ\";break;case 114:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"R\":s.C0.ESC+\"OR\";break;case 115:o.key=a?s.C0.ESC+\"[1;\"+(a+1)+\"S\":s.C0.ESC+\"OS\";break;case 116:o.key=a?s.C0.ESC+\"[15;\"+(a+1)+\"~\":s.C0.ESC+\"[15~\";break;case 117:o.key=a?s.C0.ESC+\"[17;\"+(a+1)+\"~\":s.C0.ESC+\"[17~\";break;case 118:o.key=a?s.C0.ESC+\"[18;\"+(a+1)+\"~\":s.C0.ESC+\"[18~\";break;case 119:o.key=a?s.C0.ESC+\"[19;\"+(a+1)+\"~\":s.C0.ESC+\"[19~\";break;case 120:o.key=a?s.C0.ESC+\"[20;\"+(a+1)+\"~\":s.C0.ESC+\"[20~\";break;case 121:o.key=a?s.C0.ESC+\"[21;\"+(a+1)+\"~\":s.C0.ESC+\"[21~\";break;case 122:o.key=a?s.C0.ESC+\"[23;\"+(a+1)+\"~\":s.C0.ESC+\"[23~\";break;case 123:o.key=a?s.C0.ESC+\"[24;\"+(a+1)+\"~\":s.C0.ESC+\"[24~\";break;default:if(!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)if(i&&!n||!e.altKey||e.metaKey)!i||e.altKey||e.ctrlKey||e.shiftKey||!e.metaKey?e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.keyCode>=48&&1===e.key.length?o.key=e.key:e.key&&e.ctrlKey&&(\"_\"===e.key&&(o.key=s.C0.US),\"@\"===e.key&&(o.key=s.C0.NUL)):65===e.keyCode&&(o.type=1);else{const t=r[e.keyCode],i=t?.[e.shiftKey?1:0];if(i)o.key=s.C0.ESC+i;else if(e.keyCode>=65&&e.keyCode<=90){const t=e.ctrlKey?e.keyCode-64:e.keyCode+32;let i=String.fromCharCode(t);e.shiftKey&&(i=i.toUpperCase()),o.key=s.C0.ESC+i}else if(32===e.keyCode)o.key=s.C0.ESC+(e.ctrlKey?s.C0.NUL:\" \");else if(\"Dead\"===e.key&&e.code.startsWith(\"Key\")){let t=e.code.slice(3,4);e.shiftKey||(t=t.toLowerCase()),o.key=s.C0.ESC+t,o.cancel=!0}}else e.keyCode>=65&&e.keyCode<=90?o.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?o.key=s.C0.NUL:e.keyCode>=51&&e.keyCode<=55?o.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?o.key=s.C0.DEL:219===e.keyCode?o.key=s.C0.ESC:220===e.keyCode?o.key=s.C0.FS:221===e.keyCode&&(o.key=s.C0.GS)}return o}},482:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Utf8ToUtf32=t.StringToUtf32=t.utf32ToString=t.stringFromCodePoint=void 0,t.stringFromCodePoint=function(e){return e>65535?(e-=65536,String.fromCharCode(55296+(e>>10))+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)},t.utf32ToString=function(e,t=0,i=e.length){let s=\"\";for(let r=t;r65535?(t-=65536,s+=String.fromCharCode(55296+(t>>10))+String.fromCharCode(t%1024+56320)):s+=String.fromCharCode(t)}return s},t.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){const i=e.length;if(!i)return 0;let s=0,r=0;if(this._interim){const i=e.charCodeAt(r++);56320<=i&&i<=57343?t[s++]=1024*(this._interim-55296)+i-56320+65536:(t[s++]=this._interim,t[s++]=i),this._interim=0}for(let n=r;n=i)return this._interim=r,s;const o=e.charCodeAt(n);56320<=o&&o<=57343?t[s++]=1024*(r-55296)+o-56320+65536:(t[s++]=r,t[s++]=o)}else 65279!==r&&(t[s++]=r)}return s}},t.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){const i=e.length;if(!i)return 0;let s,r,n,o,a=0,h=0,c=0;if(this.interim[0]){let s=!1,r=this.interim[0];r&=192==(224&r)?31:224==(240&r)?15:7;let n,o=0;for(;(n=63&this.interim[++o])&&o<4;)r<<=6,r|=n;const h=192==(224&this.interim[0])?2:224==(240&this.interim[0])?3:4,l=h-o;for(;c=i)return 0;if(n=e[c++],128!=(192&n)){c--,s=!0;break}this.interim[o++]=n,r<<=6,r|=63&n}s||(2===h?r<128?c--:t[a++]=r:3===h?r<2048||r>=55296&&r<=57343||65279===r||(t[a++]=r):r<65536||r>1114111||(t[a++]=r)),this.interim.fill(0)}const l=i-4;let d=c;for(;d=i)return this.interim[0]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(h=(31&s)<<6|63&r,h<128){d--;continue}t[a++]=h}else if(224==(240&s)){if(d>=i)return this.interim[0]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,a;if(n=e[d++],128!=(192&n)){d--;continue}if(h=(15&s)<<12|(63&r)<<6|63&n,h<2048||h>=55296&&h<=57343||65279===h)continue;t[a++]=h}else if(240==(248&s)){if(d>=i)return this.interim[0]=s,a;if(r=e[d++],128!=(192&r)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,a;if(n=e[d++],128!=(192&n)){d--;continue}if(d>=i)return this.interim[0]=s,this.interim[1]=r,this.interim[2]=n,a;if(o=e[d++],128!=(192&o)){d--;continue}if(h=(7&s)<<18|(63&r)<<12|(63&n)<<6|63&o,h<65536||h>1114111)continue;t[a++]=h}}return a}}},225:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeV6=void 0;const s=i(1480),r=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],n=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let o;t.UnicodeV6=class{constructor(){if(this.version=\"6\",!o){o=new Uint8Array(65536),o.fill(1),o[0]=0,o.fill(0,1,32),o.fill(0,127,160),o.fill(2,4352,4448),o[9001]=2,o[9002]=2,o.fill(2,11904,42192),o[12351]=1,o.fill(2,44032,55204),o.fill(2,63744,64256),o.fill(2,65040,65050),o.fill(2,65072,65136),o.fill(2,65280,65377),o.fill(2,65504,65511);for(let e=0;et[r][1])return!1;for(;r>=s;)if(i=s+r>>1,e>t[i][1])s=i+1;else{if(!(e=131072&&e<=196605||e>=196608&&e<=262141?2:1}charProperties(e,t){let i=this.wcwidth(e),r=0===i&&0!==t;if(r){const e=s.UnicodeService.extractWidth(t);0===e?r=!1:e>i&&(i=e)}return s.UnicodeService.createPropertyValue(0,i,r)}}},5981:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.WriteBuffer=void 0;const s=i(8460),r=i(844);class n extends r.Disposable{constructor(e){super(),this._action=e,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this.register(new s.EventEmitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(e,t){if(void 0!==t&&this._syncCalls>t)return void(this._syncCalls=0);if(this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let i;for(this._isSyncWriting=!0;i=this._writeBuffer.shift();){this._action(i);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(e,t){if(this._pendingData>5e7)throw new Error(\"write data discarded, use flow control to avoid losing data\");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t),void this._innerWrite();setTimeout((()=>this._innerWrite()))}this._pendingData+=e.length,this._writeBuffer.push(e),this._callbacks.push(t)}_innerWrite(e=0,t=!0){const i=e||Date.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,t);if(s){const e=e=>Date.now()-i>=12?setTimeout((()=>this._innerWrite(0,e))):this._innerWrite(i,e);return void s.catch((e=>(queueMicrotask((()=>{throw e})),Promise.resolve(!1)))).then(e)}const r=this._callbacks[this._bufferOffset];if(r&&r(),this._bufferOffset++,this._pendingData-=e.length,Date.now()-i>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((()=>this._innerWrite()))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}t.WriteBuffer=n},5941:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.toRgbString=t.parseColor=void 0;const i=/^([\\da-f])\\/([\\da-f])\\/([\\da-f])$|^([\\da-f]{2})\\/([\\da-f]{2})\\/([\\da-f]{2})$|^([\\da-f]{3})\\/([\\da-f]{3})\\/([\\da-f]{3})$|^([\\da-f]{4})\\/([\\da-f]{4})\\/([\\da-f]{4})$/,s=/^[\\da-f]+$/;function r(e,t){const i=e.toString(16),s=i.length<2?\"0\"+i:i;switch(t){case 4:return i[0];case 8:return s;case 12:return(s+s).slice(0,3);default:return s+s}}t.parseColor=function(e){if(!e)return;let t=e.toLowerCase();if(0===t.indexOf(\"rgb:\")){t=t.slice(4);const e=i.exec(t);if(e){const t=e[1]?15:e[4]?255:e[7]?4095:65535;return[Math.round(parseInt(e[1]||e[4]||e[7]||e[10],16)/t*255),Math.round(parseInt(e[2]||e[5]||e[8]||e[11],16)/t*255),Math.round(parseInt(e[3]||e[6]||e[9]||e[12],16)/t*255)]}}else if(0===t.indexOf(\"#\")&&(t=t.slice(1),s.exec(t)&&[3,6,9,12].includes(t.length))){const e=t.length/3,i=[0,0,0];for(let s=0;s<3;++s){const r=parseInt(t.slice(e*s,e*s+e),16);i[s]=1===e?r<<4:2===e?r:3===e?r>>4:r>>8}return i}},t.toRgbString=function(e,t=16){const[i,s,n]=e;return`rgb:${r(i,t)}/${r(s,t)}/${r(n,t)}`}},5770:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYLOAD_LIMIT=void 0,t.PAYLOAD_LIMIT=1e7},6351:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DcsHandler=t.DcsParser=void 0;const s=i(482),r=i(8742),n=i(5770),o=[];t.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=o,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}registerHandler(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}reset(){if(this._active.length)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].unhook(!1);this._stack.paused=!1,this._active=o,this._ident=0}hook(e,t){if(this.reset(),this._ident=e,this._active=this._handlers[e]||o,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(t);else this._handlerFb(this._ident,\"HOOK\",t)}put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._ident,\"PUT\",(0,s.utf32ToString)(e,t,i))}unhook(e,t=!0){if(this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].unhook(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,\"UNHOOK\",e);this._active=o,this._ident=0}};const a=new r.Params;a.addParam(0),t.DcsHandler=class{constructor(e){this._handler=e,this._data=\"\",this._params=a,this._hitLimit=!1}hook(e){this._params=e.length>1||e.params[0]?e.clone():a,this._data=\"\",this._hitLimit=!1}put(e,t,i){this._hitLimit||(this._data+=(0,s.utf32ToString)(e,t,i),this._data.length>n.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))}unhook(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data,this._params),t instanceof Promise))return t.then((e=>(this._params=a,this._data=\"\",this._hitLimit=!1,e)));return this._params=a,this._data=\"\",this._hitLimit=!1,t}}},2015:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.EscapeSequenceParser=t.VT500_TRANSITION_TABLE=t.TransitionTable=void 0;const s=i(844),r=i(8742),n=i(6242),o=i(6351);class a{constructor(e){this.table=new Uint8Array(e)}setDefault(e,t){this.table.fill(e<<4|t)}add(e,t,i,s){this.table[t<<8|e]=i<<4|s}addMany(e,t,i,s){for(let r=0;rt)),i=(e,i)=>t.slice(e,i),s=i(32,127),r=i(0,24);r.push(25),r.push.apply(r,i(28,32));const n=i(0,14);let o;for(o in e.setDefault(1,0),e.addMany(s,0,2,0),n)e.addMany([24,26,153,154],o,3,0),e.addMany(i(128,144),o,3,0),e.addMany(i(144,152),o,3,0),e.add(156,o,0,0),e.add(27,o,11,1),e.add(157,o,4,8),e.addMany([152,158,159],o,0,7),e.add(155,o,11,3),e.add(144,o,11,9);return e.addMany(r,0,3,0),e.addMany(r,1,3,1),e.add(127,1,0,1),e.addMany(r,8,0,8),e.addMany(r,3,3,3),e.add(127,3,0,3),e.addMany(r,4,3,4),e.add(127,4,0,4),e.addMany(r,6,3,6),e.addMany(r,5,3,5),e.add(127,5,0,5),e.addMany(r,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(s,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(i(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(s,7,0,7),e.addMany(r,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(i(64,127),3,7,0),e.addMany(i(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(i(48,60),4,8,4),e.addMany(i(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(i(32,64),6,0,6),e.add(127,6,0,6),e.addMany(i(64,127),6,0,0),e.addMany(i(32,48),3,9,5),e.addMany(i(32,48),5,9,5),e.addMany(i(48,64),5,0,6),e.addMany(i(64,127),5,7,0),e.addMany(i(32,48),4,9,5),e.addMany(i(32,48),1,9,2),e.addMany(i(32,48),2,9,2),e.addMany(i(48,127),2,10,0),e.addMany(i(48,80),1,10,0),e.addMany(i(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(i(96,127),1,10,0),e.add(80,1,11,9),e.addMany(r,9,0,9),e.add(127,9,0,9),e.addMany(i(28,32),9,0,9),e.addMany(i(32,48),9,9,12),e.addMany(i(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(r,11,0,11),e.addMany(i(32,128),11,0,11),e.addMany(i(28,32),11,0,11),e.addMany(r,10,0,10),e.add(127,10,0,10),e.addMany(i(28,32),10,0,10),e.addMany(i(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(i(32,48),10,9,12),e.addMany(r,12,0,12),e.add(127,12,0,12),e.addMany(i(28,32),12,0,12),e.addMany(i(32,48),12,9,12),e.addMany(i(48,64),12,0,11),e.addMany(i(64,127),12,12,13),e.addMany(i(64,127),10,12,13),e.addMany(i(64,127),9,12,13),e.addMany(r,13,13,13),e.addMany(s,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(h,0,2,0),e.add(h,8,5,8),e.add(h,6,0,6),e.add(h,11,0,11),e.add(h,13,13,13),e}();class c extends s.Disposable{constructor(e=t.VT500_TRANSITION_TABLE){super(),this._transitions=e,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new r.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(e,t,i)=>{},this._executeHandlerFb=e=>{},this._csiHandlerFb=(e,t)=>{},this._escHandlerFb=e=>{},this._errorHandlerFb=e=>e,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this.register((0,s.toDisposable)((()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)}))),this._oscParser=this.register(new n.OscParser),this._dcsParser=this.register(new o.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:\"\\\\\"},(()=>!0))}_identifier(e,t=[64,126]){let i=0;if(e.prefix){if(e.prefix.length>1)throw new Error(\"only one byte as prefix supported\");if(i=e.prefix.charCodeAt(0),i&&60>i||i>63)throw new Error(\"prefix must be in range 0x3c .. 0x3f\")}if(e.intermediates){if(e.intermediates.length>2)throw new Error(\"only two bytes as intermediates are supported\");for(let t=0;ts||s>47)throw new Error(\"intermediate must be in range 0x20 .. 0x2f\");i<<=8,i|=s}}if(1!==e.final.length)throw new Error(\"final must be a single byte\");const s=e.final.charCodeAt(0);if(t[0]>s||s>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=s,i}identToString(e){const t=[];for(;e;)t.push(String.fromCharCode(255&e)),e>>=8;return t.reverse().join(\"\")}setPrintHandler(e){this._printHandler=e}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(e,t){const i=this._identifier(e,[48,126]);void 0===this._escHandlers[i]&&(this._escHandlers[i]=[]);const s=this._escHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearEscHandler(e){this._escHandlers[this._identifier(e,[48,126])]&&delete this._escHandlers[this._identifier(e,[48,126])]}setEscHandlerFallback(e){this._escHandlerFb=e}setExecuteHandler(e,t){this._executeHandlers[e.charCodeAt(0)]=t}clearExecuteHandler(e){this._executeHandlers[e.charCodeAt(0)]&&delete this._executeHandlers[e.charCodeAt(0)]}setExecuteHandlerFallback(e){this._executeHandlerFb=e}registerCsiHandler(e,t){const i=this._identifier(e);void 0===this._csiHandlers[i]&&(this._csiHandlers[i]=[]);const s=this._csiHandlers[i];return s.push(t),{dispose:()=>{const e=s.indexOf(t);-1!==e&&s.splice(e,1)}}}clearCsiHandler(e){this._csiHandlers[this._identifier(e)]&&delete this._csiHandlers[this._identifier(e)]}setCsiHandlerFallback(e){this._csiHandlerFb=e}registerDcsHandler(e,t){return this._dcsParser.registerHandler(this._identifier(e),t)}clearDcsHandler(e){this._dcsParser.clearHandler(this._identifier(e))}setDcsHandlerFallback(e){this._dcsParser.setHandlerFallback(e)}registerOscHandler(e,t){return this._oscParser.registerHandler(e,t)}clearOscHandler(e){this._oscParser.clearHandler(e)}setOscHandlerFallback(e){this._oscParser.setHandlerFallback(e)}setErrorHandler(e){this._errorHandler=e}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,0!==this._parseStack.state&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(e,t,i,s,r){this._parseStack.state=e,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=s,this._parseStack.chunkPos=r}parse(e,t,i){let s,r=0,n=0,o=0;if(this._parseStack.state)if(2===this._parseStack.state)this._parseStack.state=0,o=this._parseStack.chunkPos+1;else{if(void 0===i||1===this._parseStack.state)throw this._parseStack.state=1,new Error(\"improper continuation due to previous async handler, giving up parsing\");const t=this._parseStack.handlers;let n=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(!1===i&&n>-1)for(;n>=0&&(s=t[n](this._params),!0!==s);n--)if(s instanceof Promise)return this._parseStack.handlerPos=n,s;this._parseStack.handlers=[];break;case 4:if(!1===i&&n>-1)for(;n>=0&&(s=t[n](),!0!==s);n--)if(s instanceof Promise)return this._parseStack.handlerPos=n,s;this._parseStack.handlers=[];break;case 6:if(r=e[this._parseStack.chunkPos],s=this._dcsParser.unhook(24!==r&&26!==r,i),s)return s;27===r&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(r=e[this._parseStack.chunkPos],s=this._oscParser.end(24!==r&&26!==r,i),s)return s;27===r&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,o=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let i=o;i>4){case 2:for(let s=i+1;;++s){if(s>=t||(r=e[s])<32||r>126&&r=t||(r=e[s])<32||r>126&&r=t||(r=e[s])<32||r>126&&r=t||(r=e[s])<32||r>126&&r=0&&(s=o[a](this._params),!0!==s);a--)if(s instanceof Promise)return this._preserveStack(3,o,a,n,i),s;a<0&&this._csiHandlerFb(this._collect<<8|r,this._params),this.precedingJoinState=0;break;case 8:do{switch(r){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(r-48)}}while(++i47&&r<60);i--;break;case 9:this._collect<<=8,this._collect|=r;break;case 10:const c=this._escHandlers[this._collect<<8|r];let l=c?c.length-1:-1;for(;l>=0&&(s=c[l](),!0!==s);l--)if(s instanceof Promise)return this._preserveStack(4,c,l,n,i),s;l<0&&this._escHandlerFb(this._collect<<8|r),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|r,this._params);break;case 13:for(let s=i+1;;++s)if(s>=t||24===(r=e[s])||26===r||27===r||r>127&&r=t||(r=e[s])<32||r>127&&r{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscHandler=t.OscParser=void 0;const s=i(5770),r=i(482),n=[];t.OscParser=class{constructor(){this._state=0,this._active=n,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(e,t){void 0===this._handlers[e]&&(this._handlers[e]=[]);const i=this._handlers[e];return i.push(t),{dispose:()=>{const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}}clearHandler(e){this._handlers[e]&&delete this._handlers[e]}setHandlerFallback(e){this._handlerFb=e}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=n}reset(){if(2===this._state)for(let e=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;e>=0;--e)this._active[e].end(!1);this._stack.paused=!1,this._active=n,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||n,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].start();else this._handlerFb(this._id,\"START\")}_put(e,t,i){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(e,t,i);else this._handlerFb(this._id,\"PUT\",(0,r.utf32ToString)(e,t,i))}start(){this.reset(),this._state=1}put(e,t,i){if(3!==this._state){if(1===this._state)for(;t0&&this._put(e,t,i)}}end(e,t=!0){if(0!==this._state){if(3!==this._state)if(1===this._state&&this._start(),this._active.length){let i=!1,s=this._active.length-1,r=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,i=t,r=this._stack.fallThrough,this._stack.paused=!1),!r&&!1===i){for(;s>=0&&(i=this._active[s].end(e),!0!==i);s--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,i;s--}for(;s>=0;s--)if(i=this._active[s].end(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,i}else this._handlerFb(this._id,\"END\",e);this._active=n,this._id=-1,this._state=0}}},t.OscHandler=class{constructor(e){this._handler=e,this._data=\"\",this._hitLimit=!1}start(){this._data=\"\",this._hitLimit=!1}put(e,t,i){this._hitLimit||(this._data+=(0,r.utf32ToString)(e,t,i),this._data.length>s.PAYLOAD_LIMIT&&(this._data=\"\",this._hitLimit=!0))}end(e){let t=!1;if(this._hitLimit)t=!1;else if(e&&(t=this._handler(this._data),t instanceof Promise))return t.then((e=>(this._data=\"\",this._hitLimit=!1,e)));return this._data=\"\",this._hitLimit=!1,t}}},8742:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.Params=void 0;const i=2147483647;class s{static fromArray(e){const t=new s;if(!e.length)return t;for(let i=Array.isArray(e[0])?1:0;i256)throw new Error(\"maxSubParamsLength must not be greater than 256\");this.params=new Int32Array(e),this.length=0,this._subParams=new Int32Array(t),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(e),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const e=new s(this.maxLength,this.maxSubParamsLength);return e.params.set(this.params),e.length=this.length,e._subParams.set(this._subParams),e._subParamsLength=this._subParamsLength,e._subParamsIdx.set(this._subParamsIdx),e._rejectDigits=this._rejectDigits,e._rejectSubDigits=this._rejectSubDigits,e._digitIsSub=this._digitIsSub,e}toArray(){const e=[];for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&e.push(Array.prototype.slice.call(this._subParams,i,s))}return e}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(e){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=e>i?i:e}}addSubParam(e){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(e<-1)throw new Error(\"values lesser than -1 are not allowed\");this._subParams[this._subParamsLength++]=e>i?i:e,this._subParamsIdx[this.length-1]++}}hasSubParams(e){return(255&this._subParamsIdx[e])-(this._subParamsIdx[e]>>8)>0}getSubParams(e){const t=this._subParamsIdx[e]>>8,i=255&this._subParamsIdx[e];return i-t>0?this._subParams.subarray(t,i):null}getSubParamsAll(){const e={};for(let t=0;t>8,s=255&this._subParamsIdx[t];s-i>0&&(e[t]=this._subParams.slice(i,s))}return e}addDigit(e){let t;if(this._rejectDigits||!(t=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const s=this._digitIsSub?this._subParams:this.params,r=s[t-1];s[t-1]=~r?Math.min(10*r+e,i):e}}t.Params=s},5741:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.AddonManager=void 0,t.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){const i={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(i),t.dispose=()=>this._wrappedAddonDispose(i),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let i=0;i{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferApiView=void 0;const s=i(3785),r=i(511);t.BufferApiView=class{constructor(e,t){this._buffer=e,this.type=t}init(e){return this._buffer=e,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(e){const t=this._buffer.lines.get(e);if(t)return new s.BufferLineApiView(t)}getNullCell(){return new r.CellData}}},3785:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferLineApiView=void 0;const s=i(511);t.BufferLineApiView=class{constructor(e){this._line=e}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new s.CellData)}translateToString(e,t,i){return this._line.translateToString(e,t,i)}}},8285:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferNamespaceApi=void 0;const s=i(8771),r=i(8460),n=i(844);class o extends n.Disposable{constructor(e){super(),this._core=e,this._onBufferChange=this.register(new r.EventEmitter),this.onBufferChange=this._onBufferChange.event,this._normal=new s.BufferApiView(this._core.buffers.normal,\"normal\"),this._alternate=new s.BufferApiView(this._core.buffers.alt,\"alternate\"),this._core.buffers.onBufferActivate((()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error(\"Active buffer is neither normal nor alternate\")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}t.BufferNamespaceApi=o},7975:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.ParserApi=void 0,t.ParserApi=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,(e=>t(e.toArray())))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,((e,i)=>t(e,i.toArray())))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}}},7090:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeApi=void 0,t.UnicodeApi=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}}},744:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.BufferService=t.MINIMUM_ROWS=t.MINIMUM_COLS=void 0;const n=i(8460),o=i(844),a=i(5295),h=i(2585);t.MINIMUM_COLS=2,t.MINIMUM_ROWS=1;let c=t.BufferService=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(e){super(),this.isUserScrolling=!1,this._onResize=this.register(new n.EventEmitter),this.onResize=this._onResize.event,this._onScroll=this.register(new n.EventEmitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,t.MINIMUM_COLS),this.rows=Math.max(e.rawOptions.rows||0,t.MINIMUM_ROWS),this.buffers=this.register(new a.BufferSet(e,this))}resize(e,t){this.cols=e,this.rows=t,this.buffers.resize(e,t),this._onResize.fire({cols:e,rows:t})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,t=!1){const i=this.buffer;let s;s=this._cachedBlankLine,s&&s.length===this.cols&&s.getFg(0)===e.fg&&s.getBg(0)===e.bg||(s=i.getBlankLine(e,t),this._cachedBlankLine=s),s.isWrapped=t;const r=i.ybase+i.scrollTop,n=i.ybase+i.scrollBottom;if(0===i.scrollTop){const e=i.lines.isFull;n===i.lines.length-1?e?i.lines.recycle().copyFrom(s):i.lines.push(s.clone()):i.lines.splice(n+1,0,s.clone()),e?this.isUserScrolling&&(i.ydisp=Math.max(i.ydisp-1,0)):(i.ybase++,this.isUserScrolling||i.ydisp++)}else{const e=n-r+1;i.lines.shiftElements(r+1,e-1,-1),i.lines.set(n,s.clone())}this.isUserScrolling||(i.ydisp=i.ybase),this._onScroll.fire(i.ydisp)}scrollLines(e,t,i){const s=this.buffer;if(e<0){if(0===s.ydisp)return;this.isUserScrolling=!0}else e+s.ydisp>=s.ybase&&(this.isUserScrolling=!1);const r=s.ydisp;s.ydisp=Math.max(Math.min(s.ydisp+e,s.ybase),0),r!==s.ydisp&&(t||this._onScroll.fire(s.ydisp))}};t.BufferService=c=s([r(0,h.IOptionsService)],c)},7994:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.CharsetService=void 0,t.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(e){this.glevel=e,this.charset=this._charsets[e]}setgCharset(e,t){this._charsets[e]=t,this.glevel===e&&(this.charset=t)}}},1753:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreMouseService=void 0;const n=i(2585),o=i(8460),a=i(844),h={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:e=>4!==e.button&&1===e.action&&(e.ctrl=!1,e.alt=!1,e.shift=!1,!0)},VT200:{events:19,restrict:e=>32!==e.action},DRAG:{events:23,restrict:e=>32!==e.action||3!==e.button},ANY:{events:31,restrict:e=>!0}};function c(e,t){let i=(e.ctrl?16:0)|(e.shift?4:0)|(e.alt?8:0);return 4===e.button?(i|=64,i|=e.action):(i|=3&e.button,4&e.button&&(i|=64),8&e.button&&(i|=128),32===e.action?i|=32:0!==e.action||t||(i|=3)),i}const l=String.fromCharCode,d={DEFAULT:e=>{const t=[c(e,!1)+32,e.col+32,e.row+32];return t[0]>255||t[1]>255||t[2]>255?\"\":`\u001b[M${l(t[0])}${l(t[1])}${l(t[2])}`},SGR:e=>{const t=0===e.action&&4!==e.button?\"m\":\"M\";return`\u001b[<${c(e,!0)};${e.col};${e.row}${t}`},SGR_PIXELS:e=>{const t=0===e.action&&4!==e.button?\"m\":\"M\";return`\u001b[<${c(e,!0)};${e.x};${e.y}${t}`}};let _=t.CoreMouseService=class extends a.Disposable{constructor(e,t){super(),this._bufferService=e,this._coreService=t,this._protocols={},this._encodings={},this._activeProtocol=\"\",this._activeEncoding=\"\",this._lastEvent=null,this._onProtocolChange=this.register(new o.EventEmitter),this.onProtocolChange=this._onProtocolChange.event;for(const e of Object.keys(h))this.addProtocol(e,h[e]);for(const e of Object.keys(d))this.addEncoding(e,d[e]);this.reset()}addProtocol(e,t){this._protocols[e]=t}addEncoding(e,t){this._encodings[e]=t}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return 0!==this._protocols[this._activeProtocol].events}set activeProtocol(e){if(!this._protocols[e])throw new Error(`unknown protocol \"${e}\"`);this._activeProtocol=e,this._onProtocolChange.fire(this._protocols[e].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(e){if(!this._encodings[e])throw new Error(`unknown encoding \"${e}\"`);this._activeEncoding=e}reset(){this.activeProtocol=\"NONE\",this.activeEncoding=\"DEFAULT\",this._lastEvent=null}triggerMouseEvent(e){if(e.col<0||e.col>=this._bufferService.cols||e.row<0||e.row>=this._bufferService.rows)return!1;if(4===e.button&&32===e.action)return!1;if(3===e.button&&32!==e.action)return!1;if(4!==e.button&&(2===e.action||3===e.action))return!1;if(e.col++,e.row++,32===e.action&&this._lastEvent&&this._equalEvents(this._lastEvent,e,\"SGR_PIXELS\"===this._activeEncoding))return!1;if(!this._protocols[this._activeProtocol].restrict(e))return!1;const t=this._encodings[this._activeEncoding](e);return t&&(\"DEFAULT\"===this._activeEncoding?this._coreService.triggerBinaryEvent(t):this._coreService.triggerDataEvent(t,!0)),this._lastEvent=e,!0}explainEvents(e){return{down:!!(1&e),up:!!(2&e),drag:!!(4&e),move:!!(8&e),wheel:!!(16&e)}}_equalEvents(e,t,i){if(i){if(e.x!==t.x)return!1;if(e.y!==t.y)return!1}else{if(e.col!==t.col)return!1;if(e.row!==t.row)return!1}return e.button===t.button&&e.action===t.action&&e.ctrl===t.ctrl&&e.alt===t.alt&&e.shift===t.shift}};t.CoreMouseService=_=s([r(0,n.IBufferService),r(1,n.ICoreService)],_)},6975:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.CoreService=void 0;const n=i(1439),o=i(8460),a=i(844),h=i(2585),c=Object.freeze({insertMode:!1}),l=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0});let d=t.CoreService=class extends a.Disposable{constructor(e,t,i){super(),this._bufferService=e,this._logService=t,this._optionsService=i,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this.register(new o.EventEmitter),this.onData=this._onData.event,this._onUserInput=this.register(new o.EventEmitter),this.onUserInput=this._onUserInput.event,this._onBinary=this.register(new o.EventEmitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this.register(new o.EventEmitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,n.clone)(c),this.decPrivateModes=(0,n.clone)(l)}reset(){this.modes=(0,n.clone)(c),this.decPrivateModes=(0,n.clone)(l)}triggerDataEvent(e,t=!1){if(this._optionsService.rawOptions.disableStdin)return;const i=this._bufferService.buffer;t&&this._optionsService.rawOptions.scrollOnUserInput&&i.ybase!==i.ydisp&&this._onRequestScrollToBottom.fire(),t&&this._onUserInput.fire(),this._logService.debug(`sending data \"${e}\"`,(()=>e.split(\"\").map((e=>e.charCodeAt(0))))),this._onData.fire(e)}triggerBinaryEvent(e){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary \"${e}\"`,(()=>e.split(\"\").map((e=>e.charCodeAt(0))))),this._onBinary.fire(e))}};t.CoreService=d=s([r(0,h.IBufferService),r(1,h.ILogService),r(2,h.IOptionsService)],d)},9074:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.DecorationService=void 0;const s=i(8055),r=i(8460),n=i(844),o=i(6106);let a=0,h=0;class c extends n.Disposable{get decorations(){return this._decorations.values()}constructor(){super(),this._decorations=new o.SortedList((e=>e?.marker.line)),this._onDecorationRegistered=this.register(new r.EventEmitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this.register(new r.EventEmitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this.register((0,n.toDisposable)((()=>this.reset())))}registerDecoration(e){if(e.marker.isDisposed)return;const t=new l(e);if(t){const e=t.marker.onDispose((()=>t.dispose()));t.onDispose((()=>{t&&(this._decorations.delete(t)&&this._onDecorationRemoved.fire(t),e.dispose())})),this._decorations.insert(t),this._onDecorationRegistered.fire(t)}return t}reset(){for(const e of this._decorations.values())e.dispose();this._decorations.clear()}*getDecorationsAtCell(e,t,i){let s=0,r=0;for(const n of this._decorations.getKeyIterator(t))s=n.options.x??0,r=s+(n.options.width??1),e>=s&&e{a=t.options.x??0,h=a+(t.options.width??1),e>=a&&e{Object.defineProperty(t,\"__esModule\",{value:!0}),t.InstantiationService=t.ServiceCollection=void 0;const s=i(2585),r=i(8343);class n{constructor(...e){this._entries=new Map;for(const[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}forEach(e){for(const[t,i]of this._entries.entries())e(t,i)}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}t.ServiceCollection=n,t.InstantiationService=class{constructor(){this._services=new n,this._services.set(s.IInstantiationService,this)}setService(e,t){this._services.set(e,t)}getService(e){return this._services.get(e)}createInstance(e,...t){const i=(0,r.getServiceDependencies)(e).sort(((e,t)=>e.index-t.index)),s=[];for(const t of i){const i=this._services.get(t.id);if(!i)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id}.`);s.push(i)}const n=i.length>0?i[0].index:t.length;if(t.length!==n)throw new Error(`[createInstance] First service dependency of ${e.name} at position ${n+1} conflicts with ${t.length} static arguments`);return new e(...[...t,...s])}}},7866:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.traceCall=t.setTraceLogger=t.LogService=void 0;const n=i(844),o=i(2585),a={trace:o.LogLevelEnum.TRACE,debug:o.LogLevelEnum.DEBUG,info:o.LogLevelEnum.INFO,warn:o.LogLevelEnum.WARN,error:o.LogLevelEnum.ERROR,off:o.LogLevelEnum.OFF};let h,c=t.LogService=class extends n.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=o.LogLevelEnum.OFF,this._updateLogLevel(),this.register(this._optionsService.onSpecificOptionChange(\"logLevel\",(()=>this._updateLogLevel()))),h=this}_updateLogLevel(){this._logLevel=a[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let t=0;tJSON.stringify(e))).join(\", \")})`);const t=s.apply(this,e);return h.trace(`GlyphRenderer#${s.name} return`,t),t}}},7302:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.OptionsService=t.DEFAULT_OPTIONS=void 0;const s=i(8460),r=i(844),n=i(6114);t.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:\"block\",cursorWidth:1,cursorInactiveStyle:\"outline\",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:\"alt\",fastScrollSensitivity:5,fontFamily:\"courier-new, courier, monospace\",fontSize:15,fontWeight:\"normal\",fontWeightBold:\"bold\",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:\"info\",logger:null,scrollback:1e3,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},rescaleOverlappingGlyphs:!1,rightClickSelectsWord:n.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:\" ()[]{}',\\\"`\",altClickMovesCursor:!0,convertEol:!1,termName:\"xterm\",cancelEvents:!1,overviewRulerWidth:0};const o=[\"normal\",\"bold\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"];class a extends r.Disposable{constructor(e){super(),this._onOptionChange=this.register(new s.EventEmitter),this.onOptionChange=this._onOptionChange.event;const i={...t.DEFAULT_OPTIONS};for(const t in e)if(t in i)try{const s=e[t];i[t]=this._sanitizeAndValidateOption(t,s)}catch(e){console.error(e)}this.rawOptions=i,this.options={...i},this._setupOptions(),this.register((0,r.toDisposable)((()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null})))}onSpecificOptionChange(e,t){return this.onOptionChange((i=>{i===e&&t(this.rawOptions[e])}))}onMultipleOptionChange(e,t){return this.onOptionChange((i=>{-1!==e.indexOf(i)&&t()}))}_setupOptions(){const e=e=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key \"${e}\"`);return this.rawOptions[e]},i=(e,i)=>{if(!(e in t.DEFAULT_OPTIONS))throw new Error(`No option with key \"${e}\"`);i=this._sanitizeAndValidateOption(e,i),this.rawOptions[e]!==i&&(this.rawOptions[e]=i,this._onOptionChange.fire(e))};for(const t in this.rawOptions){const s={get:e.bind(this,t),set:i.bind(this,t)};Object.defineProperty(this.options,t,s)}}_sanitizeAndValidateOption(e,i){switch(e){case\"cursorStyle\":if(i||(i=t.DEFAULT_OPTIONS[e]),!function(e){return\"block\"===e||\"underline\"===e||\"bar\"===e}(i))throw new Error(`\"${i}\" is not a valid value for ${e}`);break;case\"wordSeparator\":i||(i=t.DEFAULT_OPTIONS[e]);break;case\"fontWeight\":case\"fontWeightBold\":if(\"number\"==typeof i&&1<=i&&i<=1e3)break;i=o.includes(i)?i:t.DEFAULT_OPTIONS[e];break;case\"cursorWidth\":i=Math.floor(i);case\"lineHeight\":case\"tabStopWidth\":if(i<1)throw new Error(`${e} cannot be less than 1, value: ${i}`);break;case\"minimumContrastRatio\":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case\"scrollback\":if((i=Math.min(i,4294967295))<0)throw new Error(`${e} cannot be less than 0, value: ${i}`);break;case\"fastScrollSensitivity\":case\"scrollSensitivity\":if(i<=0)throw new Error(`${e} cannot be less than or equal to 0, value: ${i}`);break;case\"rows\":case\"cols\":if(!i&&0!==i)throw new Error(`${e} must be numeric, value: ${i}`);break;case\"windowsPty\":i=i??{}}return i}}t.OptionsService=a},2660:function(e,t,i){var s=this&&this.__decorate||function(e,t,i,s){var r,n=arguments.length,o=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,s);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(n<3?r(o):n>3?r(t,i,o):r(t,i))||o);return n>3&&o&&Object.defineProperty(t,i,o),o},r=this&&this.__param||function(e,t){return function(i,s){t(i,s,e)}};Object.defineProperty(t,\"__esModule\",{value:!0}),t.OscLinkService=void 0;const n=i(2585);let o=t.OscLinkService=class{constructor(e){this._bufferService=e,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(e){const t=this._bufferService.buffer;if(void 0===e.id){const i=t.addMarker(t.ybase+t.y),s={data:e,id:this._nextId++,lines:[i]};return i.onDispose((()=>this._removeMarkerFromLink(s,i))),this._dataByLinkId.set(s.id,s),s.id}const i=e,s=this._getEntryIdKey(i),r=this._entriesWithId.get(s);if(r)return this.addLineToLink(r.id,t.ybase+t.y),r.id;const n=t.addMarker(t.ybase+t.y),o={id:this._nextId++,key:this._getEntryIdKey(i),data:i,lines:[n]};return n.onDispose((()=>this._removeMarkerFromLink(o,n))),this._entriesWithId.set(o.key,o),this._dataByLinkId.set(o.id,o),o.id}addLineToLink(e,t){const i=this._dataByLinkId.get(e);if(i&&i.lines.every((e=>e.line!==t))){const e=this._bufferService.buffer.addMarker(t);i.lines.push(e),e.onDispose((()=>this._removeMarkerFromLink(i,e)))}}getLinkData(e){return this._dataByLinkId.get(e)?.data}_getEntryIdKey(e){return`${e.id};;${e.uri}`}_removeMarkerFromLink(e,t){const i=e.lines.indexOf(t);-1!==i&&(e.lines.splice(i,1),0===e.lines.length&&(void 0!==e.data.id&&this._entriesWithId.delete(e.key),this._dataByLinkId.delete(e.id)))}};t.OscLinkService=o=s([r(0,n.IBufferService)],o)},8343:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.createDecorator=t.getServiceDependencies=t.serviceRegistry=void 0;const i=\"di$target\",s=\"di$dependencies\";t.serviceRegistry=new Map,t.getServiceDependencies=function(e){return e[s]||[]},t.createDecorator=function(e){if(t.serviceRegistry.has(e))return t.serviceRegistry.get(e);const r=function(e,t,n){if(3!==arguments.length)throw new Error(\"@IServiceName-decorator can only be used to decorate a parameter\");!function(e,t,r){t[i]===t?t[s].push({id:e,index:r}):(t[s]=[{id:e,index:r}],t[i]=t)}(r,e,n)};return r.toString=()=>e,t.serviceRegistry.set(e,r),r}},2585:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.IDecorationService=t.IUnicodeService=t.IOscLinkService=t.IOptionsService=t.ILogService=t.LogLevelEnum=t.IInstantiationService=t.ICharsetService=t.ICoreService=t.ICoreMouseService=t.IBufferService=void 0;const s=i(8343);var r;t.IBufferService=(0,s.createDecorator)(\"BufferService\"),t.ICoreMouseService=(0,s.createDecorator)(\"CoreMouseService\"),t.ICoreService=(0,s.createDecorator)(\"CoreService\"),t.ICharsetService=(0,s.createDecorator)(\"CharsetService\"),t.IInstantiationService=(0,s.createDecorator)(\"InstantiationService\"),function(e){e[e.TRACE=0]=\"TRACE\",e[e.DEBUG=1]=\"DEBUG\",e[e.INFO=2]=\"INFO\",e[e.WARN=3]=\"WARN\",e[e.ERROR=4]=\"ERROR\",e[e.OFF=5]=\"OFF\"}(r||(t.LogLevelEnum=r={})),t.ILogService=(0,s.createDecorator)(\"LogService\"),t.IOptionsService=(0,s.createDecorator)(\"OptionsService\"),t.IOscLinkService=(0,s.createDecorator)(\"OscLinkService\"),t.IUnicodeService=(0,s.createDecorator)(\"UnicodeService\"),t.IDecorationService=(0,s.createDecorator)(\"DecorationService\")},1480:(e,t,i)=>{Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeService=void 0;const s=i(8460),r=i(225);class n{static extractShouldJoin(e){return 0!=(1&e)}static extractWidth(e){return e>>1&3}static extractCharKind(e){return e>>3}static createPropertyValue(e,t,i=!1){return(16777215&e)<<3|(3&t)<<1|(i?1:0)}constructor(){this._providers=Object.create(null),this._active=\"\",this._onChange=new s.EventEmitter,this.onChange=this._onChange.event;const e=new r.UnicodeV6;this.register(e),this._active=e.version,this._activeProvider=e}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(e){if(!this._providers[e])throw new Error(`unknown Unicode version \"${e}\"`);this._active=e,this._activeProvider=this._providers[e],this._onChange.fire(e)}register(e){this._providers[e.version]=e}wcwidth(e){return this._activeProvider.wcwidth(e)}getStringCellWidth(e){let t=0,i=0;const s=e.length;for(let r=0;r=s)return t+this.wcwidth(o);const i=e.charCodeAt(r);56320<=i&&i<=57343?o=1024*(o-55296)+i-56320+65536:t+=this.wcwidth(i)}const a=this.charProperties(o,i);let h=n.extractWidth(a);n.extractShouldJoin(a)&&(h-=n.extractWidth(i)),t+=h,i=a}return t}charProperties(e,t){return this._activeProvider.charProperties(e,t)}}t.UnicodeService=n}},t={};function i(s){var r=t[s];if(void 0!==r)return r.exports;var n=t[s]={exports:{}};return e[s].call(n.exports,n,n.exports,i),n.exports}var s={};return(()=>{var e=s;Object.defineProperty(e,\"__esModule\",{value:!0}),e.Terminal=void 0;const t=i(9042),r=i(3236),n=i(844),o=i(5741),a=i(8285),h=i(7975),c=i(7090),l=[\"cols\",\"rows\"];class d extends n.Disposable{constructor(e){super(),this._core=this.register(new r.Terminal(e)),this._addonManager=this.register(new o.AddonManager),this._publicOptions={...this._core.options};const t=e=>this._core.options[e],i=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(const e in this._core.options){const s={get:t.bind(this,e),set:i.bind(this,e)};Object.defineProperty(this._publicOptions,e,s)}}_checkReadonlyOptions(e){if(l.includes(e))throw new Error(`Option \"${e}\" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error(\"You must set the allowProposedApi option to true to use proposed API\")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||(this._parser=new h.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new c.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||(this._buffer=this.register(new a.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){const e=this._core.coreService.decPrivateModes;let t=\"none\";switch(this._core.coreMouseService.activeProtocol){case\"X10\":t=\"x10\";break;case\"VT200\":t=\"vt200\";break;case\"DRAG\":t=\"drag\";break;case\"ANY\":t=\"any\"}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,wraparoundMode:e.wraparound}}get options(){return this._publicOptions}set options(e){for(const t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._checkProposedApi(),this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,i){this._verifyIntegers(e,t,i),this._core.select(e,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write(\"\\r\\n\",t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return t}_verifyIntegers(...e){for(const t of e)if(t===1/0||isNaN(t)||t%1!=0)throw new Error(\"This API only accepts integers\")}_verifyPositiveIntegers(...e){for(const t of e)if(t&&(t===1/0||isNaN(t)||t%1!=0||t<0))throw new Error(\"This API only accepts positive integers\")}}e.Terminal=d})(),s})()));\n//# sourceMappingURL=xterm.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHh0ZXJtL3h0ZXJtL2xpYi94dGVybS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEdBQUcsSUFBaUQsb0JBQW9CLEtBQUssYUFBaUksQ0FBQyx1QkFBdUIsYUFBYSxPQUFPLHFCQUFxQiwrQ0FBK0MsbUZBQW1GLDZGQUE2RiwwQkFBMEIsS0FBSyxvREFBb0QsOENBQThDLHFDQUFxQyxxQkFBcUIsV0FBVyxzQ0FBc0MsU0FBUyxnQ0FBZ0MsaUVBQWlFLHdEQUF3RCxxQkFBcUIsNmhCQUE2aEIsWUFBWSxzQkFBc0Isa0hBQWtILGswQkFBazBCLDY5QkFBNjlCLGlFQUFpRSxJQUFJLGNBQWMsWUFBWSxJQUFJLDBCQUEwQixlQUFlLDRRQUE0USxtQkFBbUIsNERBQTRELGNBQWMsNEJBQTRCLFFBQVEseUNBQXlDLGtCQUFrQiwyREFBMkQsaUJBQWlCLDBEQUEwRCxZQUFZLEtBQUssS0FBSyxxSUFBcUksaUxBQWlMLDJCQUEyQixzQkFBc0IsaUhBQWlILDBCQUEwQix5RUFBeUUsbURBQW1ELG1DQUFtQyxVQUFVLDhCQUE4QixRQUFRLHFSQUFxUiw0Q0FBNEMsc0ZBQXNGLEtBQUssNENBQTRDLDREQUE0RCw2VUFBNlUseUJBQXlCLHVDQUF1QyxnQ0FBZ0MsYUFBYSx5R0FBeUcsaUdBQWlHLE9BQU8sd0NBQXdDLElBQUksdUNBQXVDLGlRQUFpUSxpREFBaUQsOENBQThDLHVDQUF1QyxpSEFBaUgsdUNBQXVDLDhDQUE4QyxVQUFVLGdCQUFnQixJQUFJLHlDQUF5QyxzREFBc0Qsd0VBQXdFLGdDQUFnQyxtRUFBbUUsdUNBQXVDLDBDQUEwQyxnQkFBZ0IsZUFBZSxTQUFTLG1GQUFtRiwyRkFBMkYsaUJBQWlCLDZHQUE2Ryw2Q0FBNkMsc0JBQXNCLGtIQUFrSCxLQUFLLDJCQUEyQix5REFBeUQsd0lBQXdJLCtCQUErQixtRUFBbUUsdUZBQXVGLHlCQUF5QixtREFBbUQsNENBQTRDLGdEQUFnRCw0RkFBNEYsWUFBWSxzQkFBc0Isc0RBQXNELHlC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ZUFBZSxpQ0FBaUMsY0FBYyxxREFBcUQsZUFBZSxpQ0FBaUMsdUJBQXVCLHlDQUF5QyxpQkFBaUIsNEJBQTRCLFlBQVksdUJBQXVCLGlCQUFpQixzREFBc0QsVUFBVSxnQkFBZ0IsZUFBZSxrREFBa0QsZUFBZSxrREFBa0QsY0FBYyx5QkFBeUIsaUJBQWlCLDRCQUE0QixnQkFBZ0IsbURBQW1ELFFBQVEsbUJBQW1CLFdBQVcsc0JBQXNCLGFBQWEsK0NBQStDLFNBQVMsb0JBQW9CLGFBQWEsa0RBQWtELFFBQVEsbUJBQW1CLG9CQUFvQiwrQkFBK0IsYUFBYSxxQ0FBcUMscUJBQXFCLFNBQVMsc0JBQXNCLGdHQUFnRyw4QkFBOEIsb0hBQW9ILGFBQWEsTUFBTTtBQUMvNzBSIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ28tc3NoLXdlYi1jbGllbnQvLi9ub2RlX21vZHVsZXMvQHh0ZXJtL3h0ZXJtL2xpYi94dGVybS5qcz84MTIyIl0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXt2YXIgaT10KCk7Zm9yKHZhciBzIGluIGkpKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbc109aVtzXX19KGdsb2JhbFRoaXMsKCgpPT4oKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgZT17NDU2NzpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFjY2Vzc2liaWxpdHlNYW5hZ2VyPXZvaWQgMDtjb25zdCBuPWkoOTA0Miksbz1pKDk5MjQpLGE9aSg4NDQpLGg9aSg0NzI1KSxjPWkoMjU4NSksbD1pKDM2NTYpO2xldCBkPXQuQWNjZXNzaWJpbGl0eU1hbmFnZXI9Y2xhc3MgZXh0ZW5kcyBhLkRpc3Bvc2FibGV7Y29uc3RydWN0b3IoZSx0LGkscyl7c3VwZXIoKSx0aGlzLl90ZXJtaW5hbD1lLHRoaXMuX2NvcmVCcm93c2VyU2VydmljZT1pLHRoaXMuX3JlbmRlclNlcnZpY2U9cyx0aGlzLl9yb3dDb2x1bW5zPW5ldyBXZWFrTWFwLHRoaXMuX2xpdmVSZWdpb25MaW5lQ291bnQ9MCx0aGlzLl9jaGFyc1RvQ29uc3VtZT1bXSx0aGlzLl9jaGFyc1RvQW5ub3VuY2U9XCJcIix0aGlzLl9hY2Nlc3NpYmlsaXR5Q29udGFpbmVyPXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS5tYWluRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9hY2Nlc3NpYmlsaXR5Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1hY2Nlc3NpYmlsaXR5XCIpLHRoaXMuX3Jvd0NvbnRhaW5lcj10aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UubWFpbkRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5fcm93Q29udGFpbmVyLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImxpc3RcIiksdGhpcy5fcm93Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1hY2Nlc3NpYmlsaXR5LXRyZWVcIiksdGhpcy5fcm93RWxlbWVudHM9W107Zm9yKGxldCBlPTA7ZTx0aGlzLl90ZXJtaW5hbC5yb3dzO2UrKyl0aGlzLl9yb3dFbGVtZW50c1tlXT10aGlzLl9jcmVhdGVBY2Nlc3NpYmlsaXR5VHJlZU5vZGUoKSx0aGlzLl9yb3dDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm93RWxlbWVudHNbZV0pO2lmKHRoaXMuX3RvcEJvdW5kYXJ5Rm9jdXNMaXN0ZW5lcj1lPT50aGlzLl9oYW5kbGVCb3VuZGFyeUZvY3VzKGUsMCksdGhpcy5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyPWU9PnRoaXMuX2hhbmRsZUJvdW5kYXJ5Rm9jdXMoZSwxKSx0aGlzLl9yb3dFbGVtZW50c1swXS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl90b3BCb3VuZGFyeUZvY3VzTGlzdGVuZXIpLHRoaXMuX3Jvd0VsZW1lbnRzW3RoaXMuX3Jvd0VsZW1lbnRzLmxlbmd0aC0xXS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl9ib3R0b21Cb3VuZGFyeUZvY3VzTGlzdGVuZXIpLHRoaXMuX3JlZnJlc2hSb3dzRGltZW5zaW9ucygpLHRoaXMuX2FjY2Vzc2liaWxpdHlDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm93Q29udGFpbmVyKSx0aGlzLl9saXZlUmVnaW9uPXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS5tYWluRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9saXZlUmVnaW9uLmNsYXNzTGlzdC5hZGQoXCJsaXZlLXJlZ2lvblwiKSx0aGlzLl9saXZlUmVnaW9uLnNldEF0dHJpYnV0ZShcImFyaWEtbGl2ZVwiLFwiYXNzZXJ0aXZlXCIpLHRoaXMuX2FjY2Vzc2liaWxpdHlDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fbGl2ZVJlZ2lvbiksdGhpcy5fbGl2ZVJlZ2lvbkRlYm91bmNlcj10aGlzLnJlZ2lzdGVyKG5ldyBvLlRpbWVCYXNlZERlYm91bmNlcih0aGlzLl9yZW5kZXJSb3dzLmJpbmQodGhpcykpKSwhdGhpcy5fdGVybWluYWwuZWxlbWVudCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZW5hYmxlIGFjY2Vzc2liaWxpdHkgYmVmb3JlIFRlcm1pbmFsLm9wZW5cIik7dGhpcy5fdGVybWluYWwuZWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsdGhpcy5fYWNjZXNzaWJpbGl0eUNvbnRhaW5lciksdGhpcy5yZWdpc3Rlcih0aGlzLl90ZXJtaW5hbC5vblJlc2l6ZSgoZT0+dGhpcy5faGFuZGxlUmVzaXplKGUucm93cykpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl90ZXJtaW5hbC5vblJlbmRlcigoZT0+dGhpcy5fcmVmcmVzaFJvd3MoZS5zdGFydCxlLmVuZCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl90ZXJtaW5hbC5vblNjcm9sbCgoKCk9PnRoaXMuX3JlZnJlc2hSb3dzKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl90ZXJtaW5hbC5vbkExMXlDaGFyKChlPT50aGlzLl9oYW5kbGVDaGFyKGUpKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fdGVybWluYWwub25MaW5lRmVlZCgoKCk9PnRoaXMuX2hhbmRsZUNoYXIoXCJcXG5cIikpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl90ZXJtaW5hbC5vbkExMXlUYWIoKGU9PnRoaXMuX2hhbmRsZVRhYihlKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3Rlcm1pbmFsLm9uS2V5KChlPT50aGlzLl9oYW5kbGVLZXkoZS5rZXkpKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fdGVybWluYWwub25CbHVyKCgoKT0+dGhpcy5fY2xlYXJMaXZlUmVnaW9uKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uRGltZW5zaW9uc0NoYW5nZSgoKCk9PnRoaXMuX3JlZnJlc2hSb3dzRGltZW5zaW9ucygpKSkpLHRoaXMucmVnaXN0ZXIoKDAsbC5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKGRvY3VtZW50LFwic2VsZWN0aW9uY2hhbmdlXCIsKCgpPT50aGlzLl9oYW5kbGVTZWxlY3Rpb25DaGFuZ2UoKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2NvcmVCcm93c2VyU2VydmljZS5vbkRwckNoYW5nZSgoKCk9PnRoaXMuX3JlZnJlc2hSb3dzRGltZW5zaW9ucygpKSkpLHRoaXMuX3JlZnJlc2hSb3dzKCksdGhpcy5yZWdpc3RlcigoMCxhLnRvRGlzcG9zYWJsZSkoKCgpPT57dGhpcy5fYWNjZXNzaWJpbGl0eUNvbnRhaW5lci5yZW1vdmUoKSx0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGg9MH0pKSl9X2hhbmRsZVRhYihlKXtmb3IobGV0IHQ9MDt0PGU7dCsrKXRoaXMuX2hhbmRsZUNoYXIoXCIgXCIpfV9oYW5kbGVDaGFyKGUpe3RoaXMuX2xpdmVSZWdpb25MaW5lQ291bnQ8MjEmJih0aGlzLl9jaGFyc1RvQ29uc3VtZS5sZW5ndGg+MD90aGlzLl9jaGFyc1RvQ29uc3VtZS5zaGlmdCgpIT09ZSYmKHRoaXMuX2NoYXJzVG9Bbm5vdW5jZSs9ZSk6dGhpcy5fY2hhcnNUb0Fubm91bmNlKz1lLFwiXFxuXCI9PT1lJiYodGhpcy5fbGl2ZVJlZ2lvbkxpbmVDb3VudCsrLDIxPT09dGhpcy5fbGl2ZVJlZ2lvbkxpbmVDb3VudCYmKHRoaXMuX2xpdmVSZWdpb24udGV4dENvbnRlbnQrPW4udG9vTXVjaE91dHB1dCkpKX1fY2xlYXJMaXZlUmVnaW9uKCl7dGhpcy5fbGl2ZVJlZ2lvbi50ZXh0Q29udGVudD1cIlwiLHRoaXMuX2xpdmVSZWdpb25MaW5lQ291bnQ9MH1faGFuZGxlS2V5KGUpe3RoaXMuX2NsZWFyTGl2ZVJlZ2lvbigpLC9cXHB7Q29udHJvbH0vdS50ZXN0KGUpfHx0aGlzLl9jaGFyc1RvQ29uc3VtZS5wdXNoKGUpfV9yZWZyZXNoUm93cyhlLHQpe3RoaXMuX2xpdmVSZWdpb25EZWJvdW5jZXIucmVmcmVzaChlLHQsdGhpcy5fdGVybWluYWwucm93cyl9X3JlbmRlclJvd3MoZSx0KXtjb25zdCBpPXRoaXMuX3Rlcm1pbmFsLmJ1ZmZlcixzPWkubGluZXMubGVuZ3RoLnRvU3RyaW5nKCk7Zm9yKGxldCByPWU7cjw9dDtyKyspe2NvbnN0IGU9aS5saW5lcy5nZXQoaS55ZGlzcCtyKSx0PVtdLG49ZT8udHJhbnNsYXRlVG9TdHJpbmcoITAsdm9pZCAwLHZvaWQgMCx0KXx8XCJcIixvPShpLnlkaXNwK3IrMSkudG9TdHJpbmcoKSxhPXRoaXMuX3Jvd0VsZW1lbnRzW3JdO2EmJigwPT09bi5sZW5ndGg/KGEuaW5uZXJUZXh0PVwiwqBcIix0aGlzLl9yb3dDb2x1bW5zLnNldChhLFswLDFdKSk6KGEudGV4dENvbnRlbnQ9bix0aGlzLl9yb3dDb2x1bW5zLnNldChhLHQpKSxhLnNldEF0dHJpYnV0ZShcImFyaWEtcG9zaW5zZXRcIixvKSxhLnNldEF0dHJpYnV0ZShcImFyaWEtc2V0c2l6ZVwiLHMpKX10aGlzLl9hbm5vdW5jZUNoYXJhY3RlcnMoKX1fYW5ub3VuY2VDaGFyYWN0ZXJzKCl7MCE9PXRoaXMuX2NoYXJzVG9Bbm5vdW5jZS5sZW5ndGgmJih0aGlzLl9saXZlUmVnaW9uLnRleHRDb250ZW50Kz10aGlzLl9jaGFyc1RvQW5ub3VuY2UsdGhpcy5fY2hhcnNUb0Fubm91bmNlPVwiXCIpfV9oYW5kbGVCb3VuZGFyeUZvY3VzKGUsdCl7Y29uc3QgaT1lLnRhcmdldCxzPXRoaXMuX3Jvd0VsZW1lbnRzWzA9PT10PzE6dGhpcy5fcm93RWxlbWVudHMubGVuZ3RoLTJdO2lmKGkuZ2V0QXR0cmlidXRlKFwiYXJpYS1wb3NpbnNldFwiKT09PSgwPT09dD9cIjFcIjpgJHt0aGlzLl90ZXJtaW5hbC5idWZmZXIubGluZXMubGVuZ3RofWApKXJldHVybjtpZihlLnJlbGF0ZWRUYXJnZXQhPT1zKXJldHVybjtsZXQgcixuO2lmKDA9PT10PyhyPWksbj10aGlzLl9yb3dFbGVtZW50cy5wb3AoKSx0aGlzLl9yb3dDb250YWluZXIucmVtb3ZlQ2hpbGQobikpOihyPXRoaXMuX3Jvd0VsZW1lbnRzLnNoaWZ0KCksbj1pLHRoaXMuX3Jvd0NvbnRhaW5lci5yZW1vdmVDaGlsZChyKSksci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0aGlzLl90b3BCb3VuZGFyeUZvY3VzTGlzdGVuZXIpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsdGhpcy5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyKSwwPT09dCl7Y29uc3QgZT10aGlzLl9jcmVhdGVBY2Nlc3NpYmlsaXR5VHJlZU5vZGUoKTt0aGlzLl9yb3dFbGVtZW50cy51bnNoaWZ0KGUpLHRoaXMuX3Jvd0NvbnRhaW5lci5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsZSl9ZWxzZXtjb25zdCBlPXRoaXMuX2NyZWF0ZUFjY2Vzc2liaWxpdHlUcmVlTm9kZSgpO3RoaXMuX3Jvd0VsZW1lbnRzLnB1c2goZSksdGhpcy5fcm93Q29udGFpbmVyLmFwcGVuZENoaWxkKGUpfXRoaXMuX3Jvd0VsZW1lbnRzWzBdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX3RvcEJvdW5kYXJ5Rm9jdXNMaXN0ZW5lciksdGhpcy5fcm93RWxlbWVudHNbdGhpcy5fcm93RWxlbWVudHMubGVuZ3RoLTFdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX2JvdHRvbUJvdW5kYXJ5Rm9jdXNMaXN0ZW5lciksdGhpcy5fdGVybWluYWwuc2Nyb2xsTGluZXMoMD09PXQ/LTE6MSksdGhpcy5fcm93RWxlbWVudHNbMD09PXQ/MTp0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGgtMl0uZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1faGFuZGxlU2VsZWN0aW9uQ2hhbmdlKCl7aWYoMD09PXRoaXMuX3Jvd0VsZW1lbnRzLmxlbmd0aClyZXR1cm47Y29uc3QgZT1kb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtpZighZSlyZXR1cm47aWYoZS5pc0NvbGxhcHNlZClyZXR1cm4gdm9pZCh0aGlzLl9yb3dDb250YWluZXIuY29udGFpbnMoZS5hbmNob3JOb2RlKSYmdGhpcy5fdGVybWluYWwuY2xlYXJTZWxlY3Rpb24oKSk7aWYoIWUuYW5jaG9yTm9kZXx8IWUuZm9jdXNOb2RlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoXCJhbmNob3JOb2RlIGFuZC9vciBmb2N1c05vZGUgYXJlIG51bGxcIik7bGV0IHQ9e25vZGU6ZS5hbmNob3JOb2RlLG9mZnNldDplLmFuY2hvck9mZnNldH0saT17bm9kZTplLmZvY3VzTm9kZSxvZmZzZXQ6ZS5mb2N1c09mZnNldH07aWYoKHQubm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpLm5vZGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HfHx0Lm5vZGU9PT1pLm5vZGUmJnQub2Zmc2V0Pmkub2Zmc2V0KSYmKFt0LGldPVtpLHRdKSx0Lm5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcy5fcm93RWxlbWVudHNbMF0pJihOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWXxOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykmJih0PXtub2RlOnRoaXMuX3Jvd0VsZW1lbnRzWzBdLmNoaWxkTm9kZXNbMF0sb2Zmc2V0OjB9KSwhdGhpcy5fcm93Q29udGFpbmVyLmNvbnRhaW5zKHQubm9kZSkpcmV0dXJuO2NvbnN0IHM9dGhpcy5fcm93RWxlbWVudHMuc2xpY2UoLTEpWzBdO2lmKGkubm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzKSYoTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll8Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcpJiYoaT17bm9kZTpzLG9mZnNldDpzLnRleHRDb250ZW50Py5sZW5ndGg/PzB9KSwhdGhpcy5fcm93Q29udGFpbmVyLmNvbnRhaW5zKGkubm9kZSkpcmV0dXJuO2NvbnN0IHI9KHtub2RlOmUsb2Zmc2V0OnR9KT0+e2NvbnN0IGk9ZSBpbnN0YW5jZW9mIFRleHQ/ZS5wYXJlbnROb2RlOmU7bGV0IHM9cGFyc2VJbnQoaT8uZ2V0QXR0cmlidXRlKFwiYXJpYS1wb3NpbnNldFwiKSwxMCktMTtpZihpc05hTihzKSlyZXR1cm4gY29uc29sZS53YXJuKFwicm93IGlzIGludmFsaWQuIFJhY2UgY29uZGl0aW9uP1wiKSxudWxsO2NvbnN0IHI9dGhpcy5fcm93Q29sdW1ucy5nZXQoaSk7aWYoIXIpcmV0dXJuIGNvbnNvbGUud2FybihcImNvbHVtbnMgaXMgbnVsbC4gUmFjZSBjb25kaXRpb24/XCIpLG51bGw7bGV0IG49dDxyLmxlbmd0aD9yW3RdOnIuc2xpY2UoLTEpWzBdKzE7cmV0dXJuIG4+PXRoaXMuX3Rlcm1pbmFsLmNvbHMmJigrK3Msbj0wKSx7cm93OnMsY29sdW1uOm59fSxuPXIodCksbz1yKGkpO2lmKG4mJm8pe2lmKG4ucm93Pm8ucm93fHxuLnJvdz09PW8ucm93JiZuLmNvbHVtbj49by5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCByYW5nZVwiKTt0aGlzLl90ZXJtaW5hbC5zZWxlY3Qobi5jb2x1bW4sbi5yb3csKG8ucm93LW4ucm93KSp0aGlzLl90ZXJtaW5hbC5jb2xzLW4uY29sdW1uK28uY29sdW1uKX19X2hhbmRsZVJlc2l6ZShlKXt0aGlzLl9yb3dFbGVtZW50c1t0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGgtMV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsdGhpcy5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyKTtmb3IobGV0IGU9dGhpcy5fcm93Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aDtlPHRoaXMuX3Rlcm1pbmFsLnJvd3M7ZSsrKXRoaXMuX3Jvd0VsZW1lbnRzW2VdPXRoaXMuX2NyZWF0ZUFjY2Vzc2liaWxpdHlUcmVlTm9kZSgpLHRoaXMuX3Jvd0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yb3dFbGVtZW50c1tlXSk7Zm9yKDt0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGg+ZTspdGhpcy5fcm93Q29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuX3Jvd0VsZW1lbnRzLnBvcCgpKTt0aGlzLl9yb3dFbGVtZW50c1t0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGgtMV0uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsdGhpcy5fYm90dG9tQm91bmRhcnlGb2N1c0xpc3RlbmVyKSx0aGlzLl9yZWZyZXNoUm93c0RpbWVuc2lvbnMoKX1fY3JlYXRlQWNjZXNzaWJpbGl0eVRyZWVOb2RlKCl7Y29uc3QgZT10aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UubWFpbkRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwibGlzdGl0ZW1cIiksZS50YWJJbmRleD0tMSx0aGlzLl9yZWZyZXNoUm93RGltZW5zaW9ucyhlKSxlfV9yZWZyZXNoUm93c0RpbWVuc2lvbnMoKXtpZih0aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY3NzLmNlbGwuaGVpZ2h0KXt0aGlzLl9hY2Nlc3NpYmlsaXR5Q29udGFpbmVyLnN0eWxlLndpZHRoPWAke3RoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2FudmFzLndpZHRofXB4YCx0aGlzLl9yb3dFbGVtZW50cy5sZW5ndGghPT10aGlzLl90ZXJtaW5hbC5yb3dzJiZ0aGlzLl9oYW5kbGVSZXNpemUodGhpcy5fdGVybWluYWwucm93cyk7Zm9yKGxldCBlPTA7ZTx0aGlzLl90ZXJtaW5hbC5yb3dzO2UrKyl0aGlzLl9yZWZyZXNoUm93RGltZW5zaW9ucyh0aGlzLl9yb3dFbGVtZW50c1tlXSl9fV9yZWZyZXNoUm93RGltZW5zaW9ucyhlKXtlLnN0eWxlLmhlaWdodD1gJHt0aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY3NzLmNlbGwuaGVpZ2h0fXB4YH19O3QuQWNjZXNzaWJpbGl0eU1hbmFnZXI9ZD1zKFtyKDEsYy5JSW5zdGFudGlhdGlvblNlcnZpY2UpLHIoMixoLklDb3JlQnJvd3NlclNlcnZpY2UpLHIoMyxoLklSZW5kZXJTZXJ2aWNlKV0sZCl9LDM2MTQ6KGUsdCk9PntmdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoL1xccj9cXG4vZyxcIlxcclwiKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIHQ/XCJcdTAwMWJbMjAwflwiK2UrXCJcdTAwMWJbMjAxflwiOmV9ZnVuY3Rpb24gcihlLHQscixuKXtlPXMoZT1pKGUpLHIuZGVjUHJpdmF0ZU1vZGVzLmJyYWNrZXRlZFBhc3RlTW9kZSYmITAhPT1uLnJhd09wdGlvbnMuaWdub3JlQnJhY2tldGVkUGFzdGVNb2RlKSxyLnRyaWdnZXJEYXRhRXZlbnQoZSwhMCksdC52YWx1ZT1cIlwifWZ1bmN0aW9uIG4oZSx0LGkpe2NvbnN0IHM9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWUuY2xpZW50WC1zLmxlZnQtMTAsbj1lLmNsaWVudFktcy50b3AtMTA7dC5zdHlsZS53aWR0aD1cIjIwcHhcIix0LnN0eWxlLmhlaWdodD1cIjIwcHhcIix0LnN0eWxlLmxlZnQ9YCR7cn1weGAsdC5zdHlsZS50b3A9YCR7bn1weGAsdC5zdHlsZS56SW5kZXg9XCIxMDAwXCIsdC5mb2N1cygpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQucmlnaHRDbGlja0hhbmRsZXI9dC5tb3ZlVGV4dEFyZWFVbmRlck1vdXNlQ3Vyc29yPXQucGFzdGU9dC5oYW5kbGVQYXN0ZUV2ZW50PXQuY29weUhhbmRsZXI9dC5icmFja2V0VGV4dEZvclBhc3RlPXQucHJlcGFyZVRleHRGb3JUZXJtaW5hbD12b2lkIDAsdC5wcmVwYXJlVGV4dEZvclRlcm1pbmFsPWksdC5icmFja2V0VGV4dEZvclBhc3RlPXMsdC5jb3B5SGFuZGxlcj1mdW5jdGlvbihlLHQpe2UuY2xpcGJvYXJkRGF0YSYmZS5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsdC5zZWxlY3Rpb25UZXh0KSxlLnByZXZlbnREZWZhdWx0KCl9LHQuaGFuZGxlUGFzdGVFdmVudD1mdW5jdGlvbihlLHQsaSxzKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUuY2xpcGJvYXJkRGF0YSYmcihlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIiksdCxpLHMpfSx0LnBhc3RlPXIsdC5tb3ZlVGV4dEFyZWFVbmRlck1vdXNlQ3Vyc29yPW4sdC5yaWdodENsaWNrSGFuZGxlcj1mdW5jdGlvbihlLHQsaSxzLHIpe24oZSx0LGkpLHImJnMucmlnaHRDbGlja1NlbGVjdChlKSx0LnZhbHVlPXMuc2VsZWN0aW9uVGV4dCx0LnNlbGVjdCgpfX0sNzIzOTooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db2xvckNvbnRyYXN0Q2FjaGU9dm9pZCAwO2NvbnN0IHM9aSgxNTA1KTt0LkNvbG9yQ29udHJhc3RDYWNoZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbG9yPW5ldyBzLlR3b0tleU1hcCx0aGlzLl9jc3M9bmV3IHMuVHdvS2V5TWFwfXNldENzcyhlLHQsaSl7dGhpcy5fY3NzLnNldChlLHQsaSl9Z2V0Q3NzKGUsdCl7cmV0dXJuIHRoaXMuX2Nzcy5nZXQoZSx0KX1zZXRDb2xvcihlLHQsaSl7dGhpcy5fY29sb3Iuc2V0KGUsdCxpKX1nZXRDb2xvcihlLHQpe3JldHVybiB0aGlzLl9jb2xvci5nZXQoZSx0KX1jbGVhcigpe3RoaXMuX2NvbG9yLmNsZWFyKCksdGhpcy5fY3NzLmNsZWFyKCl9fX0sMzY1NjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyPXZvaWQgMCx0LmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcj1mdW5jdGlvbihlLHQsaSxzKXtlLmFkZEV2ZW50TGlzdGVuZXIodCxpLHMpO2xldCByPSExO3JldHVybntkaXNwb3NlOigpPT57cnx8KHI9ITAsZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsaSxzKSl9fX19LDM1NTE6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LGkscyl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoLG89bjwzP3Q6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSk6cztpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlvPVJlZmxlY3QuZGVjb3JhdGUoZSx0LGkscyk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkocj1lW2FdKSYmKG89KG48Mz9yKG8pOm4+Mz9yKHQsaSxvKTpyKHQsaSkpfHxvKTtyZXR1cm4gbj4zJiZvJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG8pLG99LHI9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3QoaSxzLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5MaW5raWZpZXI9dm9pZCAwO2NvbnN0IG49aSgzNjU2KSxvPWkoODQ2MCksYT1pKDg0NCksaD1pKDI1ODUpLGM9aSg0NzI1KTtsZXQgbD10LkxpbmtpZmllcj1jbGFzcyBleHRlbmRzIGEuRGlzcG9zYWJsZXtnZXQgY3VycmVudExpbmsoKXtyZXR1cm4gdGhpcy5fY3VycmVudExpbmt9Y29uc3RydWN0b3IoZSx0LGkscyxyKXtzdXBlcigpLHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9tb3VzZVNlcnZpY2U9dCx0aGlzLl9yZW5kZXJTZXJ2aWNlPWksdGhpcy5fYnVmZmVyU2VydmljZT1zLHRoaXMuX2xpbmtQcm92aWRlclNlcnZpY2U9cix0aGlzLl9saW5rQ2FjaGVEaXNwb3NhYmxlcz1bXSx0aGlzLl9pc01vdXNlT3V0PSEwLHRoaXMuX3dhc1Jlc2l6ZWQ9ITEsdGhpcy5fYWN0aXZlTGluZT0tMSx0aGlzLl9vblNob3dMaW5rVW5kZXJsaW5lPXRoaXMucmVnaXN0ZXIobmV3IG8uRXZlbnRFbWl0dGVyKSx0aGlzLm9uU2hvd0xpbmtVbmRlcmxpbmU9dGhpcy5fb25TaG93TGlua1VuZGVybGluZS5ldmVudCx0aGlzLl9vbkhpZGVMaW5rVW5kZXJsaW5lPXRoaXMucmVnaXN0ZXIobmV3IG8uRXZlbnRFbWl0dGVyKSx0aGlzLm9uSGlkZUxpbmtVbmRlcmxpbmU9dGhpcy5fb25IaWRlTGlua1VuZGVybGluZS5ldmVudCx0aGlzLnJlZ2lzdGVyKCgwLGEuZ2V0RGlzcG9zZUFycmF5RGlzcG9zYWJsZSkodGhpcy5fbGlua0NhY2hlRGlzcG9zYWJsZXMpKSx0aGlzLnJlZ2lzdGVyKCgwLGEudG9EaXNwb3NhYmxlKSgoKCk9Pnt0aGlzLl9sYXN0TW91c2VFdmVudD12b2lkIDAsdGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzPy5jbGVhcigpfSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2J1ZmZlclNlcnZpY2Uub25SZXNpemUoKCgpPT57dGhpcy5fY2xlYXJDdXJyZW50TGluaygpLHRoaXMuX3dhc1Jlc2l6ZWQ9ITB9KSkpLHRoaXMucmVnaXN0ZXIoKDAsbi5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuX2VsZW1lbnQsXCJtb3VzZWxlYXZlXCIsKCgpPT57dGhpcy5faXNNb3VzZU91dD0hMCx0aGlzLl9jbGVhckN1cnJlbnRMaW5rKCl9KSkpLHRoaXMucmVnaXN0ZXIoKDAsbi5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuX2VsZW1lbnQsXCJtb3VzZW1vdmVcIix0aGlzLl9oYW5kbGVNb3VzZU1vdmUuYmluZCh0aGlzKSkpLHRoaXMucmVnaXN0ZXIoKDAsbi5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuX2VsZW1lbnQsXCJtb3VzZWRvd25cIix0aGlzLl9oYW5kbGVNb3VzZURvd24uYmluZCh0aGlzKSkpLHRoaXMucmVnaXN0ZXIoKDAsbi5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuX2VsZW1lbnQsXCJtb3VzZXVwXCIsdGhpcy5faGFuZGxlTW91c2VVcC5iaW5kKHRoaXMpKSl9X2hhbmRsZU1vdXNlTW92ZShlKXt0aGlzLl9sYXN0TW91c2VFdmVudD1lO2NvbnN0IHQ9dGhpcy5fcG9zaXRpb25Gcm9tTW91c2VFdmVudChlLHRoaXMuX2VsZW1lbnQsdGhpcy5fbW91c2VTZXJ2aWNlKTtpZighdClyZXR1cm47dGhpcy5faXNNb3VzZU91dD0hMTtjb25zdCBpPWUuY29tcG9zZWRQYXRoKCk7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2NvbnN0IHQ9aVtlXTtpZih0LmNsYXNzTGlzdC5jb250YWlucyhcInh0ZXJtXCIpKWJyZWFrO2lmKHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwieHRlcm0taG92ZXJcIikpcmV0dXJufXRoaXMuX2xhc3RCdWZmZXJDZWxsJiZ0Lng9PT10aGlzLl9sYXN0QnVmZmVyQ2VsbC54JiZ0Lnk9PT10aGlzLl9sYXN0QnVmZmVyQ2VsbC55fHwodGhpcy5faGFuZGxlSG92ZXIodCksdGhpcy5fbGFzdEJ1ZmZlckNlbGw9dCl9X2hhbmRsZUhvdmVyKGUpe2lmKHRoaXMuX2FjdGl2ZUxpbmUhPT1lLnl8fHRoaXMuX3dhc1Jlc2l6ZWQpcmV0dXJuIHRoaXMuX2NsZWFyQ3VycmVudExpbmsoKSx0aGlzLl9hc2tGb3JMaW5rKGUsITEpLHZvaWQodGhpcy5fd2FzUmVzaXplZD0hMSk7dGhpcy5fY3VycmVudExpbmsmJnRoaXMuX2xpbmtBdFBvc2l0aW9uKHRoaXMuX2N1cnJlbnRMaW5rLmxpbmssZSl8fCh0aGlzLl9jbGVhckN1cnJlbnRMaW5rKCksdGhpcy5fYXNrRm9yTGluayhlLCEwKSl9X2Fza0ZvckxpbmsoZSx0KXt0aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXMmJnR8fCh0aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXM/LmZvckVhY2goKGU9PntlPy5mb3JFYWNoKChlPT57ZS5saW5rLmRpc3Bvc2UmJmUubGluay5kaXNwb3NlKCl9KSl9KSksdGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzPW5ldyBNYXAsdGhpcy5fYWN0aXZlTGluZT1lLnkpO2xldCBpPSExO2Zvcihjb25zdFtzLHJdb2YgdGhpcy5fbGlua1Byb3ZpZGVyU2VydmljZS5saW5rUHJvdmlkZXJzLmVudHJpZXMoKSlpZih0KXtjb25zdCB0PXRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcz8uZ2V0KHMpO3QmJihpPXRoaXMuX2NoZWNrTGlua1Byb3ZpZGVyUmVzdWx0KHMsZSxpKSl9ZWxzZSByLnByb3ZpZGVMaW5rcyhlLnksKHQ9PntpZih0aGlzLl9pc01vdXNlT3V0KXJldHVybjtjb25zdCByPXQ/Lm1hcCgoZT0+KHtsaW5rOmV9KSkpO3RoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcz8uc2V0KHMsciksaT10aGlzLl9jaGVja0xpbmtQcm92aWRlclJlc3VsdChzLGUsaSksdGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzPy5zaXplPT09dGhpcy5fbGlua1Byb3ZpZGVyU2VydmljZS5saW5rUHJvdmlkZXJzLmxlbmd0aCYmdGhpcy5fcmVtb3ZlSW50ZXJzZWN0aW5nTGlua3MoZS55LHRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcyl9KSl9X3JlbW92ZUludGVyc2VjdGluZ0xpbmtzKGUsdCl7Y29uc3QgaT1uZXcgU2V0O2ZvcihsZXQgcz0wO3M8dC5zaXplO3MrKyl7Y29uc3Qgcj10LmdldChzKTtpZihyKWZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKXtjb25zdCBzPXJbdF0sbj1zLmxpbmsucmFuZ2Uuc3RhcnQueTxlPzA6cy5saW5rLnJhbmdlLnN0YXJ0Lngsbz1zLmxpbmsucmFuZ2UuZW5kLnk+ZT90aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM6cy5saW5rLnJhbmdlLmVuZC54O2ZvcihsZXQgZT1uO2U8PW87ZSsrKXtpZihpLmhhcyhlKSl7ci5zcGxpY2UodC0tLDEpO2JyZWFrfWkuYWRkKGUpfX19fV9jaGVja0xpbmtQcm92aWRlclJlc3VsdChlLHQsaSl7aWYoIXRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcylyZXR1cm4gaTtjb25zdCBzPXRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcy5nZXQoZSk7bGV0IHI9ITE7Zm9yKGxldCB0PTA7dDxlO3QrKyl0aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXMuaGFzKHQpJiYhdGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzLmdldCh0KXx8KHI9ITApO2lmKCFyJiZzKXtjb25zdCBlPXMuZmluZCgoZT0+dGhpcy5fbGlua0F0UG9zaXRpb24oZS5saW5rLHQpKSk7ZSYmKGk9ITAsdGhpcy5faGFuZGxlTmV3TGluayhlKSl9aWYodGhpcy5fYWN0aXZlUHJvdmlkZXJSZXBsaWVzLnNpemU9PT10aGlzLl9saW5rUHJvdmlkZXJTZXJ2aWNlLmxpbmtQcm92aWRlcnMubGVuZ3RoJiYhaSlmb3IobGV0IGU9MDtlPHRoaXMuX2FjdGl2ZVByb3ZpZGVyUmVwbGllcy5zaXplO2UrKyl7Y29uc3Qgcz10aGlzLl9hY3RpdmVQcm92aWRlclJlcGxpZXMuZ2V0KGUpPy5maW5kKChlPT50aGlzLl9saW5rQXRQb3NpdGlvbihlLmxpbmssdCkpKTtpZihzKXtpPSEwLHRoaXMuX2hhbmRsZU5ld0xpbmsocyk7YnJlYWt9fXJldHVybiBpfV9oYW5kbGVNb3VzZURvd24oKXt0aGlzLl9tb3VzZURvd25MaW5rPXRoaXMuX2N1cnJlbnRMaW5rfV9oYW5kbGVNb3VzZVVwKGUpe2lmKCF0aGlzLl9jdXJyZW50TGluaylyZXR1cm47Y29uc3QgdD10aGlzLl9wb3NpdGlvbkZyb21Nb3VzZUV2ZW50KGUsdGhpcy5fZWxlbWVudCx0aGlzLl9tb3VzZVNlcnZpY2UpO3QmJnRoaXMuX21vdXNlRG93bkxpbms9PT10aGlzLl9jdXJyZW50TGluayYmdGhpcy5fbGlua0F0UG9zaXRpb24odGhpcy5fY3VycmVudExpbmsubGluayx0KSYmdGhpcy5fY3VycmVudExpbmsubGluay5hY3RpdmF0ZShlLHRoaXMuX2N1cnJlbnRMaW5rLmxpbmsudGV4dCl9X2NsZWFyQ3VycmVudExpbmsoZSx0KXt0aGlzLl9jdXJyZW50TGluayYmdGhpcy5fbGFzdE1vdXNlRXZlbnQmJighZXx8IXR8fHRoaXMuX2N1cnJlbnRMaW5rLmxpbmsucmFuZ2Uuc3RhcnQueT49ZSYmdGhpcy5fY3VycmVudExpbmsubGluay5yYW5nZS5lbmQueTw9dCkmJih0aGlzLl9saW5rTGVhdmUodGhpcy5fZWxlbWVudCx0aGlzLl9jdXJyZW50TGluay5saW5rLHRoaXMuX2xhc3RNb3VzZUV2ZW50KSx0aGlzLl9jdXJyZW50TGluaz12b2lkIDAsKDAsYS5kaXNwb3NlQXJyYXkpKHRoaXMuX2xpbmtDYWNoZURpc3Bvc2FibGVzKSl9X2hhbmRsZU5ld0xpbmsoZSl7aWYoIXRoaXMuX2xhc3RNb3VzZUV2ZW50KXJldHVybjtjb25zdCB0PXRoaXMuX3Bvc2l0aW9uRnJvbU1vdXNlRXZlbnQodGhpcy5fbGFzdE1vdXNlRXZlbnQsdGhpcy5fZWxlbWVudCx0aGlzLl9tb3VzZVNlcnZpY2UpO3QmJnRoaXMuX2xpbmtBdFBvc2l0aW9uKGUubGluayx0KSYmKHRoaXMuX2N1cnJlbnRMaW5rPWUsdGhpcy5fY3VycmVudExpbmsuc3RhdGU9e2RlY29yYXRpb25zOnt1bmRlcmxpbmU6dm9pZCAwPT09ZS5saW5rLmRlY29yYXRpb25zfHxlLmxpbmsuZGVjb3JhdGlvbnMudW5kZXJsaW5lLHBvaW50ZXJDdXJzb3I6dm9pZCAwPT09ZS5saW5rLmRlY29yYXRpb25zfHxlLmxpbmsuZGVjb3JhdGlvbnMucG9pbnRlckN1cnNvcn0saXNIb3ZlcmVkOiEwfSx0aGlzLl9saW5rSG92ZXIodGhpcy5fZWxlbWVudCxlLmxpbmssdGhpcy5fbGFzdE1vdXNlRXZlbnQpLGUubGluay5kZWNvcmF0aW9ucz17fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLmxpbmsuZGVjb3JhdGlvbnMse3BvaW50ZXJDdXJzb3I6e2dldDooKT0+dGhpcy5fY3VycmVudExpbms/LnN0YXRlPy5kZWNvcmF0aW9ucy5wb2ludGVyQ3Vyc29yLHNldDplPT57dGhpcy5fY3VycmVudExpbms/LnN0YXRlJiZ0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy5wb2ludGVyQ3Vyc29yIT09ZSYmKHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmRlY29yYXRpb25zLnBvaW50ZXJDdXJzb3I9ZSx0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5pc0hvdmVyZWQmJnRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShcInh0ZXJtLWN1cnNvci1wb2ludGVyXCIsZSkpfX0sdW5kZXJsaW5lOntnZXQ6KCk9PnRoaXMuX2N1cnJlbnRMaW5rPy5zdGF0ZT8uZGVjb3JhdGlvbnMudW5kZXJsaW5lLHNldDp0PT57dGhpcy5fY3VycmVudExpbms/LnN0YXRlJiZ0aGlzLl9jdXJyZW50TGluaz8uc3RhdGU/LmRlY29yYXRpb25zLnVuZGVybGluZSE9PXQmJih0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy51bmRlcmxpbmU9dCx0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5pc0hvdmVyZWQmJnRoaXMuX2ZpcmVVbmRlcmxpbmVFdmVudChlLmxpbmssdCkpfX19KSx0aGlzLl9saW5rQ2FjaGVEaXNwb3NhYmxlcy5wdXNoKHRoaXMuX3JlbmRlclNlcnZpY2Uub25SZW5kZXJlZFZpZXdwb3J0Q2hhbmdlKChlPT57aWYoIXRoaXMuX2N1cnJlbnRMaW5rKXJldHVybjtjb25zdCB0PTA9PT1lLnN0YXJ0PzA6ZS5zdGFydCsxK3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwLGk9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3ArMStlLmVuZDtpZih0aGlzLl9jdXJyZW50TGluay5saW5rLnJhbmdlLnN0YXJ0Lnk+PXQmJnRoaXMuX2N1cnJlbnRMaW5rLmxpbmsucmFuZ2UuZW5kLnk8PWkmJih0aGlzLl9jbGVhckN1cnJlbnRMaW5rKHQsaSksdGhpcy5fbGFzdE1vdXNlRXZlbnQpKXtjb25zdCBlPXRoaXMuX3Bvc2l0aW9uRnJvbU1vdXNlRXZlbnQodGhpcy5fbGFzdE1vdXNlRXZlbnQsdGhpcy5fZWxlbWVudCx0aGlzLl9tb3VzZVNlcnZpY2UpO2UmJnRoaXMuX2Fza0ZvckxpbmsoZSwhMSl9fSkpKSl9X2xpbmtIb3ZlcihlLHQsaSl7dGhpcy5fY3VycmVudExpbms/LnN0YXRlJiYodGhpcy5fY3VycmVudExpbmsuc3RhdGUuaXNIb3ZlcmVkPSEwLHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmRlY29yYXRpb25zLnVuZGVybGluZSYmdGhpcy5fZmlyZVVuZGVybGluZUV2ZW50KHQsITApLHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmRlY29yYXRpb25zLnBvaW50ZXJDdXJzb3ImJmUuY2xhc3NMaXN0LmFkZChcInh0ZXJtLWN1cnNvci1wb2ludGVyXCIpKSx0LmhvdmVyJiZ0LmhvdmVyKGksdC50ZXh0KX1fZmlyZVVuZGVybGluZUV2ZW50KGUsdCl7Y29uc3QgaT1lLnJhbmdlLHM9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3Ascj10aGlzLl9jcmVhdGVMaW5rVW5kZXJsaW5lRXZlbnQoaS5zdGFydC54LTEsaS5zdGFydC55LXMtMSxpLmVuZC54LGkuZW5kLnktcy0xLHZvaWQgMCk7KHQ/dGhpcy5fb25TaG93TGlua1VuZGVybGluZTp0aGlzLl9vbkhpZGVMaW5rVW5kZXJsaW5lKS5maXJlKHIpfV9saW5rTGVhdmUoZSx0LGkpe3RoaXMuX2N1cnJlbnRMaW5rPy5zdGF0ZSYmKHRoaXMuX2N1cnJlbnRMaW5rLnN0YXRlLmlzSG92ZXJlZD0hMSx0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy51bmRlcmxpbmUmJnRoaXMuX2ZpcmVVbmRlcmxpbmVFdmVudCh0LCExKSx0aGlzLl9jdXJyZW50TGluay5zdGF0ZS5kZWNvcmF0aW9ucy5wb2ludGVyQ3Vyc29yJiZlLmNsYXNzTGlzdC5yZW1vdmUoXCJ4dGVybS1jdXJzb3ItcG9pbnRlclwiKSksdC5sZWF2ZSYmdC5sZWF2ZShpLHQudGV4dCl9X2xpbmtBdFBvc2l0aW9uKGUsdCl7Y29uc3QgaT1lLnJhbmdlLnN0YXJ0LnkqdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzK2UucmFuZ2Uuc3RhcnQueCxzPWUucmFuZ2UuZW5kLnkqdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzK2UucmFuZ2UuZW5kLngscj10LnkqdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzK3QueDtyZXR1cm4gaTw9ciYmcjw9c31fcG9zaXRpb25Gcm9tTW91c2VFdmVudChlLHQsaSl7Y29uc3Qgcz1pLmdldENvb3JkcyhlLHQsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyk7aWYocylyZXR1cm57eDpzWzBdLHk6c1sxXSt0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcH19X2NyZWF0ZUxpbmtVbmRlcmxpbmVFdmVudChlLHQsaSxzLHIpe3JldHVybnt4MTplLHkxOnQseDI6aSx5MjpzLGNvbHM6dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLGZnOnJ9fX07dC5MaW5raWZpZXI9bD1zKFtyKDEsYy5JTW91c2VTZXJ2aWNlKSxyKDIsYy5JUmVuZGVyU2VydmljZSkscigzLGguSUJ1ZmZlclNlcnZpY2UpLHIoNCxjLklMaW5rUHJvdmlkZXJTZXJ2aWNlKV0sbCl9LDkwNDI6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnRvb011Y2hPdXRwdXQ9dC5wcm9tcHRMYWJlbD12b2lkIDAsdC5wcm9tcHRMYWJlbD1cIlRlcm1pbmFsIGlucHV0XCIsdC50b29NdWNoT3V0cHV0PVwiVG9vIG11Y2ggb3V0cHV0IHRvIGFubm91bmNlLCBuYXZpZ2F0ZSB0byByb3dzIG1hbnVhbGx5IHRvIHJlYWRcIn0sMzczMDpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9zY0xpbmtQcm92aWRlcj12b2lkIDA7Y29uc3Qgbj1pKDUxMSksbz1pKDI1ODUpO2xldCBhPXQuT3NjTGlua1Byb3ZpZGVyPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLl9idWZmZXJTZXJ2aWNlPWUsdGhpcy5fb3B0aW9uc1NlcnZpY2U9dCx0aGlzLl9vc2NMaW5rU2VydmljZT1pfXByb3ZpZGVMaW5rcyhlLHQpe2NvbnN0IGk9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMuZ2V0KGUtMSk7aWYoIWkpcmV0dXJuIHZvaWQgdCh2b2lkIDApO2NvbnN0IHM9W10scj10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmxpbmtIYW5kbGVyLG89bmV3IG4uQ2VsbERhdGEsYT1pLmdldFRyaW1tZWRMZW5ndGgoKTtsZXQgYz0tMSxsPS0xLGQ9ITE7Zm9yKGxldCB0PTA7dDxhO3QrKylpZigtMSE9PWx8fGkuaGFzQ29udGVudCh0KSl7aWYoaS5sb2FkQ2VsbCh0LG8pLG8uaGFzRXh0ZW5kZWRBdHRycygpJiZvLmV4dGVuZGVkLnVybElkKXtpZigtMT09PWwpe2w9dCxjPW8uZXh0ZW5kZWQudXJsSWQ7Y29udGludWV9ZD1vLmV4dGVuZGVkLnVybElkIT09Y31lbHNlLTEhPT1sJiYoZD0hMCk7aWYoZHx8LTEhPT1sJiZ0PT09YS0xKXtjb25zdCBpPXRoaXMuX29zY0xpbmtTZXJ2aWNlLmdldExpbmtEYXRhKGMpPy51cmk7aWYoaSl7Y29uc3Qgbj17c3RhcnQ6e3g6bCsxLHk6ZX0sZW5kOnt4OnQrKGR8fHQhPT1hLTE/MDoxKSx5OmV9fTtsZXQgbz0hMTtpZighcj8uYWxsb3dOb25IdHRwUHJvdG9jb2xzKXRyeXtjb25zdCBlPW5ldyBVUkwoaSk7W1wiaHR0cDpcIixcImh0dHBzOlwiXS5pbmNsdWRlcyhlLnByb3RvY29sKXx8KG89ITApfWNhdGNoKGUpe289ITB9b3x8cy5wdXNoKHt0ZXh0OmkscmFuZ2U6bixhY3RpdmF0ZTooZSx0KT0+cj9yLmFjdGl2YXRlKGUsdCxuKTpoKDAsdCksaG92ZXI6KGUsdCk9PnI/LmhvdmVyPy4oZSx0LG4pLGxlYXZlOihlLHQpPT5yPy5sZWF2ZT8uKGUsdCxuKX0pfWQ9ITEsby5oYXNFeHRlbmRlZEF0dHJzKCkmJm8uZXh0ZW5kZWQudXJsSWQ/KGw9dCxjPW8uZXh0ZW5kZWQudXJsSWQpOihsPS0xLGM9LTEpfX10KHMpfX07ZnVuY3Rpb24gaChlLHQpe2lmKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIG5hdmlnYXRlIHRvICR7dH0/XFxuXFxuV0FSTklORzogVGhpcyBsaW5rIGNvdWxkIHBvdGVudGlhbGx5IGJlIGRhbmdlcm91c2ApKXtjb25zdCBlPXdpbmRvdy5vcGVuKCk7aWYoZSl7dHJ5e2Uub3BlbmVyPW51bGx9Y2F0Y2h7fWUubG9jYXRpb24uaHJlZj10fWVsc2UgY29uc29sZS53YXJuKFwiT3BlbmluZyBsaW5rIGJsb2NrZWQgYXMgb3BlbmVyIGNvdWxkIG5vdCBiZSBjbGVhcmVkXCIpfX10Lk9zY0xpbmtQcm92aWRlcj1hPXMoW3IoMCxvLklCdWZmZXJTZXJ2aWNlKSxyKDEsby5JT3B0aW9uc1NlcnZpY2UpLHIoMixvLklPc2NMaW5rU2VydmljZSldLGEpfSw2MTkzOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5SZW5kZXJEZWJvdW5jZXI9dm9pZCAwLHQuUmVuZGVyRGVib3VuY2VyPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fcmVuZGVyQ2FsbGJhY2s9ZSx0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2U9dCx0aGlzLl9yZWZyZXNoQ2FsbGJhY2tzPVtdfWRpc3Bvc2UoKXt0aGlzLl9hbmltYXRpb25GcmFtZSYmKHRoaXMuX2NvcmVCcm93c2VyU2VydmljZS53aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWUpLHRoaXMuX2FuaW1hdGlvbkZyYW1lPXZvaWQgMCl9YWRkUmVmcmVzaENhbGxiYWNrKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoQ2FsbGJhY2tzLnB1c2goZSksdGhpcy5fYW5pbWF0aW9uRnJhbWV8fCh0aGlzLl9hbmltYXRpb25GcmFtZT10aGlzLl9jb3JlQnJvd3NlclNlcnZpY2Uud2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX2lubmVyUmVmcmVzaCgpKSkpLHRoaXMuX2FuaW1hdGlvbkZyYW1lfXJlZnJlc2goZSx0LGkpe3RoaXMuX3Jvd0NvdW50PWksZT12b2lkIDAhPT1lP2U6MCx0PXZvaWQgMCE9PXQ/dDp0aGlzLl9yb3dDb3VudC0xLHRoaXMuX3Jvd1N0YXJ0PXZvaWQgMCE9PXRoaXMuX3Jvd1N0YXJ0P01hdGgubWluKHRoaXMuX3Jvd1N0YXJ0LGUpOmUsdGhpcy5fcm93RW5kPXZvaWQgMCE9PXRoaXMuX3Jvd0VuZD9NYXRoLm1heCh0aGlzLl9yb3dFbmQsdCk6dCx0aGlzLl9hbmltYXRpb25GcmFtZXx8KHRoaXMuX2FuaW1hdGlvbkZyYW1lPXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS53aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5faW5uZXJSZWZyZXNoKCkpKSl9X2lubmVyUmVmcmVzaCgpe2lmKHRoaXMuX2FuaW1hdGlvbkZyYW1lPXZvaWQgMCx2b2lkIDA9PT10aGlzLl9yb3dTdGFydHx8dm9pZCAwPT09dGhpcy5fcm93RW5kfHx2b2lkIDA9PT10aGlzLl9yb3dDb3VudClyZXR1cm4gdm9pZCB0aGlzLl9ydW5SZWZyZXNoQ2FsbGJhY2tzKCk7Y29uc3QgZT1NYXRoLm1heCh0aGlzLl9yb3dTdGFydCwwKSx0PU1hdGgubWluKHRoaXMuX3Jvd0VuZCx0aGlzLl9yb3dDb3VudC0xKTt0aGlzLl9yb3dTdGFydD12b2lkIDAsdGhpcy5fcm93RW5kPXZvaWQgMCx0aGlzLl9yZW5kZXJDYWxsYmFjayhlLHQpLHRoaXMuX3J1blJlZnJlc2hDYWxsYmFja3MoKX1fcnVuUmVmcmVzaENhbGxiYWNrcygpe2Zvcihjb25zdCBlIG9mIHRoaXMuX3JlZnJlc2hDYWxsYmFja3MpZSgwKTt0aGlzLl9yZWZyZXNoQ2FsbGJhY2tzPVtdfX19LDMyMzY6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGVybWluYWw9dm9pZCAwO2NvbnN0IHM9aSgzNjE0KSxyPWkoMzY1Niksbj1pKDM1NTEpLG89aSg5MDQyKSxhPWkoMzczMCksaD1pKDE2ODApLGM9aSgzMTA3KSxsPWkoNTc0NCksZD1pKDI5NTApLF89aSgxMjk2KSx1PWkoNDI4KSxmPWkoNDI2OSksdj1pKDUxMTQpLHA9aSg4OTM0KSxnPWkoMzIzMCksbT1pKDkzMTIpLFM9aSg0NzI1KSxDPWkoNjczMSksYj1pKDgwNTUpLHc9aSg4OTY5KSx5PWkoODQ2MCksRT1pKDg0NCksaz1pKDYxMTQpLEw9aSg4NDM3KSxEPWkoMjU4NCksUj1pKDczOTkpLHg9aSg1OTQxKSxBPWkoOTA3NCksQj1pKDI1ODUpLFQ9aSg1NDM1KSxNPWkoNDU2NyksTz1pKDc3OSk7Y2xhc3MgUCBleHRlbmRzIHcuQ29yZVRlcm1pbmFse2dldCBvbkZvY3VzKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuZXZlbnR9Z2V0IG9uQmx1cigpe3JldHVybiB0aGlzLl9vbkJsdXIuZXZlbnR9Z2V0IG9uQTExeUNoYXIoKXtyZXR1cm4gdGhpcy5fb25BMTF5Q2hhckVtaXR0ZXIuZXZlbnR9Z2V0IG9uQTExeVRhYigpe3JldHVybiB0aGlzLl9vbkExMXlUYWJFbWl0dGVyLmV2ZW50fWdldCBvbldpbGxPcGVuKCl7cmV0dXJuIHRoaXMuX29uV2lsbE9wZW4uZXZlbnR9Y29uc3RydWN0b3IoZT17fSl7c3VwZXIoZSksdGhpcy5icm93c2VyPWssdGhpcy5fa2V5RG93bkhhbmRsZWQ9ITEsdGhpcy5fa2V5RG93blNlZW49ITEsdGhpcy5fa2V5UHJlc3NIYW5kbGVkPSExLHRoaXMuX3VucHJvY2Vzc2VkRGVhZEtleT0hMSx0aGlzLl9hY2Nlc3NpYmlsaXR5TWFuYWdlcj10aGlzLnJlZ2lzdGVyKG5ldyBFLk11dGFibGVEaXNwb3NhYmxlKSx0aGlzLl9vbkN1cnNvck1vdmU9dGhpcy5yZWdpc3RlcihuZXcgeS5FdmVudEVtaXR0ZXIpLHRoaXMub25DdXJzb3JNb3ZlPXRoaXMuX29uQ3Vyc29yTW92ZS5ldmVudCx0aGlzLl9vbktleT10aGlzLnJlZ2lzdGVyKG5ldyB5LkV2ZW50RW1pdHRlciksdGhpcy5vbktleT10aGlzLl9vbktleS5ldmVudCx0aGlzLl9vblJlbmRlcj10aGlzLnJlZ2lzdGVyKG5ldyB5LkV2ZW50RW1pdHRlciksdGhpcy5vblJlbmRlcj10aGlzLl9vblJlbmRlci5ldmVudCx0aGlzLl9vblNlbGVjdGlvbkNoYW5nZT10aGlzLnJlZ2lzdGVyKG5ldyB5LkV2ZW50RW1pdHRlciksdGhpcy5vblNlbGVjdGlvbkNoYW5nZT10aGlzLl9vblNlbGVjdGlvbkNoYW5nZS5ldmVudCx0aGlzLl9vblRpdGxlQ2hhbmdlPXRoaXMucmVnaXN0ZXIobmV3IHkuRXZlbnRFbWl0dGVyKSx0aGlzLm9uVGl0bGVDaGFuZ2U9dGhpcy5fb25UaXRsZUNoYW5nZS5ldmVudCx0aGlzLl9vbkJlbGw9dGhpcy5yZWdpc3RlcihuZXcgeS5FdmVudEVtaXR0ZXIpLHRoaXMub25CZWxsPXRoaXMuX29uQmVsbC5ldmVudCx0aGlzLl9vbkZvY3VzPXRoaXMucmVnaXN0ZXIobmV3IHkuRXZlbnRFbWl0dGVyKSx0aGlzLl9vbkJsdXI9dGhpcy5yZWdpc3RlcihuZXcgeS5FdmVudEVtaXR0ZXIpLHRoaXMuX29uQTExeUNoYXJFbWl0dGVyPXRoaXMucmVnaXN0ZXIobmV3IHkuRXZlbnRFbWl0dGVyKSx0aGlzLl9vbkExMXlUYWJFbWl0dGVyPXRoaXMucmVnaXN0ZXIobmV3IHkuRXZlbnRFbWl0dGVyKSx0aGlzLl9vbldpbGxPcGVuPXRoaXMucmVnaXN0ZXIobmV3IHkuRXZlbnRFbWl0dGVyKSx0aGlzLl9zZXR1cCgpLHRoaXMuX2RlY29yYXRpb25TZXJ2aWNlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKEEuRGVjb3JhdGlvblNlcnZpY2UpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2UoQi5JRGVjb3JhdGlvblNlcnZpY2UsdGhpcy5fZGVjb3JhdGlvblNlcnZpY2UpLHRoaXMuX2xpbmtQcm92aWRlclNlcnZpY2U9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoTy5MaW5rUHJvdmlkZXJTZXJ2aWNlKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKFMuSUxpbmtQcm92aWRlclNlcnZpY2UsdGhpcy5fbGlua1Byb3ZpZGVyU2VydmljZSksdGhpcy5fbGlua1Byb3ZpZGVyU2VydmljZS5yZWdpc3RlckxpbmtQcm92aWRlcih0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShhLk9zY0xpbmtQcm92aWRlcikpLHRoaXMucmVnaXN0ZXIodGhpcy5faW5wdXRIYW5kbGVyLm9uUmVxdWVzdEJlbGwoKCgpPT50aGlzLl9vbkJlbGwuZmlyZSgpKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5faW5wdXRIYW5kbGVyLm9uUmVxdWVzdFJlZnJlc2hSb3dzKCgoZSx0KT0+dGhpcy5yZWZyZXNoKGUsdCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9pbnB1dEhhbmRsZXIub25SZXF1ZXN0U2VuZEZvY3VzKCgoKT0+dGhpcy5fcmVwb3J0Rm9jdXMoKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2lucHV0SGFuZGxlci5vblJlcXVlc3RSZXNldCgoKCk9PnRoaXMucmVzZXQoKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2lucHV0SGFuZGxlci5vblJlcXVlc3RXaW5kb3dzT3B0aW9uc1JlcG9ydCgoZT0+dGhpcy5fcmVwb3J0V2luZG93c09wdGlvbnMoZSkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9pbnB1dEhhbmRsZXIub25Db2xvcigoZT0+dGhpcy5faGFuZGxlQ29sb3JFdmVudChlKSkpKSx0aGlzLnJlZ2lzdGVyKCgwLHkuZm9yd2FyZEV2ZW50KSh0aGlzLl9pbnB1dEhhbmRsZXIub25DdXJzb3JNb3ZlLHRoaXMuX29uQ3Vyc29yTW92ZSkpLHRoaXMucmVnaXN0ZXIoKDAseS5mb3J3YXJkRXZlbnQpKHRoaXMuX2lucHV0SGFuZGxlci5vblRpdGxlQ2hhbmdlLHRoaXMuX29uVGl0bGVDaGFuZ2UpKSx0aGlzLnJlZ2lzdGVyKCgwLHkuZm9yd2FyZEV2ZW50KSh0aGlzLl9pbnB1dEhhbmRsZXIub25BMTF5Q2hhcix0aGlzLl9vbkExMXlDaGFyRW1pdHRlcikpLHRoaXMucmVnaXN0ZXIoKDAseS5mb3J3YXJkRXZlbnQpKHRoaXMuX2lucHV0SGFuZGxlci5vbkExMXlUYWIsdGhpcy5fb25BMTF5VGFiRW1pdHRlcikpLHRoaXMucmVnaXN0ZXIodGhpcy5fYnVmZmVyU2VydmljZS5vblJlc2l6ZSgoZT0+dGhpcy5fYWZ0ZXJSZXNpemUoZS5jb2xzLGUucm93cykpKSksdGhpcy5yZWdpc3RlcigoMCxFLnRvRGlzcG9zYWJsZSkoKCgpPT57dGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyPXZvaWQgMCx0aGlzLmVsZW1lbnQ/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCl9KSkpfV9oYW5kbGVDb2xvckV2ZW50KGUpe2lmKHRoaXMuX3RoZW1lU2VydmljZSlmb3IoY29uc3QgdCBvZiBlKXtsZXQgZSxpPVwiXCI7c3dpdGNoKHQuaW5kZXgpe2Nhc2UgMjU2OmU9XCJmb3JlZ3JvdW5kXCIsaT1cIjEwXCI7YnJlYWs7Y2FzZSAyNTc6ZT1cImJhY2tncm91bmRcIixpPVwiMTFcIjticmVhaztjYXNlIDI1ODplPVwiY3Vyc29yXCIsaT1cIjEyXCI7YnJlYWs7ZGVmYXVsdDplPVwiYW5zaVwiLGk9XCI0O1wiK3QuaW5kZXh9c3dpdGNoKHQudHlwZSl7Y2FzZSAwOmNvbnN0IHM9Yi5jb2xvci50b0NvbG9yUkdCKFwiYW5zaVwiPT09ZT90aGlzLl90aGVtZVNlcnZpY2UuY29sb3JzLmFuc2lbdC5pbmRleF06dGhpcy5fdGhlbWVTZXJ2aWNlLmNvbG9yc1tlXSk7dGhpcy5jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGAke0QuQzAuRVNDfV0ke2l9OyR7KDAseC50b1JnYlN0cmluZykocyl9JHtELkMxX0VTQ0FQRUQuU1R9YCk7YnJlYWs7Y2FzZSAxOmlmKFwiYW5zaVwiPT09ZSl0aGlzLl90aGVtZVNlcnZpY2UubW9kaWZ5Q29sb3JzKChlPT5lLmFuc2lbdC5pbmRleF09Yi5jaGFubmVscy50b0NvbG9yKC4uLnQuY29sb3IpKSk7ZWxzZXtjb25zdCBpPWU7dGhpcy5fdGhlbWVTZXJ2aWNlLm1vZGlmeUNvbG9ycygoZT0+ZVtpXT1iLmNoYW5uZWxzLnRvQ29sb3IoLi4udC5jb2xvcikpKX1icmVhaztjYXNlIDI6dGhpcy5fdGhlbWVTZXJ2aWNlLnJlc3RvcmVDb2xvcih0LmluZGV4KX19fV9zZXR1cCgpe3N1cGVyLl9zZXR1cCgpLHRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlcj12b2lkIDB9Z2V0IGJ1ZmZlcigpe3JldHVybiB0aGlzLmJ1ZmZlcnMuYWN0aXZlfWZvY3VzKCl7dGhpcy50ZXh0YXJlYSYmdGhpcy50ZXh0YXJlYS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfV9oYW5kbGVTY3JlZW5SZWFkZXJNb2RlT3B0aW9uQ2hhbmdlKGUpe2U/IXRoaXMuX2FjY2Vzc2liaWxpdHlNYW5hZ2VyLnZhbHVlJiZ0aGlzLl9yZW5kZXJTZXJ2aWNlJiYodGhpcy5fYWNjZXNzaWJpbGl0eU1hbmFnZXIudmFsdWU9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoTS5BY2Nlc3NpYmlsaXR5TWFuYWdlcix0aGlzKSk6dGhpcy5fYWNjZXNzaWJpbGl0eU1hbmFnZXIuY2xlYXIoKX1faGFuZGxlVGV4dEFyZWFGb2N1cyhlKXt0aGlzLmNvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5zZW5kRm9jdXMmJnRoaXMuY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChELkMwLkVTQytcIltJXCIpLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZm9jdXNcIiksdGhpcy5fc2hvd0N1cnNvcigpLHRoaXMuX29uRm9jdXMuZmlyZSgpfWJsdXIoKXtyZXR1cm4gdGhpcy50ZXh0YXJlYT8uYmx1cigpfV9oYW5kbGVUZXh0QXJlYUJsdXIoKXt0aGlzLnRleHRhcmVhLnZhbHVlPVwiXCIsdGhpcy5yZWZyZXNoKHRoaXMuYnVmZmVyLnksdGhpcy5idWZmZXIueSksdGhpcy5jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuc2VuZEZvY3VzJiZ0aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoRC5DMC5FU0MrXCJbT1wiKSx0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImZvY3VzXCIpLHRoaXMuX29uQmx1ci5maXJlKCl9X3N5bmNUZXh0QXJlYSgpe2lmKCF0aGlzLnRleHRhcmVhfHwhdGhpcy5idWZmZXIuaXNDdXJzb3JJblZpZXdwb3J0fHx0aGlzLl9jb21wb3NpdGlvbkhlbHBlci5pc0NvbXBvc2luZ3x8IXRoaXMuX3JlbmRlclNlcnZpY2UpcmV0dXJuO2NvbnN0IGU9dGhpcy5idWZmZXIueWJhc2UrdGhpcy5idWZmZXIueSx0PXRoaXMuYnVmZmVyLmxpbmVzLmdldChlKTtpZighdClyZXR1cm47Y29uc3QgaT1NYXRoLm1pbih0aGlzLmJ1ZmZlci54LHRoaXMuY29scy0xKSxzPXRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHQscj10LmdldFdpZHRoKGkpLG49dGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jZWxsLndpZHRoKnIsbz10aGlzLmJ1ZmZlci55KnRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHQsYT1pKnRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aDt0aGlzLnRleHRhcmVhLnN0eWxlLmxlZnQ9YStcInB4XCIsdGhpcy50ZXh0YXJlYS5zdHlsZS50b3A9bytcInB4XCIsdGhpcy50ZXh0YXJlYS5zdHlsZS53aWR0aD1uK1wicHhcIix0aGlzLnRleHRhcmVhLnN0eWxlLmhlaWdodD1zK1wicHhcIix0aGlzLnRleHRhcmVhLnN0eWxlLmxpbmVIZWlnaHQ9cytcInB4XCIsdGhpcy50ZXh0YXJlYS5zdHlsZS56SW5kZXg9XCItNVwifV9pbml0R2xvYmFsKCl7dGhpcy5fYmluZEtleXMoKSx0aGlzLnJlZ2lzdGVyKCgwLHIuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0aGlzLmVsZW1lbnQsXCJjb3B5XCIsKGU9Pnt0aGlzLmhhc1NlbGVjdGlvbigpJiYoMCxzLmNvcHlIYW5kbGVyKShlLHRoaXMuX3NlbGVjdGlvblNlcnZpY2UpfSkpKTtjb25zdCBlPWU9PigwLHMuaGFuZGxlUGFzdGVFdmVudCkoZSx0aGlzLnRleHRhcmVhLHRoaXMuY29yZVNlcnZpY2UsdGhpcy5vcHRpb25zU2VydmljZSk7dGhpcy5yZWdpc3RlcigoMCxyLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcikodGhpcy50ZXh0YXJlYSxcInBhc3RlXCIsZSkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuZWxlbWVudCxcInBhc3RlXCIsZSkpLGsuaXNGaXJlZm94P3RoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuZWxlbWVudCxcIm1vdXNlZG93blwiLChlPT57Mj09PWUuYnV0dG9uJiYoMCxzLnJpZ2h0Q2xpY2tIYW5kbGVyKShlLHRoaXMudGV4dGFyZWEsdGhpcy5zY3JlZW5FbGVtZW50LHRoaXMuX3NlbGVjdGlvblNlcnZpY2UsdGhpcy5vcHRpb25zLnJpZ2h0Q2xpY2tTZWxlY3RzV29yZCl9KSkpOnRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuZWxlbWVudCxcImNvbnRleHRtZW51XCIsKGU9PnsoMCxzLnJpZ2h0Q2xpY2tIYW5kbGVyKShlLHRoaXMudGV4dGFyZWEsdGhpcy5zY3JlZW5FbGVtZW50LHRoaXMuX3NlbGVjdGlvblNlcnZpY2UsdGhpcy5vcHRpb25zLnJpZ2h0Q2xpY2tTZWxlY3RzV29yZCl9KSkpLGsuaXNMaW51eCYmdGhpcy5yZWdpc3RlcigoMCxyLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcikodGhpcy5lbGVtZW50LFwiYXV4Y2xpY2tcIiwoZT0+ezE9PT1lLmJ1dHRvbiYmKDAscy5tb3ZlVGV4dEFyZWFVbmRlck1vdXNlQ3Vyc29yKShlLHRoaXMudGV4dGFyZWEsdGhpcy5zY3JlZW5FbGVtZW50KX0pKSl9X2JpbmRLZXlzKCl7dGhpcy5yZWdpc3RlcigoMCxyLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcikodGhpcy50ZXh0YXJlYSxcImtleXVwXCIsKGU9PnRoaXMuX2tleVVwKGUpKSwhMCkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMudGV4dGFyZWEsXCJrZXlkb3duXCIsKGU9PnRoaXMuX2tleURvd24oZSkpLCEwKSksdGhpcy5yZWdpc3RlcigoMCxyLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcikodGhpcy50ZXh0YXJlYSxcImtleXByZXNzXCIsKGU9PnRoaXMuX2tleVByZXNzKGUpKSwhMCkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMudGV4dGFyZWEsXCJjb21wb3NpdGlvbnN0YXJ0XCIsKCgpPT50aGlzLl9jb21wb3NpdGlvbkhlbHBlci5jb21wb3NpdGlvbnN0YXJ0KCkpKSksdGhpcy5yZWdpc3RlcigoMCxyLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcikodGhpcy50ZXh0YXJlYSxcImNvbXBvc2l0aW9udXBkYXRlXCIsKGU9PnRoaXMuX2NvbXBvc2l0aW9uSGVscGVyLmNvbXBvc2l0aW9udXBkYXRlKGUpKSkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMudGV4dGFyZWEsXCJjb21wb3NpdGlvbmVuZFwiLCgoKT0+dGhpcy5fY29tcG9zaXRpb25IZWxwZXIuY29tcG9zaXRpb25lbmQoKSkpKSx0aGlzLnJlZ2lzdGVyKCgwLHIuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0aGlzLnRleHRhcmVhLFwiaW5wdXRcIiwoZT0+dGhpcy5faW5wdXRFdmVudChlKSksITApKSx0aGlzLnJlZ2lzdGVyKHRoaXMub25SZW5kZXIoKCgpPT50aGlzLl9jb21wb3NpdGlvbkhlbHBlci51cGRhdGVDb21wb3NpdGlvbkVsZW1lbnRzKCkpKSl9b3BlbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJUZXJtaW5hbCByZXF1aXJlcyBhIHBhcmVudCBlbGVtZW50LlwiKTtpZihlLmlzQ29ubmVjdGVkfHx0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiVGVybWluYWwub3BlbiB3YXMgY2FsbGVkIG9uIGFuIGVsZW1lbnQgdGhhdCB3YXMgbm90IGF0dGFjaGVkIHRvIHRoZSBET01cIiksdGhpcy5lbGVtZW50Py5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiZ0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UpcmV0dXJuIHZvaWQodGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXchPT10aGlzLl9jb3JlQnJvd3NlclNlcnZpY2Uud2luZG93JiYodGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLndpbmRvdz10aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpO3RoaXMuX2RvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm9wdGlvbnMuZG9jdW1lbnRPdmVycmlkZSYmdGhpcy5vcHRpb25zLmRvY3VtZW50T3ZlcnJpZGUgaW5zdGFuY2VvZiBEb2N1bWVudCYmKHRoaXMuX2RvY3VtZW50PXRoaXMub3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5kb2N1bWVudE92ZXJyaWRlKSx0aGlzLmVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmVsZW1lbnQuZGlyPVwibHRyXCIsdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0ZXJtaW5hbFwiKSx0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInh0ZXJtXCIpLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTt0aGlzLl92aWV3cG9ydEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl92aWV3cG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInh0ZXJtLXZpZXdwb3J0XCIpLHQuYXBwZW5kQ2hpbGQodGhpcy5fdmlld3BvcnRFbGVtZW50KSx0aGlzLl92aWV3cG9ydFNjcm9sbEFyZWE9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl92aWV3cG9ydFNjcm9sbEFyZWEuY2xhc3NMaXN0LmFkZChcInh0ZXJtLXNjcm9sbC1hcmVhXCIpLHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl92aWV3cG9ydFNjcm9sbEFyZWEpLHRoaXMuc2NyZWVuRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuc2NyZWVuRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwieHRlcm0tc2NyZWVuXCIpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuc2NyZWVuRWxlbWVudCxcIm1vdXNlbW92ZVwiLChlPT50aGlzLnVwZGF0ZUN1cnNvclN0eWxlKGUpKSkpLHRoaXMuX2hlbHBlckNvbnRhaW5lcj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuX2hlbHBlckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwieHRlcm0taGVscGVyc1wiKSx0aGlzLnNjcmVlbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5faGVscGVyQ29udGFpbmVyKSx0LmFwcGVuZENoaWxkKHRoaXMuc2NyZWVuRWxlbWVudCksdGhpcy50ZXh0YXJlYT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiksdGhpcy50ZXh0YXJlYS5jbGFzc0xpc3QuYWRkKFwieHRlcm0taGVscGVyLXRleHRhcmVhXCIpLHRoaXMudGV4dGFyZWEuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLG8ucHJvbXB0TGFiZWwpLGsuaXNDaHJvbWVPU3x8dGhpcy50ZXh0YXJlYS5zZXRBdHRyaWJ1dGUoXCJhcmlhLW11bHRpbGluZVwiLFwiZmFsc2VcIiksdGhpcy50ZXh0YXJlYS5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLFwib2ZmXCIpLHRoaXMudGV4dGFyZWEuc2V0QXR0cmlidXRlKFwiYXV0b2NhcGl0YWxpemVcIixcIm9mZlwiKSx0aGlzLnRleHRhcmVhLnNldEF0dHJpYnV0ZShcInNwZWxsY2hlY2tcIixcImZhbHNlXCIpLHRoaXMudGV4dGFyZWEudGFiSW5kZXg9MCx0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2U9dGhpcy5yZWdpc3Rlcih0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZSh2LkNvcmVCcm93c2VyU2VydmljZSx0aGlzLnRleHRhcmVhLGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz8/d2luZG93LHRoaXMuX2RvY3VtZW50Pz9cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdy5kb2N1bWVudDpudWxsKSksdGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShTLklDb3JlQnJvd3NlclNlcnZpY2UsdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlKSx0aGlzLnJlZ2lzdGVyKCgwLHIuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0aGlzLnRleHRhcmVhLFwiZm9jdXNcIiwoZT0+dGhpcy5faGFuZGxlVGV4dEFyZWFGb2N1cyhlKSkpKSx0aGlzLnJlZ2lzdGVyKCgwLHIuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0aGlzLnRleHRhcmVhLFwiYmx1clwiLCgoKT0+dGhpcy5faGFuZGxlVGV4dEFyZWFCbHVyKCkpKSksdGhpcy5faGVscGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGV4dGFyZWEpLHRoaXMuX2NoYXJTaXplU2VydmljZT10aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZSh1LkNoYXJTaXplU2VydmljZSx0aGlzLl9kb2N1bWVudCx0aGlzLl9oZWxwZXJDb250YWluZXIpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2UoUy5JQ2hhclNpemVTZXJ2aWNlLHRoaXMuX2NoYXJTaXplU2VydmljZSksdGhpcy5fdGhlbWVTZXJ2aWNlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKEMuVGhlbWVTZXJ2aWNlKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKFMuSVRoZW1lU2VydmljZSx0aGlzLl90aGVtZVNlcnZpY2UpLHRoaXMuX2NoYXJhY3RlckpvaW5lclNlcnZpY2U9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoZi5DaGFyYWN0ZXJKb2luZXJTZXJ2aWNlKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKFMuSUNoYXJhY3RlckpvaW5lclNlcnZpY2UsdGhpcy5fY2hhcmFjdGVySm9pbmVyU2VydmljZSksdGhpcy5fcmVuZGVyU2VydmljZT10aGlzLnJlZ2lzdGVyKHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGcuUmVuZGVyU2VydmljZSx0aGlzLnJvd3MsdGhpcy5zY3JlZW5FbGVtZW50KSksdGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShTLklSZW5kZXJTZXJ2aWNlLHRoaXMuX3JlbmRlclNlcnZpY2UpLHRoaXMucmVnaXN0ZXIodGhpcy5fcmVuZGVyU2VydmljZS5vblJlbmRlcmVkVmlld3BvcnRDaGFuZ2UoKGU9PnRoaXMuX29uUmVuZGVyLmZpcmUoZSkpKSksdGhpcy5vblJlc2l6ZSgoZT0+dGhpcy5fcmVuZGVyU2VydmljZS5yZXNpemUoZS5jb2xzLGUucm93cykpKSx0aGlzLl9jb21wb3NpdGlvblZpZXc9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9jb21wb3NpdGlvblZpZXcuY2xhc3NMaXN0LmFkZChcImNvbXBvc2l0aW9uLXZpZXdcIiksdGhpcy5fY29tcG9zaXRpb25IZWxwZXI9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoZC5Db21wb3NpdGlvbkhlbHBlcix0aGlzLnRleHRhcmVhLHRoaXMuX2NvbXBvc2l0aW9uVmlldyksdGhpcy5faGVscGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbXBvc2l0aW9uVmlldyksdGhpcy5fbW91c2VTZXJ2aWNlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKHAuTW91c2VTZXJ2aWNlKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKFMuSU1vdXNlU2VydmljZSx0aGlzLl9tb3VzZVNlcnZpY2UpLHRoaXMubGlua2lmaWVyPXRoaXMucmVnaXN0ZXIodGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2Uobi5MaW5raWZpZXIsdGhpcy5zY3JlZW5FbGVtZW50KSksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHQpO3RyeXt0aGlzLl9vbldpbGxPcGVuLmZpcmUodGhpcy5lbGVtZW50KX1jYXRjaHt9dGhpcy5fcmVuZGVyU2VydmljZS5oYXNSZW5kZXJlcigpfHx0aGlzLl9yZW5kZXJTZXJ2aWNlLnNldFJlbmRlcmVyKHRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpLHRoaXMudmlld3BvcnQ9dGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoaC5WaWV3cG9ydCx0aGlzLl92aWV3cG9ydEVsZW1lbnQsdGhpcy5fdmlld3BvcnRTY3JvbGxBcmVhKSx0aGlzLnZpZXdwb3J0Lm9uUmVxdWVzdFNjcm9sbExpbmVzKChlPT50aGlzLnNjcm9sbExpbmVzKGUuYW1vdW50LGUuc3VwcHJlc3NTY3JvbGxFdmVudCwxKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5faW5wdXRIYW5kbGVyLm9uUmVxdWVzdFN5bmNTY3JvbGxCYXIoKCgpPT50aGlzLnZpZXdwb3J0LnN5bmNTY3JvbGxBcmVhKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLnZpZXdwb3J0KSx0aGlzLnJlZ2lzdGVyKHRoaXMub25DdXJzb3JNb3ZlKCgoKT0+e3RoaXMuX3JlbmRlclNlcnZpY2UuaGFuZGxlQ3Vyc29yTW92ZSgpLHRoaXMuX3N5bmNUZXh0QXJlYSgpfSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMub25SZXNpemUoKCgpPT50aGlzLl9yZW5kZXJTZXJ2aWNlLmhhbmRsZVJlc2l6ZSh0aGlzLmNvbHMsdGhpcy5yb3dzKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMub25CbHVyKCgoKT0+dGhpcy5fcmVuZGVyU2VydmljZS5oYW5kbGVCbHVyKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLm9uRm9jdXMoKCgpPT50aGlzLl9yZW5kZXJTZXJ2aWNlLmhhbmRsZUZvY3VzKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uRGltZW5zaW9uc0NoYW5nZSgoKCk9PnRoaXMudmlld3BvcnQuc3luY1Njcm9sbEFyZWEoKSkpKSx0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlPXRoaXMucmVnaXN0ZXIodGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UobS5TZWxlY3Rpb25TZXJ2aWNlLHRoaXMuZWxlbWVudCx0aGlzLnNjcmVlbkVsZW1lbnQsdGhpcy5saW5raWZpZXIpKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKFMuSVNlbGVjdGlvblNlcnZpY2UsdGhpcy5fc2VsZWN0aW9uU2VydmljZSksdGhpcy5yZWdpc3Rlcih0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLm9uUmVxdWVzdFNjcm9sbExpbmVzKChlPT50aGlzLnNjcm9sbExpbmVzKGUuYW1vdW50LGUuc3VwcHJlc3NTY3JvbGxFdmVudCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLm9uU2VsZWN0aW9uQ2hhbmdlKCgoKT0+dGhpcy5fb25TZWxlY3Rpb25DaGFuZ2UuZmlyZSgpKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fc2VsZWN0aW9uU2VydmljZS5vblJlcXVlc3RSZWRyYXcoKGU9PnRoaXMuX3JlbmRlclNlcnZpY2UuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlZChlLnN0YXJ0LGUuZW5kLGUuY29sdW1uU2VsZWN0TW9kZSkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLm9uTGludXhNb3VzZVNlbGVjdGlvbigoZT0+e3RoaXMudGV4dGFyZWEudmFsdWU9ZSx0aGlzLnRleHRhcmVhLmZvY3VzKCksdGhpcy50ZXh0YXJlYS5zZWxlY3QoKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9vblNjcm9sbC5ldmVudCgoZT0+e3RoaXMudmlld3BvcnQuc3luY1Njcm9sbEFyZWEoKSx0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnJlZnJlc2goKX0pKSksdGhpcy5yZWdpc3RlcigoMCxyLmFkZERpc3Bvc2FibGVEb21MaXN0ZW5lcikodGhpcy5fdmlld3BvcnRFbGVtZW50LFwic2Nyb2xsXCIsKCgpPT50aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnJlZnJlc2goKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGMuQnVmZmVyRGVjb3JhdGlvblJlbmRlcmVyLHRoaXMuc2NyZWVuRWxlbWVudCkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHRoaXMuZWxlbWVudCxcIm1vdXNlZG93blwiLChlPT50aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLmhhbmRsZU1vdXNlRG93bihlKSkpKSx0aGlzLmNvcmVNb3VzZVNlcnZpY2UuYXJlTW91c2VFdmVudHNBY3RpdmU/KHRoaXMuX3NlbGVjdGlvblNlcnZpY2UuZGlzYWJsZSgpLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZW5hYmxlLW1vdXNlLWV2ZW50c1wiKSk6dGhpcy5fc2VsZWN0aW9uU2VydmljZS5lbmFibGUoKSx0aGlzLm9wdGlvbnMuc2NyZWVuUmVhZGVyTW9kZSYmKHRoaXMuX2FjY2Vzc2liaWxpdHlNYW5hZ2VyLnZhbHVlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKE0uQWNjZXNzaWJpbGl0eU1hbmFnZXIsdGhpcykpLHRoaXMucmVnaXN0ZXIodGhpcy5vcHRpb25zU2VydmljZS5vblNwZWNpZmljT3B0aW9uQ2hhbmdlKFwic2NyZWVuUmVhZGVyTW9kZVwiLChlPT50aGlzLl9oYW5kbGVTY3JlZW5SZWFkZXJNb2RlT3B0aW9uQ2hhbmdlKGUpKSkpLHRoaXMub3B0aW9ucy5vdmVydmlld1J1bGVyV2lkdGgmJih0aGlzLl9vdmVydmlld1J1bGVyUmVuZGVyZXI9dGhpcy5yZWdpc3Rlcih0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShsLk92ZXJ2aWV3UnVsZXJSZW5kZXJlcix0aGlzLl92aWV3cG9ydEVsZW1lbnQsdGhpcy5zY3JlZW5FbGVtZW50KSkpLHRoaXMub3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZShcIm92ZXJ2aWV3UnVsZXJXaWR0aFwiLChlPT57IXRoaXMuX292ZXJ2aWV3UnVsZXJSZW5kZXJlciYmZSYmdGhpcy5fdmlld3BvcnRFbGVtZW50JiZ0aGlzLnNjcmVlbkVsZW1lbnQmJih0aGlzLl9vdmVydmlld1J1bGVyUmVuZGVyZXI9dGhpcy5yZWdpc3Rlcih0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShsLk92ZXJ2aWV3UnVsZXJSZW5kZXJlcix0aGlzLl92aWV3cG9ydEVsZW1lbnQsdGhpcy5zY3JlZW5FbGVtZW50KSkpfSkpLHRoaXMuX2NoYXJTaXplU2VydmljZS5tZWFzdXJlKCksdGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpLHRoaXMuX2luaXRHbG9iYWwoKSx0aGlzLmJpbmRNb3VzZSgpfV9jcmVhdGVSZW5kZXJlcigpe3JldHVybiB0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShfLkRvbVJlbmRlcmVyLHRoaXMsdGhpcy5fZG9jdW1lbnQsdGhpcy5lbGVtZW50LHRoaXMuc2NyZWVuRWxlbWVudCx0aGlzLl92aWV3cG9ydEVsZW1lbnQsdGhpcy5faGVscGVyQ29udGFpbmVyLHRoaXMubGlua2lmaWVyKX1iaW5kTW91c2UoKXtjb25zdCBlPXRoaXMsdD10aGlzLmVsZW1lbnQ7ZnVuY3Rpb24gaSh0KXtjb25zdCBpPWUuX21vdXNlU2VydmljZS5nZXRNb3VzZVJlcG9ydENvb3Jkcyh0LGUuc2NyZWVuRWxlbWVudCk7aWYoIWkpcmV0dXJuITE7bGV0IHMscjtzd2l0Y2godC5vdmVycmlkZVR5cGV8fHQudHlwZSl7Y2FzZVwibW91c2Vtb3ZlXCI6cj0zMix2b2lkIDA9PT10LmJ1dHRvbnM/KHM9Myx2b2lkIDAhPT10LmJ1dHRvbiYmKHM9dC5idXR0b248Mz90LmJ1dHRvbjozKSk6cz0xJnQuYnV0dG9ucz8wOjQmdC5idXR0b25zPzE6MiZ0LmJ1dHRvbnM/MjozO2JyZWFrO2Nhc2VcIm1vdXNldXBcIjpyPTAscz10LmJ1dHRvbjwzP3QuYnV0dG9uOjM7YnJlYWs7Y2FzZVwibW91c2Vkb3duXCI6cj0xLHM9dC5idXR0b248Mz90LmJ1dHRvbjozO2JyZWFrO2Nhc2VcIndoZWVsXCI6aWYoZS5fY3VzdG9tV2hlZWxFdmVudEhhbmRsZXImJiExPT09ZS5fY3VzdG9tV2hlZWxFdmVudEhhbmRsZXIodCkpcmV0dXJuITE7aWYoMD09PWUudmlld3BvcnQuZ2V0TGluZXNTY3JvbGxlZCh0KSlyZXR1cm4hMTtyPXQuZGVsdGFZPDA/MDoxLHM9NDticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEodm9pZCAwPT09cnx8dm9pZCAwPT09c3x8cz40KSYmZS5jb3JlTW91c2VTZXJ2aWNlLnRyaWdnZXJNb3VzZUV2ZW50KHtjb2w6aS5jb2wscm93Omkucm93LHg6aS54LHk6aS55LGJ1dHRvbjpzLGFjdGlvbjpyLGN0cmw6dC5jdHJsS2V5LGFsdDp0LmFsdEtleSxzaGlmdDp0LnNoaWZ0S2V5fSl9Y29uc3Qgcz17bW91c2V1cDpudWxsLHdoZWVsOm51bGwsbW91c2VkcmFnOm51bGwsbW91c2Vtb3ZlOm51bGx9LG49e21vdXNldXA6ZT0+KGkoZSksZS5idXR0b25zfHwodGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixzLm1vdXNldXApLHMubW91c2VkcmFnJiZ0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscy5tb3VzZWRyYWcpKSx0aGlzLmNhbmNlbChlKSksd2hlZWw6ZT0+KGkoZSksdGhpcy5jYW5jZWwoZSwhMCkpLG1vdXNlZHJhZzplPT57ZS5idXR0b25zJiZpKGUpfSxtb3VzZW1vdmU6ZT0+e2UuYnV0dG9uc3x8aShlKX19O3RoaXMucmVnaXN0ZXIodGhpcy5jb3JlTW91c2VTZXJ2aWNlLm9uUHJvdG9jb2xDaGFuZ2UoKGU9PntlPyhcImRlYnVnXCI9PT10aGlzLm9wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMubG9nTGV2ZWwmJnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJCaW5kaW5nIHRvIG1vdXNlIGV2ZW50czpcIix0aGlzLmNvcmVNb3VzZVNlcnZpY2UuZXhwbGFpbkV2ZW50cyhlKSksdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJlbmFibGUtbW91c2UtZXZlbnRzXCIpLHRoaXMuX3NlbGVjdGlvblNlcnZpY2UuZGlzYWJsZSgpKToodGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIlVuYmluZGluZyBmcm9tIG1vdXNlIGV2ZW50cy5cIiksdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJlbmFibGUtbW91c2UtZXZlbnRzXCIpLHRoaXMuX3NlbGVjdGlvblNlcnZpY2UuZW5hYmxlKCkpLDgmZT9zLm1vdXNlbW92ZXx8KHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG4ubW91c2Vtb3ZlKSxzLm1vdXNlbW92ZT1uLm1vdXNlbW92ZSk6KHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHMubW91c2Vtb3ZlKSxzLm1vdXNlbW92ZT1udWxsKSwxNiZlP3Mud2hlZWx8fCh0LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLG4ud2hlZWwse3Bhc3NpdmU6ITF9KSxzLndoZWVsPW4ud2hlZWwpOih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHMud2hlZWwpLHMud2hlZWw9bnVsbCksMiZlP3MubW91c2V1cHx8KHMubW91c2V1cD1uLm1vdXNldXApOih0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHMubW91c2V1cCkscy5tb3VzZXVwPW51bGwpLDQmZT9zLm1vdXNlZHJhZ3x8KHMubW91c2VkcmFnPW4ubW91c2VkcmFnKToodGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHMubW91c2VkcmFnKSxzLm1vdXNlZHJhZz1udWxsKX0pKSksdGhpcy5jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZVByb3RvY29sPXRoaXMuY29yZU1vdXNlU2VydmljZS5hY3RpdmVQcm90b2NvbCx0aGlzLnJlZ2lzdGVyKCgwLHIuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0LFwibW91c2Vkb3duXCIsKGU9PntpZihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpLHRoaXMuY29yZU1vdXNlU2VydmljZS5hcmVNb3VzZUV2ZW50c0FjdGl2ZSYmIXRoaXMuX3NlbGVjdGlvblNlcnZpY2Uuc2hvdWxkRm9yY2VTZWxlY3Rpb24oZSkpcmV0dXJuIGkoZSkscy5tb3VzZXVwJiZ0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHMubW91c2V1cCkscy5tb3VzZWRyYWcmJnRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixzLm1vdXNlZHJhZyksdGhpcy5jYW5jZWwoZSl9KSkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHQsXCJ3aGVlbFwiLChlPT57aWYoIXMud2hlZWwpe2lmKHRoaXMuX2N1c3RvbVdoZWVsRXZlbnRIYW5kbGVyJiYhMT09PXRoaXMuX2N1c3RvbVdoZWVsRXZlbnRIYW5kbGVyKGUpKXJldHVybiExO2lmKCF0aGlzLmJ1ZmZlci5oYXNTY3JvbGxiYWNrKXtjb25zdCB0PXRoaXMudmlld3BvcnQuZ2V0TGluZXNTY3JvbGxlZChlKTtpZigwPT09dClyZXR1cm47Y29uc3QgaT1ELkMwLkVTQysodGhpcy5jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzP1wiT1wiOlwiW1wiKSsoZS5kZWx0YVk8MD9cIkFcIjpcIkJcIik7bGV0IHM9XCJcIjtmb3IobGV0IGU9MDtlPE1hdGguYWJzKHQpO2UrKylzKz1pO3JldHVybiB0aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQocywhMCksdGhpcy5jYW5jZWwoZSwhMCl9cmV0dXJuIHRoaXMudmlld3BvcnQuaGFuZGxlV2hlZWwoZSk/dGhpcy5jYW5jZWwoZSk6dm9pZCAwfX0pLHtwYXNzaXZlOiExfSkpLHRoaXMucmVnaXN0ZXIoKDAsci5hZGREaXNwb3NhYmxlRG9tTGlzdGVuZXIpKHQsXCJ0b3VjaHN0YXJ0XCIsKGU9PntpZighdGhpcy5jb3JlTW91c2VTZXJ2aWNlLmFyZU1vdXNlRXZlbnRzQWN0aXZlKXJldHVybiB0aGlzLnZpZXdwb3J0LmhhbmRsZVRvdWNoU3RhcnQoZSksdGhpcy5jYW5jZWwoZSl9KSx7cGFzc2l2ZTohMH0pKSx0aGlzLnJlZ2lzdGVyKCgwLHIuYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0LFwidG91Y2htb3ZlXCIsKGU9PntpZighdGhpcy5jb3JlTW91c2VTZXJ2aWNlLmFyZU1vdXNlRXZlbnRzQWN0aXZlKXJldHVybiB0aGlzLnZpZXdwb3J0LmhhbmRsZVRvdWNoTW92ZShlKT92b2lkIDA6dGhpcy5jYW5jZWwoZSl9KSx7cGFzc2l2ZTohMX0pKX1yZWZyZXNoKGUsdCl7dGhpcy5fcmVuZGVyU2VydmljZT8ucmVmcmVzaFJvd3MoZSx0KX11cGRhdGVDdXJzb3JTdHlsZShlKXt0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlPy5zaG91bGRDb2x1bW5TZWxlY3QoZSk/dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjb2x1bW4tc2VsZWN0XCIpOnRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY29sdW1uLXNlbGVjdFwiKX1fc2hvd0N1cnNvcigpe3RoaXMuY29yZVNlcnZpY2UuaXNDdXJzb3JJbml0aWFsaXplZHx8KHRoaXMuY29yZVNlcnZpY2UuaXNDdXJzb3JJbml0aWFsaXplZD0hMCx0aGlzLnJlZnJlc2godGhpcy5idWZmZXIueSx0aGlzLmJ1ZmZlci55KSl9c2Nyb2xsTGluZXMoZSx0LGk9MCl7MT09PWk/KHN1cGVyLnNjcm9sbExpbmVzKGUsdCxpKSx0aGlzLnJlZnJlc2goMCx0aGlzLnJvd3MtMSkpOnRoaXMudmlld3BvcnQ/LnNjcm9sbExpbmVzKGUpfXBhc3RlKGUpeygwLHMucGFzdGUpKGUsdGhpcy50ZXh0YXJlYSx0aGlzLmNvcmVTZXJ2aWNlLHRoaXMub3B0aW9uc1NlcnZpY2UpfWF0dGFjaEN1c3RvbUtleUV2ZW50SGFuZGxlcihlKXt0aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXI9ZX1hdHRhY2hDdXN0b21XaGVlbEV2ZW50SGFuZGxlcihlKXt0aGlzLl9jdXN0b21XaGVlbEV2ZW50SGFuZGxlcj1lfXJlZ2lzdGVyTGlua1Byb3ZpZGVyKGUpe3JldHVybiB0aGlzLl9saW5rUHJvdmlkZXJTZXJ2aWNlLnJlZ2lzdGVyTGlua1Byb3ZpZGVyKGUpfXJlZ2lzdGVyQ2hhcmFjdGVySm9pbmVyKGUpe2lmKCF0aGlzLl9jaGFyYWN0ZXJKb2luZXJTZXJ2aWNlKXRocm93IG5ldyBFcnJvcihcIlRlcm1pbmFsIG11c3QgYmUgb3BlbmVkIGZpcnN0XCIpO2NvbnN0IHQ9dGhpcy5fY2hhcmFjdGVySm9pbmVyU2VydmljZS5yZWdpc3RlcihlKTtyZXR1cm4gdGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpLHR9ZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKXtpZighdGhpcy5fY2hhcmFjdGVySm9pbmVyU2VydmljZSl0aHJvdyBuZXcgRXJyb3IoXCJUZXJtaW5hbCBtdXN0IGJlIG9wZW5lZCBmaXJzdFwiKTt0aGlzLl9jaGFyYWN0ZXJKb2luZXJTZXJ2aWNlLmRlcmVnaXN0ZXIoZSkmJnRoaXMucmVmcmVzaCgwLHRoaXMucm93cy0xKX1nZXQgbWFya2Vycygpe3JldHVybiB0aGlzLmJ1ZmZlci5tYXJrZXJzfXJlZ2lzdGVyTWFya2VyKGUpe3JldHVybiB0aGlzLmJ1ZmZlci5hZGRNYXJrZXIodGhpcy5idWZmZXIueWJhc2UrdGhpcy5idWZmZXIueStlKX1yZWdpc3RlckRlY29yYXRpb24oZSl7cmV0dXJuIHRoaXMuX2RlY29yYXRpb25TZXJ2aWNlLnJlZ2lzdGVyRGVjb3JhdGlvbihlKX1oYXNTZWxlY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3NlbGVjdGlvblNlcnZpY2UmJnRoaXMuX3NlbGVjdGlvblNlcnZpY2UuaGFzU2VsZWN0aW9ufXNlbGVjdChlLHQsaSl7dGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZXRTZWxlY3Rpb24oZSx0LGkpfWdldFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlP3RoaXMuX3NlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uVGV4dDpcIlwifWdldFNlbGVjdGlvblBvc2l0aW9uKCl7aWYodGhpcy5fc2VsZWN0aW9uU2VydmljZSYmdGhpcy5fc2VsZWN0aW9uU2VydmljZS5oYXNTZWxlY3Rpb24pcmV0dXJue3N0YXJ0Ont4OnRoaXMuX3NlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uU3RhcnRbMF0seTp0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvblN0YXJ0WzFdfSxlbmQ6e3g6dGhpcy5fc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25FbmRbMF0seTp0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbkVuZFsxXX19fWNsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uU2VydmljZT8uY2xlYXJTZWxlY3Rpb24oKX1zZWxlY3RBbGwoKXt0aGlzLl9zZWxlY3Rpb25TZXJ2aWNlPy5zZWxlY3RBbGwoKX1zZWxlY3RMaW5lcyhlLHQpe3RoaXMuX3NlbGVjdGlvblNlcnZpY2U/LnNlbGVjdExpbmVzKGUsdCl9X2tleURvd24oZSl7aWYodGhpcy5fa2V5RG93bkhhbmRsZWQ9ITEsdGhpcy5fa2V5RG93blNlZW49ITAsdGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyJiYhMT09PXRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlcihlKSlyZXR1cm4hMTtjb25zdCB0PXRoaXMuYnJvd3Nlci5pc01hYyYmdGhpcy5vcHRpb25zLm1hY09wdGlvbklzTWV0YSYmZS5hbHRLZXk7aWYoIXQmJiF0aGlzLl9jb21wb3NpdGlvbkhlbHBlci5rZXlkb3duKGUpKXJldHVybiB0aGlzLm9wdGlvbnMuc2Nyb2xsT25Vc2VySW5wdXQmJnRoaXMuYnVmZmVyLnliYXNlIT09dGhpcy5idWZmZXIueWRpc3AmJnRoaXMuc2Nyb2xsVG9Cb3R0b20oKSwhMTt0fHxcIkRlYWRcIiE9PWUua2V5JiZcIkFsdEdyYXBoXCIhPT1lLmtleXx8KHRoaXMuX3VucHJvY2Vzc2VkRGVhZEtleT0hMCk7Y29uc3QgaT0oMCxSLmV2YWx1YXRlS2V5Ym9hcmRFdmVudCkoZSx0aGlzLmNvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5hcHBsaWNhdGlvbkN1cnNvcktleXMsdGhpcy5icm93c2VyLmlzTWFjLHRoaXMub3B0aW9ucy5tYWNPcHRpb25Jc01ldGEpO2lmKHRoaXMudXBkYXRlQ3Vyc29yU3R5bGUoZSksMz09PWkudHlwZXx8Mj09PWkudHlwZSl7Y29uc3QgdD10aGlzLnJvd3MtMTtyZXR1cm4gdGhpcy5zY3JvbGxMaW5lcygyPT09aS50eXBlPy10OnQpLHRoaXMuY2FuY2VsKGUsITApfXJldHVybiAxPT09aS50eXBlJiZ0aGlzLnNlbGVjdEFsbCgpLCEhdGhpcy5faXNUaGlyZExldmVsU2hpZnQodGhpcy5icm93c2VyLGUpfHwoaS5jYW5jZWwmJnRoaXMuY2FuY2VsKGUsITApLCFpLmtleXx8ISEoZS5rZXkmJiFlLmN0cmxLZXkmJiFlLmFsdEtleSYmIWUubWV0YUtleSYmMT09PWUua2V5Lmxlbmd0aCYmZS5rZXkuY2hhckNvZGVBdCgwKT49NjUmJmUua2V5LmNoYXJDb2RlQXQoMCk8PTkwKXx8KHRoaXMuX3VucHJvY2Vzc2VkRGVhZEtleT8odGhpcy5fdW5wcm9jZXNzZWREZWFkS2V5PSExLCEwKTooaS5rZXkhPT1ELkMwLkVUWCYmaS5rZXkhPT1ELkMwLkNSfHwodGhpcy50ZXh0YXJlYS52YWx1ZT1cIlwiKSx0aGlzLl9vbktleS5maXJlKHtrZXk6aS5rZXksZG9tRXZlbnQ6ZX0pLHRoaXMuX3Nob3dDdXJzb3IoKSx0aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoaS5rZXksITApLCF0aGlzLm9wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuc2NyZWVuUmVhZGVyTW9kZXx8ZS5hbHRLZXl8fGUuY3RybEtleT90aGlzLmNhbmNlbChlLCEwKTp2b2lkKHRoaXMuX2tleURvd25IYW5kbGVkPSEwKSkpKX1faXNUaGlyZExldmVsU2hpZnQoZSx0KXtjb25zdCBpPWUuaXNNYWMmJiF0aGlzLm9wdGlvbnMubWFjT3B0aW9uSXNNZXRhJiZ0LmFsdEtleSYmIXQuY3RybEtleSYmIXQubWV0YUtleXx8ZS5pc1dpbmRvd3MmJnQuYWx0S2V5JiZ0LmN0cmxLZXkmJiF0Lm1ldGFLZXl8fGUuaXNXaW5kb3dzJiZ0LmdldE1vZGlmaWVyU3RhdGUoXCJBbHRHcmFwaFwiKTtyZXR1cm5cImtleXByZXNzXCI9PT10LnR5cGU/aTppJiYoIXQua2V5Q29kZXx8dC5rZXlDb2RlPjQ3KX1fa2V5VXAoZSl7dGhpcy5fa2V5RG93blNlZW49ITEsdGhpcy5fY3VzdG9tS2V5RXZlbnRIYW5kbGVyJiYhMT09PXRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlcihlKXx8KGZ1bmN0aW9uKGUpe3JldHVybiAxNj09PWUua2V5Q29kZXx8MTc9PT1lLmtleUNvZGV8fDE4PT09ZS5rZXlDb2RlfShlKXx8dGhpcy5mb2N1cygpLHRoaXMudXBkYXRlQ3Vyc29yU3R5bGUoZSksdGhpcy5fa2V5UHJlc3NIYW5kbGVkPSExKX1fa2V5UHJlc3MoZSl7bGV0IHQ7aWYodGhpcy5fa2V5UHJlc3NIYW5kbGVkPSExLHRoaXMuX2tleURvd25IYW5kbGVkKXJldHVybiExO2lmKHRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlciYmITE9PT10aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXIoZSkpcmV0dXJuITE7aWYodGhpcy5jYW5jZWwoZSksZS5jaGFyQ29kZSl0PWUuY2hhckNvZGU7ZWxzZSBpZihudWxsPT09ZS53aGljaHx8dm9pZCAwPT09ZS53aGljaCl0PWUua2V5Q29kZTtlbHNle2lmKDA9PT1lLndoaWNofHwwPT09ZS5jaGFyQ29kZSlyZXR1cm4hMTt0PWUud2hpY2h9cmV0dXJuISghdHx8KGUuYWx0S2V5fHxlLmN0cmxLZXl8fGUubWV0YUtleSkmJiF0aGlzLl9pc1RoaXJkTGV2ZWxTaGlmdCh0aGlzLmJyb3dzZXIsZSl8fCh0PVN0cmluZy5mcm9tQ2hhckNvZGUodCksdGhpcy5fb25LZXkuZmlyZSh7a2V5OnQsZG9tRXZlbnQ6ZX0pLHRoaXMuX3Nob3dDdXJzb3IoKSx0aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQodCwhMCksdGhpcy5fa2V5UHJlc3NIYW5kbGVkPSEwLHRoaXMuX3VucHJvY2Vzc2VkRGVhZEtleT0hMSwwKSl9X2lucHV0RXZlbnQoZSl7aWYoZS5kYXRhJiZcImluc2VydFRleHRcIj09PWUuaW5wdXRUeXBlJiYoIWUuY29tcG9zZWR8fCF0aGlzLl9rZXlEb3duU2VlbikmJiF0aGlzLm9wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuc2NyZWVuUmVhZGVyTW9kZSl7aWYodGhpcy5fa2V5UHJlc3NIYW5kbGVkKXJldHVybiExO3RoaXMuX3VucHJvY2Vzc2VkRGVhZEtleT0hMTtjb25zdCB0PWUuZGF0YTtyZXR1cm4gdGhpcy5jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHQsITApLHRoaXMuY2FuY2VsKGUpLCEwfXJldHVybiExfXJlc2l6ZShlLHQpe2UhPT10aGlzLmNvbHN8fHQhPT10aGlzLnJvd3M/c3VwZXIucmVzaXplKGUsdCk6dGhpcy5fY2hhclNpemVTZXJ2aWNlJiYhdGhpcy5fY2hhclNpemVTZXJ2aWNlLmhhc1ZhbGlkU2l6ZSYmdGhpcy5fY2hhclNpemVTZXJ2aWNlLm1lYXN1cmUoKX1fYWZ0ZXJSZXNpemUoZSx0KXt0aGlzLl9jaGFyU2l6ZVNlcnZpY2U/Lm1lYXN1cmUoKSx0aGlzLnZpZXdwb3J0Py5zeW5jU2Nyb2xsQXJlYSghMCl9Y2xlYXIoKXtpZigwIT09dGhpcy5idWZmZXIueWJhc2V8fDAhPT10aGlzLmJ1ZmZlci55KXt0aGlzLmJ1ZmZlci5jbGVhckFsbE1hcmtlcnMoKSx0aGlzLmJ1ZmZlci5saW5lcy5zZXQoMCx0aGlzLmJ1ZmZlci5saW5lcy5nZXQodGhpcy5idWZmZXIueWJhc2UrdGhpcy5idWZmZXIueSkpLHRoaXMuYnVmZmVyLmxpbmVzLmxlbmd0aD0xLHRoaXMuYnVmZmVyLnlkaXNwPTAsdGhpcy5idWZmZXIueWJhc2U9MCx0aGlzLmJ1ZmZlci55PTA7Zm9yKGxldCBlPTE7ZTx0aGlzLnJvd3M7ZSsrKXRoaXMuYnVmZmVyLmxpbmVzLnB1c2godGhpcy5idWZmZXIuZ2V0QmxhbmtMaW5lKEwuREVGQVVMVF9BVFRSX0RBVEEpKTt0aGlzLl9vblNjcm9sbC5maXJlKHtwb3NpdGlvbjp0aGlzLmJ1ZmZlci55ZGlzcCxzb3VyY2U6MH0pLHRoaXMudmlld3BvcnQ/LnJlc2V0KCksdGhpcy5yZWZyZXNoKDAsdGhpcy5yb3dzLTEpfX1yZXNldCgpe3RoaXMub3B0aW9ucy5yb3dzPXRoaXMucm93cyx0aGlzLm9wdGlvbnMuY29scz10aGlzLmNvbHM7Y29uc3QgZT10aGlzLl9jdXN0b21LZXlFdmVudEhhbmRsZXI7dGhpcy5fc2V0dXAoKSxzdXBlci5yZXNldCgpLHRoaXMuX3NlbGVjdGlvblNlcnZpY2U/LnJlc2V0KCksdGhpcy5fZGVjb3JhdGlvblNlcnZpY2UucmVzZXQoKSx0aGlzLnZpZXdwb3J0Py5yZXNldCgpLHRoaXMuX2N1c3RvbUtleUV2ZW50SGFuZGxlcj1lLHRoaXMucmVmcmVzaCgwLHRoaXMucm93cy0xKX1jbGVhclRleHR1cmVBdGxhcygpe3RoaXMuX3JlbmRlclNlcnZpY2U/LmNsZWFyVGV4dHVyZUF0bGFzKCl9X3JlcG9ydEZvY3VzKCl7dGhpcy5lbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoXCJmb2N1c1wiKT90aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoRC5DMC5FU0MrXCJbSVwiKTp0aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoRC5DMC5FU0MrXCJbT1wiKX1fcmVwb3J0V2luZG93c09wdGlvbnMoZSl7aWYodGhpcy5fcmVuZGVyU2VydmljZSlzd2l0Y2goZSl7Y2FzZSBULldpbmRvd3NPcHRpb25zUmVwb3J0VHlwZS5HRVRfV0lOX1NJWkVfUElYRUxTOmNvbnN0IGU9dGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jYW52YXMud2lkdGgudG9GaXhlZCgwKSx0PXRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2FudmFzLmhlaWdodC50b0ZpeGVkKDApO3RoaXMuY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChgJHtELkMwLkVTQ31bNDske3R9OyR7ZX10YCk7YnJlYWs7Y2FzZSBULldpbmRvd3NPcHRpb25zUmVwb3J0VHlwZS5HRVRfQ0VMTF9TSVpFX1BJWEVMUzpjb25zdCBpPXRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aC50b0ZpeGVkKDApLHM9dGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jZWxsLmhlaWdodC50b0ZpeGVkKDApO3RoaXMuY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChgJHtELkMwLkVTQ31bNjske3N9OyR7aX10YCl9fWNhbmNlbChlLHQpe2lmKHRoaXMub3B0aW9ucy5jYW5jZWxFdmVudHN8fHQpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLCExfX10LlRlcm1pbmFsPVB9LDk5MjQ6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlRpbWVCYXNlZERlYm91bmNlcj12b2lkIDAsdC5UaW1lQmFzZWREZWJvdW5jZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSx0PTFlMyl7dGhpcy5fcmVuZGVyQ2FsbGJhY2s9ZSx0aGlzLl9kZWJvdW5jZVRocmVzaG9sZE1TPXQsdGhpcy5fbGFzdFJlZnJlc2hNcz0wLHRoaXMuX2FkZGl0aW9uYWxSZWZyZXNoUmVxdWVzdGVkPSExfWRpc3Bvc2UoKXt0aGlzLl9yZWZyZXNoVGltZW91dElEJiZjbGVhclRpbWVvdXQodGhpcy5fcmVmcmVzaFRpbWVvdXRJRCl9cmVmcmVzaChlLHQsaSl7dGhpcy5fcm93Q291bnQ9aSxlPXZvaWQgMCE9PWU/ZTowLHQ9dm9pZCAwIT09dD90OnRoaXMuX3Jvd0NvdW50LTEsdGhpcy5fcm93U3RhcnQ9dm9pZCAwIT09dGhpcy5fcm93U3RhcnQ/TWF0aC5taW4odGhpcy5fcm93U3RhcnQsZSk6ZSx0aGlzLl9yb3dFbmQ9dm9pZCAwIT09dGhpcy5fcm93RW5kP01hdGgubWF4KHRoaXMuX3Jvd0VuZCx0KTp0O2NvbnN0IHM9RGF0ZS5ub3coKTtpZihzLXRoaXMuX2xhc3RSZWZyZXNoTXM+PXRoaXMuX2RlYm91bmNlVGhyZXNob2xkTVMpdGhpcy5fbGFzdFJlZnJlc2hNcz1zLHRoaXMuX2lubmVyUmVmcmVzaCgpO2Vsc2UgaWYoIXRoaXMuX2FkZGl0aW9uYWxSZWZyZXNoUmVxdWVzdGVkKXtjb25zdCBlPXMtdGhpcy5fbGFzdFJlZnJlc2hNcyx0PXRoaXMuX2RlYm91bmNlVGhyZXNob2xkTVMtZTt0aGlzLl9hZGRpdGlvbmFsUmVmcmVzaFJlcXVlc3RlZD0hMCx0aGlzLl9yZWZyZXNoVGltZW91dElEPXdpbmRvdy5zZXRUaW1lb3V0KCgoKT0+e3RoaXMuX2xhc3RSZWZyZXNoTXM9RGF0ZS5ub3coKSx0aGlzLl9pbm5lclJlZnJlc2goKSx0aGlzLl9hZGRpdGlvbmFsUmVmcmVzaFJlcXVlc3RlZD0hMSx0aGlzLl9yZWZyZXNoVGltZW91dElEPXZvaWQgMH0pLHQpfX1faW5uZXJSZWZyZXNoKCl7aWYodm9pZCAwPT09dGhpcy5fcm93U3RhcnR8fHZvaWQgMD09PXRoaXMuX3Jvd0VuZHx8dm9pZCAwPT09dGhpcy5fcm93Q291bnQpcmV0dXJuO2NvbnN0IGU9TWF0aC5tYXgodGhpcy5fcm93U3RhcnQsMCksdD1NYXRoLm1pbih0aGlzLl9yb3dFbmQsdGhpcy5fcm93Q291bnQtMSk7dGhpcy5fcm93U3RhcnQ9dm9pZCAwLHRoaXMuX3Jvd0VuZD12b2lkIDAsdGhpcy5fcmVuZGVyQ2FsbGJhY2soZSx0KX19fSwxNjgwOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVmlld3BvcnQ9dm9pZCAwO2NvbnN0IG49aSgzNjU2KSxvPWkoNDcyNSksYT1pKDg0NjApLGg9aSg4NDQpLGM9aSgyNTg1KTtsZXQgbD10LlZpZXdwb3J0PWNsYXNzIGV4dGVuZHMgaC5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGUsdCxpLHMscixvLGgsYyl7c3VwZXIoKSx0aGlzLl92aWV3cG9ydEVsZW1lbnQ9ZSx0aGlzLl9zY3JvbGxBcmVhPXQsdGhpcy5fYnVmZmVyU2VydmljZT1pLHRoaXMuX29wdGlvbnNTZXJ2aWNlPXMsdGhpcy5fY2hhclNpemVTZXJ2aWNlPXIsdGhpcy5fcmVuZGVyU2VydmljZT1vLHRoaXMuX2NvcmVCcm93c2VyU2VydmljZT1oLHRoaXMuc2Nyb2xsQmFyV2lkdGg9MCx0aGlzLl9jdXJyZW50Um93SGVpZ2h0PTAsdGhpcy5fY3VycmVudERldmljZUNlbGxIZWlnaHQ9MCx0aGlzLl9sYXN0UmVjb3JkZWRCdWZmZXJMZW5ndGg9MCx0aGlzLl9sYXN0UmVjb3JkZWRWaWV3cG9ydEhlaWdodD0wLHRoaXMuX2xhc3RSZWNvcmRlZEJ1ZmZlckhlaWdodD0wLHRoaXMuX2xhc3RUb3VjaFk9MCx0aGlzLl9sYXN0U2Nyb2xsVG9wPTAsdGhpcy5fd2hlZWxQYXJ0aWFsU2Nyb2xsPTAsdGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lPW51bGwsdGhpcy5faWdub3JlTmV4dFNjcm9sbEV2ZW50PSExLHRoaXMuX3Ntb290aFNjcm9sbFN0YXRlPXtzdGFydFRpbWU6MCxvcmlnaW46LTEsdGFyZ2V0Oi0xfSx0aGlzLl9vblJlcXVlc3RTY3JvbGxMaW5lcz10aGlzLnJlZ2lzdGVyKG5ldyBhLkV2ZW50RW1pdHRlciksdGhpcy5vblJlcXVlc3RTY3JvbGxMaW5lcz10aGlzLl9vblJlcXVlc3RTY3JvbGxMaW5lcy5ldmVudCx0aGlzLnNjcm9sbEJhcldpZHRoPXRoaXMuX3ZpZXdwb3J0RWxlbWVudC5vZmZzZXRXaWR0aC10aGlzLl9zY3JvbGxBcmVhLm9mZnNldFdpZHRofHwxNSx0aGlzLnJlZ2lzdGVyKCgwLG4uYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0aGlzLl92aWV3cG9ydEVsZW1lbnQsXCJzY3JvbGxcIix0aGlzLl9oYW5kbGVTY3JvbGwuYmluZCh0aGlzKSkpLHRoaXMuX2FjdGl2ZUJ1ZmZlcj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcix0aGlzLnJlZ2lzdGVyKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5vbkJ1ZmZlckFjdGl2YXRlKChlPT50aGlzLl9hY3RpdmVCdWZmZXI9ZS5hY3RpdmVCdWZmZXIpKSksdGhpcy5fcmVuZGVyRGltZW5zaW9ucz10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMsdGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uRGltZW5zaW9uc0NoYW5nZSgoZT0+dGhpcy5fcmVuZGVyRGltZW5zaW9ucz1lKSkpLHRoaXMuX2hhbmRsZVRoZW1lQ2hhbmdlKGMuY29sb3JzKSx0aGlzLnJlZ2lzdGVyKGMub25DaGFuZ2VDb2xvcnMoKGU9PnRoaXMuX2hhbmRsZVRoZW1lQ2hhbmdlKGUpKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZShcInNjcm9sbGJhY2tcIiwoKCk9PnRoaXMuc3luY1Njcm9sbEFyZWEoKSkpKSxzZXRUaW1lb3V0KCgoKT0+dGhpcy5zeW5jU2Nyb2xsQXJlYSgpKSl9X2hhbmRsZVRoZW1lQ2hhbmdlKGUpe3RoaXMuX3ZpZXdwb3J0RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9ZS5iYWNrZ3JvdW5kLmNzc31yZXNldCgpe3RoaXMuX2N1cnJlbnRSb3dIZWlnaHQ9MCx0aGlzLl9jdXJyZW50RGV2aWNlQ2VsbEhlaWdodD0wLHRoaXMuX2xhc3RSZWNvcmRlZEJ1ZmZlckxlbmd0aD0wLHRoaXMuX2xhc3RSZWNvcmRlZFZpZXdwb3J0SGVpZ2h0PTAsdGhpcy5fbGFzdFJlY29yZGVkQnVmZmVySGVpZ2h0PTAsdGhpcy5fbGFzdFRvdWNoWT0wLHRoaXMuX2xhc3RTY3JvbGxUb3A9MCx0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2Uud2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuc3luY1Njcm9sbEFyZWEoKSkpfV9yZWZyZXNoKGUpe2lmKGUpcmV0dXJuIHRoaXMuX2lubmVyUmVmcmVzaCgpLHZvaWQobnVsbCE9PXRoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZSYmdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWZyZXNoQW5pbWF0aW9uRnJhbWUpKTtudWxsPT09dGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lJiYodGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lPXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS53aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5faW5uZXJSZWZyZXNoKCkpKSl9X2lubmVyUmVmcmVzaCgpe2lmKHRoaXMuX2NoYXJTaXplU2VydmljZS5oZWlnaHQ+MCl7dGhpcy5fY3VycmVudFJvd0hlaWdodD10aGlzLl9yZW5kZXJEaW1lbnNpb25zLmRldmljZS5jZWxsLmhlaWdodC90aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UuZHByLHRoaXMuX2N1cnJlbnREZXZpY2VDZWxsSGVpZ2h0PXRoaXMuX3JlbmRlckRpbWVuc2lvbnMuZGV2aWNlLmNlbGwuaGVpZ2h0LHRoaXMuX2xhc3RSZWNvcmRlZFZpZXdwb3J0SGVpZ2h0PXRoaXMuX3ZpZXdwb3J0RWxlbWVudC5vZmZzZXRIZWlnaHQ7Y29uc3QgZT1NYXRoLnJvdW5kKHRoaXMuX2N1cnJlbnRSb3dIZWlnaHQqdGhpcy5fbGFzdFJlY29yZGVkQnVmZmVyTGVuZ3RoKSsodGhpcy5fbGFzdFJlY29yZGVkVmlld3BvcnRIZWlnaHQtdGhpcy5fcmVuZGVyRGltZW5zaW9ucy5jc3MuY2FudmFzLmhlaWdodCk7dGhpcy5fbGFzdFJlY29yZGVkQnVmZmVySGVpZ2h0IT09ZSYmKHRoaXMuX2xhc3RSZWNvcmRlZEJ1ZmZlckhlaWdodD1lLHRoaXMuX3Njcm9sbEFyZWEuc3R5bGUuaGVpZ2h0PXRoaXMuX2xhc3RSZWNvcmRlZEJ1ZmZlckhlaWdodCtcInB4XCIpfWNvbnN0IGU9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3AqdGhpcy5fY3VycmVudFJvd0hlaWdodDt0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wIT09ZSYmKHRoaXMuX2lnbm9yZU5leHRTY3JvbGxFdmVudD0hMCx0aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wPWUpLHRoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZT1udWxsfXN5bmNTY3JvbGxBcmVhKGU9ITEpe2lmKHRoaXMuX2xhc3RSZWNvcmRlZEJ1ZmZlckxlbmd0aCE9PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmxlbmd0aClyZXR1cm4gdGhpcy5fbGFzdFJlY29yZGVkQnVmZmVyTGVuZ3RoPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmxlbmd0aCx2b2lkIHRoaXMuX3JlZnJlc2goZSk7dGhpcy5fbGFzdFJlY29yZGVkVmlld3BvcnRIZWlnaHQ9PT10aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY3NzLmNhbnZhcy5oZWlnaHQmJnRoaXMuX2xhc3RTY3JvbGxUb3A9PT10aGlzLl9hY3RpdmVCdWZmZXIueWRpc3AqdGhpcy5fY3VycmVudFJvd0hlaWdodCYmdGhpcy5fcmVuZGVyRGltZW5zaW9ucy5kZXZpY2UuY2VsbC5oZWlnaHQ9PT10aGlzLl9jdXJyZW50RGV2aWNlQ2VsbEhlaWdodHx8dGhpcy5fcmVmcmVzaChlKX1faGFuZGxlU2Nyb2xsKGUpe2lmKHRoaXMuX2xhc3RTY3JvbGxUb3A9dGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCwhdGhpcy5fdmlld3BvcnRFbGVtZW50Lm9mZnNldFBhcmVudClyZXR1cm47aWYodGhpcy5faWdub3JlTmV4dFNjcm9sbEV2ZW50KXJldHVybiB0aGlzLl9pZ25vcmVOZXh0U2Nyb2xsRXZlbnQ9ITEsdm9pZCB0aGlzLl9vblJlcXVlc3RTY3JvbGxMaW5lcy5maXJlKHthbW91bnQ6MCxzdXBwcmVzc1Njcm9sbEV2ZW50OiEwfSk7Y29uc3QgdD1NYXRoLnJvdW5kKHRoaXMuX2xhc3RTY3JvbGxUb3AvdGhpcy5fY3VycmVudFJvd0hlaWdodCktdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3A7dGhpcy5fb25SZXF1ZXN0U2Nyb2xsTGluZXMuZmlyZSh7YW1vdW50OnQsc3VwcHJlc3NTY3JvbGxFdmVudDohMH0pfV9zbW9vdGhTY3JvbGwoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwtMT09PXRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLm9yaWdpbnx8LTE9PT10aGlzLl9zbW9vdGhTY3JvbGxTdGF0ZS50YXJnZXQpcmV0dXJuO2NvbnN0IGU9dGhpcy5fc21vb3RoU2Nyb2xsUGVyY2VudCgpO3RoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3A9dGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUub3JpZ2luK01hdGgucm91bmQoZSoodGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUudGFyZ2V0LXRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLm9yaWdpbikpLGU8MT90aGlzLl9jb3JlQnJvd3NlclNlcnZpY2Uud2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuX3Ntb290aFNjcm9sbCgpKSk6dGhpcy5fY2xlYXJTbW9vdGhTY3JvbGxTdGF0ZSgpfV9zbW9vdGhTY3JvbGxQZXJjZW50KCl7cmV0dXJuIHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuc21vb3RoU2Nyb2xsRHVyYXRpb24mJnRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLnN0YXJ0VGltZT9NYXRoLm1heChNYXRoLm1pbigoRGF0ZS5ub3coKS10aGlzLl9zbW9vdGhTY3JvbGxTdGF0ZS5zdGFydFRpbWUpL3RoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuc21vb3RoU2Nyb2xsRHVyYXRpb24sMSksMCk6MX1fY2xlYXJTbW9vdGhTY3JvbGxTdGF0ZSgpe3RoaXMuX3Ntb290aFNjcm9sbFN0YXRlLnN0YXJ0VGltZT0wLHRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLm9yaWdpbj0tMSx0aGlzLl9zbW9vdGhTY3JvbGxTdGF0ZS50YXJnZXQ9LTF9X2J1YmJsZVNjcm9sbChlLHQpe2NvbnN0IGk9dGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCt0aGlzLl9sYXN0UmVjb3JkZWRWaWV3cG9ydEhlaWdodDtyZXR1cm4hKHQ8MCYmMCE9PXRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3B8fHQ+MCYmaTx0aGlzLl9sYXN0UmVjb3JkZWRCdWZmZXJIZWlnaHQpfHwoZS5jYW5jZWxhYmxlJiZlLnByZXZlbnREZWZhdWx0KCksITEpfWhhbmRsZVdoZWVsKGUpe2NvbnN0IHQ9dGhpcy5fZ2V0UGl4ZWxzU2Nyb2xsZWQoZSk7cmV0dXJuIDAhPT10JiYodGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5zbW9vdGhTY3JvbGxEdXJhdGlvbj8odGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUuc3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fc21vb3RoU2Nyb2xsUGVyY2VudCgpPDE/KHRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLm9yaWdpbj10aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wLC0xPT09dGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUudGFyZ2V0P3RoaXMuX3Ntb290aFNjcm9sbFN0YXRlLnRhcmdldD10aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wK3Q6dGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUudGFyZ2V0Kz10LHRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLnRhcmdldD1NYXRoLm1heChNYXRoLm1pbih0aGlzLl9zbW9vdGhTY3JvbGxTdGF0ZS50YXJnZXQsdGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbEhlaWdodCksMCksdGhpcy5fc21vb3RoU2Nyb2xsKCkpOnRoaXMuX2NsZWFyU21vb3RoU2Nyb2xsU3RhdGUoKSk6dGhpcy5fdmlld3BvcnRFbGVtZW50LnNjcm9sbFRvcCs9dCx0aGlzLl9idWJibGVTY3JvbGwoZSx0KSl9c2Nyb2xsTGluZXMoZSl7aWYoMCE9PWUpaWYodGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5zbW9vdGhTY3JvbGxEdXJhdGlvbil7Y29uc3QgdD1lKnRoaXMuX2N1cnJlbnRSb3dIZWlnaHQ7dGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUuc3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fc21vb3RoU2Nyb2xsUGVyY2VudCgpPDE/KHRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLm9yaWdpbj10aGlzLl92aWV3cG9ydEVsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX3Ntb290aFNjcm9sbFN0YXRlLnRhcmdldD10aGlzLl9zbW9vdGhTY3JvbGxTdGF0ZS5vcmlnaW4rdCx0aGlzLl9zbW9vdGhTY3JvbGxTdGF0ZS50YXJnZXQ9TWF0aC5tYXgoTWF0aC5taW4odGhpcy5fc21vb3RoU2Nyb2xsU3RhdGUudGFyZ2V0LHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxIZWlnaHQpLDApLHRoaXMuX3Ntb290aFNjcm9sbCgpKTp0aGlzLl9jbGVhclNtb290aFNjcm9sbFN0YXRlKCl9ZWxzZSB0aGlzLl9vblJlcXVlc3RTY3JvbGxMaW5lcy5maXJlKHthbW91bnQ6ZSxzdXBwcmVzc1Njcm9sbEV2ZW50OiExfSl9X2dldFBpeGVsc1Njcm9sbGVkKGUpe2lmKDA9PT1lLmRlbHRhWXx8ZS5zaGlmdEtleSlyZXR1cm4gMDtsZXQgdD10aGlzLl9hcHBseVNjcm9sbE1vZGlmaWVyKGUuZGVsdGFZLGUpO3JldHVybiBlLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/dCo9dGhpcy5fY3VycmVudFJvd0hlaWdodDplLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJih0Kj10aGlzLl9jdXJyZW50Um93SGVpZ2h0KnRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyksdH1nZXRCdWZmZXJFbGVtZW50cyhlLHQpe2xldCBpLHM9XCJcIjtjb25zdCByPVtdLG49dD8/dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMubGVuZ3RoLG89dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXM7Zm9yKGxldCB0PWU7dDxuO3QrKyl7Y29uc3QgZT1vLmdldCh0KTtpZighZSljb250aW51ZTtjb25zdCBuPW8uZ2V0KHQrMSk/LmlzV3JhcHBlZDtpZihzKz1lLnRyYW5zbGF0ZVRvU3RyaW5nKCFuKSwhbnx8dD09PW8ubGVuZ3RoLTEpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLnRleHRDb250ZW50PXMsci5wdXNoKGUpLHMubGVuZ3RoPjAmJihpPWUpLHM9XCJcIn19cmV0dXJue2J1ZmZlckVsZW1lbnRzOnIsY3Vyc29yRWxlbWVudDppfX1nZXRMaW5lc1Njcm9sbGVkKGUpe2lmKDA9PT1lLmRlbHRhWXx8ZS5zaGlmdEtleSlyZXR1cm4gMDtsZXQgdD10aGlzLl9hcHBseVNjcm9sbE1vZGlmaWVyKGUuZGVsdGFZLGUpO3JldHVybiBlLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMPyh0Lz10aGlzLl9jdXJyZW50Um93SGVpZ2h0KzAsdGhpcy5fd2hlZWxQYXJ0aWFsU2Nyb2xsKz10LHQ9TWF0aC5mbG9vcihNYXRoLmFicyh0aGlzLl93aGVlbFBhcnRpYWxTY3JvbGwpKSoodGhpcy5fd2hlZWxQYXJ0aWFsU2Nyb2xsPjA/MTotMSksdGhpcy5fd2hlZWxQYXJ0aWFsU2Nyb2xsJT0xKTplLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJih0Kj10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHR9X2FwcGx5U2Nyb2xsTW9kaWZpZXIoZSx0KXtjb25zdCBpPXRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZmFzdFNjcm9sbE1vZGlmaWVyO3JldHVyblwiYWx0XCI9PT1pJiZ0LmFsdEtleXx8XCJjdHJsXCI9PT1pJiZ0LmN0cmxLZXl8fFwic2hpZnRcIj09PWkmJnQuc2hpZnRLZXk/ZSp0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZhc3RTY3JvbGxTZW5zaXRpdml0eSp0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnNjcm9sbFNlbnNpdGl2aXR5OmUqdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5zY3JvbGxTZW5zaXRpdml0eX1oYW5kbGVUb3VjaFN0YXJ0KGUpe3RoaXMuX2xhc3RUb3VjaFk9ZS50b3VjaGVzWzBdLnBhZ2VZfWhhbmRsZVRvdWNoTW92ZShlKXtjb25zdCB0PXRoaXMuX2xhc3RUb3VjaFktZS50b3VjaGVzWzBdLnBhZ2VZO3JldHVybiB0aGlzLl9sYXN0VG91Y2hZPWUudG91Y2hlc1swXS5wYWdlWSwwIT09dCYmKHRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zY3JvbGxUb3ArPXQsdGhpcy5fYnViYmxlU2Nyb2xsKGUsdCkpfX07dC5WaWV3cG9ydD1sPXMoW3IoMixjLklCdWZmZXJTZXJ2aWNlKSxyKDMsYy5JT3B0aW9uc1NlcnZpY2UpLHIoNCxvLklDaGFyU2l6ZVNlcnZpY2UpLHIoNSxvLklSZW5kZXJTZXJ2aWNlKSxyKDYsby5JQ29yZUJyb3dzZXJTZXJ2aWNlKSxyKDcsby5JVGhlbWVTZXJ2aWNlKV0sbCl9LDMxMDc6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LGkscyl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoLG89bjwzP3Q6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSk6cztpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlvPVJlZmxlY3QuZGVjb3JhdGUoZSx0LGkscyk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkocj1lW2FdKSYmKG89KG48Mz9yKG8pOm4+Mz9yKHQsaSxvKTpyKHQsaSkpfHxvKTtyZXR1cm4gbj4zJiZvJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG8pLG99LHI9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3QoaSxzLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5CdWZmZXJEZWNvcmF0aW9uUmVuZGVyZXI9dm9pZCAwO2NvbnN0IG49aSg0NzI1KSxvPWkoODQ0KSxhPWkoMjU4NSk7bGV0IGg9dC5CdWZmZXJEZWNvcmF0aW9uUmVuZGVyZXI9Y2xhc3MgZXh0ZW5kcyBvLkRpc3Bvc2FibGV7Y29uc3RydWN0b3IoZSx0LGkscyxyKXtzdXBlcigpLHRoaXMuX3NjcmVlbkVsZW1lbnQ9ZSx0aGlzLl9idWZmZXJTZXJ2aWNlPXQsdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlPWksdGhpcy5fZGVjb3JhdGlvblNlcnZpY2U9cyx0aGlzLl9yZW5kZXJTZXJ2aWNlPXIsdGhpcy5fZGVjb3JhdGlvbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5fYWx0QnVmZmVySXNBY3RpdmU9ITEsdGhpcy5fZGltZW5zaW9uc0NoYW5nZWQ9ITEsdGhpcy5fY29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1kZWNvcmF0aW9uLWNvbnRhaW5lclwiKSx0aGlzLl9zY3JlZW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uUmVuZGVyZWRWaWV3cG9ydENoYW5nZSgoKCk9PnRoaXMuX2RvUmVmcmVzaERlY29yYXRpb25zKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uRGltZW5zaW9uc0NoYW5nZSgoKCk9Pnt0aGlzLl9kaW1lbnNpb25zQ2hhbmdlZD0hMCx0aGlzLl9xdWV1ZVJlZnJlc2goKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2Uub25EcHJDaGFuZ2UoKCgpPT50aGlzLl9xdWV1ZVJlZnJlc2goKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5vbkJ1ZmZlckFjdGl2YXRlKCgoKT0+e3RoaXMuX2FsdEJ1ZmZlcklzQWN0aXZlPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyPT09dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFsdH0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9kZWNvcmF0aW9uU2VydmljZS5vbkRlY29yYXRpb25SZWdpc3RlcmVkKCgoKT0+dGhpcy5fcXVldWVSZWZyZXNoKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9kZWNvcmF0aW9uU2VydmljZS5vbkRlY29yYXRpb25SZW1vdmVkKChlPT50aGlzLl9yZW1vdmVEZWNvcmF0aW9uKGUpKSkpLHRoaXMucmVnaXN0ZXIoKDAsby50b0Rpc3Bvc2FibGUpKCgoKT0+e3RoaXMuX2NvbnRhaW5lci5yZW1vdmUoKSx0aGlzLl9kZWNvcmF0aW9uRWxlbWVudHMuY2xlYXIoKX0pKSl9X3F1ZXVlUmVmcmVzaCgpe3ZvaWQgMD09PXRoaXMuX2FuaW1hdGlvbkZyYW1lJiYodGhpcy5fYW5pbWF0aW9uRnJhbWU9dGhpcy5fcmVuZGVyU2VydmljZS5hZGRSZWZyZXNoQ2FsbGJhY2soKCgpPT57dGhpcy5fZG9SZWZyZXNoRGVjb3JhdGlvbnMoKSx0aGlzLl9hbmltYXRpb25GcmFtZT12b2lkIDB9KSkpfV9kb1JlZnJlc2hEZWNvcmF0aW9ucygpe2Zvcihjb25zdCBlIG9mIHRoaXMuX2RlY29yYXRpb25TZXJ2aWNlLmRlY29yYXRpb25zKXRoaXMuX3JlbmRlckRlY29yYXRpb24oZSk7dGhpcy5fZGltZW5zaW9uc0NoYW5nZWQ9ITF9X3JlbmRlckRlY29yYXRpb24oZSl7dGhpcy5fcmVmcmVzaFN0eWxlKGUpLHRoaXMuX2RpbWVuc2lvbnNDaGFuZ2VkJiZ0aGlzLl9yZWZyZXNoWFBvc2l0aW9uKGUpfV9jcmVhdGVFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLm1haW5Eb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NMaXN0LmFkZChcInh0ZXJtLWRlY29yYXRpb25cIiksdC5jbGFzc0xpc3QudG9nZ2xlKFwieHRlcm0tZGVjb3JhdGlvbi10b3AtbGF5ZXJcIixcInRvcFwiPT09ZT8ub3B0aW9ucz8ubGF5ZXIpLHQuc3R5bGUud2lkdGg9YCR7TWF0aC5yb3VuZCgoZS5vcHRpb25zLndpZHRofHwxKSp0aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY3NzLmNlbGwud2lkdGgpfXB4YCx0LnN0eWxlLmhlaWdodD0oZS5vcHRpb25zLmhlaWdodHx8MSkqdGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jZWxsLmhlaWdodCtcInB4XCIsdC5zdHlsZS50b3A9KGUubWFya2VyLmxpbmUtdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFjdGl2ZS55ZGlzcCkqdGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jZWxsLmhlaWdodCtcInB4XCIsdC5zdHlsZS5saW5lSGVpZ2h0PWAke3RoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHR9cHhgO2NvbnN0IGk9ZS5vcHRpb25zLng/PzA7cmV0dXJuIGkmJmk+dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzJiYodC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKSx0aGlzLl9yZWZyZXNoWFBvc2l0aW9uKGUsdCksdH1fcmVmcmVzaFN0eWxlKGUpe2NvbnN0IHQ9ZS5tYXJrZXIubGluZS10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcnMuYWN0aXZlLnlkaXNwO2lmKHQ8MHx8dD49dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzKWUuZWxlbWVudCYmKGUuZWxlbWVudC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGUub25SZW5kZXJFbWl0dGVyLmZpcmUoZS5lbGVtZW50KSk7ZWxzZXtsZXQgaT10aGlzLl9kZWNvcmF0aW9uRWxlbWVudHMuZ2V0KGUpO2l8fChpPXRoaXMuX2NyZWF0ZUVsZW1lbnQoZSksZS5lbGVtZW50PWksdGhpcy5fZGVjb3JhdGlvbkVsZW1lbnRzLnNldChlLGkpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChpKSxlLm9uRGlzcG9zZSgoKCk9Pnt0aGlzLl9kZWNvcmF0aW9uRWxlbWVudHMuZGVsZXRlKGUpLGkucmVtb3ZlKCl9KSkpLGkuc3R5bGUudG9wPXQqdGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jZWxsLmhlaWdodCtcInB4XCIsaS5zdHlsZS5kaXNwbGF5PXRoaXMuX2FsdEJ1ZmZlcklzQWN0aXZlP1wibm9uZVwiOlwiYmxvY2tcIixlLm9uUmVuZGVyRW1pdHRlci5maXJlKGkpfX1fcmVmcmVzaFhQb3NpdGlvbihlLHQ9ZS5lbGVtZW50KXtpZighdClyZXR1cm47Y29uc3QgaT1lLm9wdGlvbnMueD8/MDtcInJpZ2h0XCI9PT0oZS5vcHRpb25zLmFuY2hvcnx8XCJsZWZ0XCIpP3Quc3R5bGUucmlnaHQ9aT9pKnRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aCtcInB4XCI6XCJcIjp0LnN0eWxlLmxlZnQ9aT9pKnRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aCtcInB4XCI6XCJcIn1fcmVtb3ZlRGVjb3JhdGlvbihlKXt0aGlzLl9kZWNvcmF0aW9uRWxlbWVudHMuZ2V0KGUpPy5yZW1vdmUoKSx0aGlzLl9kZWNvcmF0aW9uRWxlbWVudHMuZGVsZXRlKGUpLGUuZGlzcG9zZSgpfX07dC5CdWZmZXJEZWNvcmF0aW9uUmVuZGVyZXI9aD1zKFtyKDEsYS5JQnVmZmVyU2VydmljZSkscigyLG4uSUNvcmVCcm93c2VyU2VydmljZSkscigzLGEuSURlY29yYXRpb25TZXJ2aWNlKSxyKDQsbi5JUmVuZGVyU2VydmljZSldLGgpfSw1ODcxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db2xvclpvbmVTdG9yZT12b2lkIDAsdC5Db2xvclpvbmVTdG9yZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3pvbmVzPVtdLHRoaXMuX3pvbmVQb29sPVtdLHRoaXMuX3pvbmVQb29sSW5kZXg9MCx0aGlzLl9saW5lUGFkZGluZz17ZnVsbDowLGxlZnQ6MCxjZW50ZXI6MCxyaWdodDowfX1nZXQgem9uZXMoKXtyZXR1cm4gdGhpcy5fem9uZVBvb2wubGVuZ3RoPU1hdGgubWluKHRoaXMuX3pvbmVQb29sLmxlbmd0aCx0aGlzLl96b25lcy5sZW5ndGgpLHRoaXMuX3pvbmVzfWNsZWFyKCl7dGhpcy5fem9uZXMubGVuZ3RoPTAsdGhpcy5fem9uZVBvb2xJbmRleD0wfWFkZERlY29yYXRpb24oZSl7aWYoZS5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zKXtmb3IoY29uc3QgdCBvZiB0aGlzLl96b25lcylpZih0LmNvbG9yPT09ZS5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zLmNvbG9yJiZ0LnBvc2l0aW9uPT09ZS5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zLnBvc2l0aW9uKXtpZih0aGlzLl9saW5lSW50ZXJzZWN0c1pvbmUodCxlLm1hcmtlci5saW5lKSlyZXR1cm47aWYodGhpcy5fbGluZUFkamFjZW50VG9ab25lKHQsZS5tYXJrZXIubGluZSxlLm9wdGlvbnMub3ZlcnZpZXdSdWxlck9wdGlvbnMucG9zaXRpb24pKXJldHVybiB2b2lkIHRoaXMuX2FkZExpbmVUb1pvbmUodCxlLm1hcmtlci5saW5lKX1pZih0aGlzLl96b25lUG9vbEluZGV4PHRoaXMuX3pvbmVQb29sLmxlbmd0aClyZXR1cm4gdGhpcy5fem9uZVBvb2xbdGhpcy5fem9uZVBvb2xJbmRleF0uY29sb3I9ZS5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zLmNvbG9yLHRoaXMuX3pvbmVQb29sW3RoaXMuX3pvbmVQb29sSW5kZXhdLnBvc2l0aW9uPWUub3B0aW9ucy5vdmVydmlld1J1bGVyT3B0aW9ucy5wb3NpdGlvbix0aGlzLl96b25lUG9vbFt0aGlzLl96b25lUG9vbEluZGV4XS5zdGFydEJ1ZmZlckxpbmU9ZS5tYXJrZXIubGluZSx0aGlzLl96b25lUG9vbFt0aGlzLl96b25lUG9vbEluZGV4XS5lbmRCdWZmZXJMaW5lPWUubWFya2VyLmxpbmUsdm9pZCB0aGlzLl96b25lcy5wdXNoKHRoaXMuX3pvbmVQb29sW3RoaXMuX3pvbmVQb29sSW5kZXgrK10pO3RoaXMuX3pvbmVzLnB1c2goe2NvbG9yOmUub3B0aW9ucy5vdmVydmlld1J1bGVyT3B0aW9ucy5jb2xvcixwb3NpdGlvbjplLm9wdGlvbnMub3ZlcnZpZXdSdWxlck9wdGlvbnMucG9zaXRpb24sc3RhcnRCdWZmZXJMaW5lOmUubWFya2VyLmxpbmUsZW5kQnVmZmVyTGluZTplLm1hcmtlci5saW5lfSksdGhpcy5fem9uZVBvb2wucHVzaCh0aGlzLl96b25lc1t0aGlzLl96b25lcy5sZW5ndGgtMV0pLHRoaXMuX3pvbmVQb29sSW5kZXgrK319c2V0UGFkZGluZyhlKXt0aGlzLl9saW5lUGFkZGluZz1lfV9saW5lSW50ZXJzZWN0c1pvbmUoZSx0KXtyZXR1cm4gdD49ZS5zdGFydEJ1ZmZlckxpbmUmJnQ8PWUuZW5kQnVmZmVyTGluZX1fbGluZUFkamFjZW50VG9ab25lKGUsdCxpKXtyZXR1cm4gdD49ZS5zdGFydEJ1ZmZlckxpbmUtdGhpcy5fbGluZVBhZGRpbmdbaXx8XCJmdWxsXCJdJiZ0PD1lLmVuZEJ1ZmZlckxpbmUrdGhpcy5fbGluZVBhZGRpbmdbaXx8XCJmdWxsXCJdfV9hZGRMaW5lVG9ab25lKGUsdCl7ZS5zdGFydEJ1ZmZlckxpbmU9TWF0aC5taW4oZS5zdGFydEJ1ZmZlckxpbmUsdCksZS5lbmRCdWZmZXJMaW5lPU1hdGgubWF4KGUuZW5kQnVmZmVyTGluZSx0KX19fSw1NzQ0OmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuT3ZlcnZpZXdSdWxlclJlbmRlcmVyPXZvaWQgMDtjb25zdCBuPWkoNTg3MSksbz1pKDQ3MjUpLGE9aSg4NDQpLGg9aSgyNTg1KSxjPXtmdWxsOjAsbGVmdDowLGNlbnRlcjowLHJpZ2h0OjB9LGw9e2Z1bGw6MCxsZWZ0OjAsY2VudGVyOjAscmlnaHQ6MH0sZD17ZnVsbDowLGxlZnQ6MCxjZW50ZXI6MCxyaWdodDowfTtsZXQgXz10Lk92ZXJ2aWV3UnVsZXJSZW5kZXJlcj1jbGFzcyBleHRlbmRzIGEuRGlzcG9zYWJsZXtnZXQgX3dpZHRoKCl7cmV0dXJuIHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMub3ZlcnZpZXdSdWxlcldpZHRofHwwfWNvbnN0cnVjdG9yKGUsdCxpLHMscixvLGgpe3N1cGVyKCksdGhpcy5fdmlld3BvcnRFbGVtZW50PWUsdGhpcy5fc2NyZWVuRWxlbWVudD10LHRoaXMuX2J1ZmZlclNlcnZpY2U9aSx0aGlzLl9kZWNvcmF0aW9uU2VydmljZT1zLHRoaXMuX3JlbmRlclNlcnZpY2U9cix0aGlzLl9vcHRpb25zU2VydmljZT1vLHRoaXMuX2NvcmVCcm93c2VyU2VydmljZT1oLHRoaXMuX2NvbG9yWm9uZVN0b3JlPW5ldyBuLkNvbG9yWm9uZVN0b3JlLHRoaXMuX3Nob3VsZFVwZGF0ZURpbWVuc2lvbnM9ITAsdGhpcy5fc2hvdWxkVXBkYXRlQW5jaG9yPSEwLHRoaXMuX2xhc3RLbm93bkJ1ZmZlckxlbmd0aD0wLHRoaXMuX2NhbnZhcz10aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UubWFpbkRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdGhpcy5fY2FudmFzLmNsYXNzTGlzdC5hZGQoXCJ4dGVybS1kZWNvcmF0aW9uLW92ZXJ2aWV3LXJ1bGVyXCIpLHRoaXMuX3JlZnJlc2hDYW52YXNEaW1lbnNpb25zKCksdGhpcy5fdmlld3BvcnRFbGVtZW50LnBhcmVudEVsZW1lbnQ/Lmluc2VydEJlZm9yZSh0aGlzLl9jYW52YXMsdGhpcy5fdmlld3BvcnRFbGVtZW50KTtjb25zdCBjPXRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7aWYoIWMpdGhyb3cgbmV3IEVycm9yKFwiQ3R4IGNhbm5vdCBiZSBudWxsXCIpO3RoaXMuX2N0eD1jLHRoaXMuX3JlZ2lzdGVyRGVjb3JhdGlvbkxpc3RlbmVycygpLHRoaXMuX3JlZ2lzdGVyQnVmZmVyQ2hhbmdlTGlzdGVuZXJzKCksdGhpcy5fcmVnaXN0ZXJEaW1lbnNpb25DaGFuZ2VMaXN0ZW5lcnMoKSx0aGlzLnJlZ2lzdGVyKCgwLGEudG9EaXNwb3NhYmxlKSgoKCk9Pnt0aGlzLl9jYW52YXM/LnJlbW92ZSgpfSkpKX1fcmVnaXN0ZXJEZWNvcmF0aW9uTGlzdGVuZXJzKCl7dGhpcy5yZWdpc3Rlcih0aGlzLl9kZWNvcmF0aW9uU2VydmljZS5vbkRlY29yYXRpb25SZWdpc3RlcmVkKCgoKT0+dGhpcy5fcXVldWVSZWZyZXNoKHZvaWQgMCwhMCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9kZWNvcmF0aW9uU2VydmljZS5vbkRlY29yYXRpb25SZW1vdmVkKCgoKT0+dGhpcy5fcXVldWVSZWZyZXNoKHZvaWQgMCwhMCkpKSl9X3JlZ2lzdGVyQnVmZmVyQ2hhbmdlTGlzdGVuZXJzKCl7dGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uUmVuZGVyZWRWaWV3cG9ydENoYW5nZSgoKCk9PnRoaXMuX3F1ZXVlUmVmcmVzaCgpKSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLm9uQnVmZmVyQWN0aXZhdGUoKCgpPT57dGhpcy5fY2FudmFzLnN0eWxlLmRpc3BsYXk9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXI9PT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcnMuYWx0P1wibm9uZVwiOlwiYmxvY2tcIn0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9idWZmZXJTZXJ2aWNlLm9uU2Nyb2xsKCgoKT0+e3RoaXMuX2xhc3RLbm93bkJ1ZmZlckxlbmd0aCE9PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5ub3JtYWwubGluZXMubGVuZ3RoJiYodGhpcy5fcmVmcmVzaERyYXdIZWlnaHRDb25zdGFudHMoKSx0aGlzLl9yZWZyZXNoQ29sb3Jab25lUGFkZGluZygpKX0pKSl9X3JlZ2lzdGVyRGltZW5zaW9uQ2hhbmdlTGlzdGVuZXJzKCl7dGhpcy5yZWdpc3Rlcih0aGlzLl9yZW5kZXJTZXJ2aWNlLm9uUmVuZGVyKCgoKT0+e3RoaXMuX2NvbnRhaW5lckhlaWdodCYmdGhpcy5fY29udGFpbmVySGVpZ2h0PT09dGhpcy5fc2NyZWVuRWxlbWVudC5jbGllbnRIZWlnaHR8fCh0aGlzLl9xdWV1ZVJlZnJlc2goITApLHRoaXMuX2NvbnRhaW5lckhlaWdodD10aGlzLl9zY3JlZW5FbGVtZW50LmNsaWVudEhlaWdodCl9KSkpLHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZShcIm92ZXJ2aWV3UnVsZXJXaWR0aFwiLCgoKT0+dGhpcy5fcXVldWVSZWZyZXNoKCEwKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2NvcmVCcm93c2VyU2VydmljZS5vbkRwckNoYW5nZSgoKCk9PnRoaXMuX3F1ZXVlUmVmcmVzaCghMCkpKSksdGhpcy5fcXVldWVSZWZyZXNoKCEwKX1fcmVmcmVzaERyYXdDb25zdGFudHMoKXtjb25zdCBlPU1hdGguZmxvb3IodGhpcy5fY2FudmFzLndpZHRoLzMpLHQ9TWF0aC5jZWlsKHRoaXMuX2NhbnZhcy53aWR0aC8zKTtsLmZ1bGw9dGhpcy5fY2FudmFzLndpZHRoLGwubGVmdD1lLGwuY2VudGVyPXQsbC5yaWdodD1lLHRoaXMuX3JlZnJlc2hEcmF3SGVpZ2h0Q29uc3RhbnRzKCksZC5mdWxsPTAsZC5sZWZ0PTAsZC5jZW50ZXI9bC5sZWZ0LGQucmlnaHQ9bC5sZWZ0K2wuY2VudGVyfV9yZWZyZXNoRHJhd0hlaWdodENvbnN0YW50cygpe2MuZnVsbD1NYXRoLnJvdW5kKDIqdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLmRwcik7Y29uc3QgZT10aGlzLl9jYW52YXMuaGVpZ2h0L3RoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmxlbmd0aCx0PU1hdGgucm91bmQoTWF0aC5tYXgoTWF0aC5taW4oZSwxMiksNikqdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLmRwcik7Yy5sZWZ0PXQsYy5jZW50ZXI9dCxjLnJpZ2h0PXR9X3JlZnJlc2hDb2xvclpvbmVQYWRkaW5nKCl7dGhpcy5fY29sb3Jab25lU3RvcmUuc2V0UGFkZGluZyh7ZnVsbDpNYXRoLmZsb29yKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5hY3RpdmUubGluZXMubGVuZ3RoLyh0aGlzLl9jYW52YXMuaGVpZ2h0LTEpKmMuZnVsbCksbGVmdDpNYXRoLmZsb29yKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5hY3RpdmUubGluZXMubGVuZ3RoLyh0aGlzLl9jYW52YXMuaGVpZ2h0LTEpKmMubGVmdCksY2VudGVyOk1hdGguZmxvb3IodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFjdGl2ZS5saW5lcy5sZW5ndGgvKHRoaXMuX2NhbnZhcy5oZWlnaHQtMSkqYy5jZW50ZXIpLHJpZ2h0Ok1hdGguZmxvb3IodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFjdGl2ZS5saW5lcy5sZW5ndGgvKHRoaXMuX2NhbnZhcy5oZWlnaHQtMSkqYy5yaWdodCl9KSx0aGlzLl9sYXN0S25vd25CdWZmZXJMZW5ndGg9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLm5vcm1hbC5saW5lcy5sZW5ndGh9X3JlZnJlc2hDYW52YXNEaW1lbnNpb25zKCl7dGhpcy5fY2FudmFzLnN0eWxlLndpZHRoPWAke3RoaXMuX3dpZHRofXB4YCx0aGlzLl9jYW52YXMud2lkdGg9TWF0aC5yb3VuZCh0aGlzLl93aWR0aCp0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UuZHByKSx0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PWAke3RoaXMuX3NjcmVlbkVsZW1lbnQuY2xpZW50SGVpZ2h0fXB4YCx0aGlzLl9jYW52YXMuaGVpZ2h0PU1hdGgucm91bmQodGhpcy5fc2NyZWVuRWxlbWVudC5jbGllbnRIZWlnaHQqdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLmRwciksdGhpcy5fcmVmcmVzaERyYXdDb25zdGFudHMoKSx0aGlzLl9yZWZyZXNoQ29sb3Jab25lUGFkZGluZygpfV9yZWZyZXNoRGVjb3JhdGlvbnMoKXt0aGlzLl9zaG91bGRVcGRhdGVEaW1lbnNpb25zJiZ0aGlzLl9yZWZyZXNoQ2FudmFzRGltZW5zaW9ucygpLHRoaXMuX2N0eC5jbGVhclJlY3QoMCwwLHRoaXMuX2NhbnZhcy53aWR0aCx0aGlzLl9jYW52YXMuaGVpZ2h0KSx0aGlzLl9jb2xvclpvbmVTdG9yZS5jbGVhcigpO2Zvcihjb25zdCBlIG9mIHRoaXMuX2RlY29yYXRpb25TZXJ2aWNlLmRlY29yYXRpb25zKXRoaXMuX2NvbG9yWm9uZVN0b3JlLmFkZERlY29yYXRpb24oZSk7dGhpcy5fY3R4LmxpbmVXaWR0aD0xO2NvbnN0IGU9dGhpcy5fY29sb3Jab25lU3RvcmUuem9uZXM7Zm9yKGNvbnN0IHQgb2YgZSlcImZ1bGxcIiE9PXQucG9zaXRpb24mJnRoaXMuX3JlbmRlckNvbG9yWm9uZSh0KTtmb3IoY29uc3QgdCBvZiBlKVwiZnVsbFwiPT09dC5wb3NpdGlvbiYmdGhpcy5fcmVuZGVyQ29sb3Jab25lKHQpO3RoaXMuX3Nob3VsZFVwZGF0ZURpbWVuc2lvbnM9ITEsdGhpcy5fc2hvdWxkVXBkYXRlQW5jaG9yPSExfV9yZW5kZXJDb2xvclpvbmUoZSl7dGhpcy5fY3R4LmZpbGxTdHlsZT1lLmNvbG9yLHRoaXMuX2N0eC5maWxsUmVjdChkW2UucG9zaXRpb258fFwiZnVsbFwiXSxNYXRoLnJvdW5kKCh0aGlzLl9jYW52YXMuaGVpZ2h0LTEpKihlLnN0YXJ0QnVmZmVyTGluZS90aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcnMuYWN0aXZlLmxpbmVzLmxlbmd0aCktY1tlLnBvc2l0aW9ufHxcImZ1bGxcIl0vMiksbFtlLnBvc2l0aW9ufHxcImZ1bGxcIl0sTWF0aC5yb3VuZCgodGhpcy5fY2FudmFzLmhlaWdodC0xKSooKGUuZW5kQnVmZmVyTGluZS1lLnN0YXJ0QnVmZmVyTGluZSkvdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFjdGl2ZS5saW5lcy5sZW5ndGgpK2NbZS5wb3NpdGlvbnx8XCJmdWxsXCJdKSl9X3F1ZXVlUmVmcmVzaChlLHQpe3RoaXMuX3Nob3VsZFVwZGF0ZURpbWVuc2lvbnM9ZXx8dGhpcy5fc2hvdWxkVXBkYXRlRGltZW5zaW9ucyx0aGlzLl9zaG91bGRVcGRhdGVBbmNob3I9dHx8dGhpcy5fc2hvdWxkVXBkYXRlQW5jaG9yLHZvaWQgMD09PXRoaXMuX2FuaW1hdGlvbkZyYW1lJiYodGhpcy5fYW5pbWF0aW9uRnJhbWU9dGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT57dGhpcy5fcmVmcmVzaERlY29yYXRpb25zKCksdGhpcy5fYW5pbWF0aW9uRnJhbWU9dm9pZCAwfSkpKX19O3QuT3ZlcnZpZXdSdWxlclJlbmRlcmVyPV89cyhbcigyLGguSUJ1ZmZlclNlcnZpY2UpLHIoMyxoLklEZWNvcmF0aW9uU2VydmljZSkscig0LG8uSVJlbmRlclNlcnZpY2UpLHIoNSxoLklPcHRpb25zU2VydmljZSkscig2LG8uSUNvcmVCcm93c2VyU2VydmljZSldLF8pfSwyOTUwOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ29tcG9zaXRpb25IZWxwZXI9dm9pZCAwO2NvbnN0IG49aSg0NzI1KSxvPWkoMjU4NSksYT1pKDI1ODQpO2xldCBoPXQuQ29tcG9zaXRpb25IZWxwZXI9Y2xhc3N7Z2V0IGlzQ29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG9zaW5nfWNvbnN0cnVjdG9yKGUsdCxpLHMscixuKXt0aGlzLl90ZXh0YXJlYT1lLHRoaXMuX2NvbXBvc2l0aW9uVmlldz10LHRoaXMuX2J1ZmZlclNlcnZpY2U9aSx0aGlzLl9vcHRpb25zU2VydmljZT1zLHRoaXMuX2NvcmVTZXJ2aWNlPXIsdGhpcy5fcmVuZGVyU2VydmljZT1uLHRoaXMuX2lzQ29tcG9zaW5nPSExLHRoaXMuX2lzU2VuZGluZ0NvbXBvc2l0aW9uPSExLHRoaXMuX2NvbXBvc2l0aW9uUG9zaXRpb249e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFBbHJlYWR5U2VudD1cIlwifWNvbXBvc2l0aW9uc3RhcnQoKXt0aGlzLl9pc0NvbXBvc2luZz0hMCx0aGlzLl9jb21wb3NpdGlvblBvc2l0aW9uLnN0YXJ0PXRoaXMuX3RleHRhcmVhLnZhbHVlLmxlbmd0aCx0aGlzLl9jb21wb3NpdGlvblZpZXcudGV4dENvbnRlbnQ9XCJcIix0aGlzLl9kYXRhQWxyZWFkeVNlbnQ9XCJcIix0aGlzLl9jb21wb3NpdGlvblZpZXcuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKX1jb21wb3NpdGlvbnVwZGF0ZShlKXt0aGlzLl9jb21wb3NpdGlvblZpZXcudGV4dENvbnRlbnQ9ZS5kYXRhLHRoaXMudXBkYXRlQ29tcG9zaXRpb25FbGVtZW50cygpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5fY29tcG9zaXRpb25Qb3NpdGlvbi5lbmQ9dGhpcy5fdGV4dGFyZWEudmFsdWUubGVuZ3RofSksMCl9Y29tcG9zaXRpb25lbmQoKXt0aGlzLl9maW5hbGl6ZUNvbXBvc2l0aW9uKCEwKX1rZXlkb3duKGUpe2lmKHRoaXMuX2lzQ29tcG9zaW5nfHx0aGlzLl9pc1NlbmRpbmdDb21wb3NpdGlvbil7aWYoMjI5PT09ZS5rZXlDb2RlKXJldHVybiExO2lmKDE2PT09ZS5rZXlDb2RlfHwxNz09PWUua2V5Q29kZXx8MTg9PT1lLmtleUNvZGUpcmV0dXJuITE7dGhpcy5fZmluYWxpemVDb21wb3NpdGlvbighMSl9cmV0dXJuIDIyOSE9PWUua2V5Q29kZXx8KHRoaXMuX2hhbmRsZUFueVRleHRhcmVhQ2hhbmdlcygpLCExKX1fZmluYWxpemVDb21wb3NpdGlvbihlKXtpZih0aGlzLl9jb21wb3NpdGlvblZpZXcuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSx0aGlzLl9pc0NvbXBvc2luZz0hMSxlKXtjb25zdCBlPXtzdGFydDp0aGlzLl9jb21wb3NpdGlvblBvc2l0aW9uLnN0YXJ0LGVuZDp0aGlzLl9jb21wb3NpdGlvblBvc2l0aW9uLmVuZH07dGhpcy5faXNTZW5kaW5nQ29tcG9zaXRpb249ITAsc2V0VGltZW91dCgoKCk9PntpZih0aGlzLl9pc1NlbmRpbmdDb21wb3NpdGlvbil7bGV0IHQ7dGhpcy5faXNTZW5kaW5nQ29tcG9zaXRpb249ITEsZS5zdGFydCs9dGhpcy5fZGF0YUFscmVhZHlTZW50Lmxlbmd0aCx0PXRoaXMuX2lzQ29tcG9zaW5nP3RoaXMuX3RleHRhcmVhLnZhbHVlLnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kKTp0aGlzLl90ZXh0YXJlYS52YWx1ZS5zdWJzdHJpbmcoZS5zdGFydCksdC5sZW5ndGg+MCYmdGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudCh0LCEwKX19KSwwKX1lbHNle3RoaXMuX2lzU2VuZGluZ0NvbXBvc2l0aW9uPSExO2NvbnN0IGU9dGhpcy5fdGV4dGFyZWEudmFsdWUuc3Vic3RyaW5nKHRoaXMuX2NvbXBvc2l0aW9uUG9zaXRpb24uc3RhcnQsdGhpcy5fY29tcG9zaXRpb25Qb3NpdGlvbi5lbmQpO3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoZSwhMCl9fV9oYW5kbGVBbnlUZXh0YXJlYUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuX3RleHRhcmVhLnZhbHVlO3NldFRpbWVvdXQoKCgpPT57aWYoIXRoaXMuX2lzQ29tcG9zaW5nKXtjb25zdCB0PXRoaXMuX3RleHRhcmVhLnZhbHVlLGk9dC5yZXBsYWNlKGUsXCJcIik7dGhpcy5fZGF0YUFscmVhZHlTZW50PWksdC5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChpLCEwKTp0Lmxlbmd0aDxlLmxlbmd0aD90aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGAke2EuQzAuREVMfWAsITApOnQubGVuZ3RoPT09ZS5sZW5ndGgmJnQhPT1lJiZ0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KHQsITApfX0pLDApfXVwZGF0ZUNvbXBvc2l0aW9uRWxlbWVudHMoZSl7aWYodGhpcy5faXNDb21wb3Npbmcpe2lmKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmlzQ3Vyc29ySW5WaWV3cG9ydCl7Y29uc3QgZT1NYXRoLm1pbih0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci54LHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scy0xKSx0PXRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHQsaT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55KnRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHQscz1lKnRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aDt0aGlzLl9jb21wb3NpdGlvblZpZXcuc3R5bGUubGVmdD1zK1wicHhcIix0aGlzLl9jb21wb3NpdGlvblZpZXcuc3R5bGUudG9wPWkrXCJweFwiLHRoaXMuX2NvbXBvc2l0aW9uVmlldy5zdHlsZS5oZWlnaHQ9dCtcInB4XCIsdGhpcy5fY29tcG9zaXRpb25WaWV3LnN0eWxlLmxpbmVIZWlnaHQ9dCtcInB4XCIsdGhpcy5fY29tcG9zaXRpb25WaWV3LnN0eWxlLmZvbnRGYW1pbHk9dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250RmFtaWx5LHRoaXMuX2NvbXBvc2l0aW9uVmlldy5zdHlsZS5mb250U2l6ZT10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZvbnRTaXplK1wicHhcIjtjb25zdCByPXRoaXMuX2NvbXBvc2l0aW9uVmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl90ZXh0YXJlYS5zdHlsZS5sZWZ0PXMrXCJweFwiLHRoaXMuX3RleHRhcmVhLnN0eWxlLnRvcD1pK1wicHhcIix0aGlzLl90ZXh0YXJlYS5zdHlsZS53aWR0aD1NYXRoLm1heChyLndpZHRoLDEpK1wicHhcIix0aGlzLl90ZXh0YXJlYS5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoci5oZWlnaHQsMSkrXCJweFwiLHRoaXMuX3RleHRhcmVhLnN0eWxlLmxpbmVIZWlnaHQ9ci5oZWlnaHQrXCJweFwifWV8fHNldFRpbWVvdXQoKCgpPT50aGlzLnVwZGF0ZUNvbXBvc2l0aW9uRWxlbWVudHMoITApKSwwKX19fTt0LkNvbXBvc2l0aW9uSGVscGVyPWg9cyhbcigyLG8uSUJ1ZmZlclNlcnZpY2UpLHIoMyxvLklPcHRpb25zU2VydmljZSkscig0LG8uSUNvcmVTZXJ2aWNlKSxyKDUsbi5JUmVuZGVyU2VydmljZSldLGgpfSw5ODA2OihlLHQpPT57ZnVuY3Rpb24gaShlLHQsaSl7Y29uc3Qgcz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9ZS5nZXRDb21wdXRlZFN0eWxlKGkpLG49cGFyc2VJbnQoci5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1sZWZ0XCIpKSxvPXBhcnNlSW50KHIuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctdG9wXCIpKTtyZXR1cm5bdC5jbGllbnRYLXMubGVmdC1uLHQuY2xpZW50WS1zLnRvcC1vXX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldENvb3Jkcz10LmdldENvb3Jkc1JlbGF0aXZlVG9FbGVtZW50PXZvaWQgMCx0LmdldENvb3Jkc1JlbGF0aXZlVG9FbGVtZW50PWksdC5nZXRDb29yZHM9ZnVuY3Rpb24oZSx0LHMscixuLG8sYSxoLGMpe2lmKCFvKXJldHVybjtjb25zdCBsPWkoZSx0LHMpO3JldHVybiBsPyhsWzBdPU1hdGguY2VpbCgobFswXSsoYz9hLzI6MCkpL2EpLGxbMV09TWF0aC5jZWlsKGxbMV0vaCksbFswXT1NYXRoLm1pbihNYXRoLm1heChsWzBdLDEpLHIrKGM/MTowKSksbFsxXT1NYXRoLm1pbihNYXRoLm1heChsWzFdLDEpLG4pLGwpOnZvaWQgMH19LDk1MDQ6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQubW92ZVRvQ2VsbFNlcXVlbmNlPXZvaWQgMDtjb25zdCBzPWkoMjU4NCk7ZnVuY3Rpb24gcihlLHQsaSxzKXtjb25zdCByPWUtbihlLGkpLGE9dC1uKHQsaSksbD1NYXRoLmFicyhyLWEpLWZ1bmN0aW9uKGUsdCxpKXtsZXQgcz0wO2NvbnN0IHI9ZS1uKGUsaSksYT10LW4odCxpKTtmb3IobGV0IG49MDtuPE1hdGguYWJzKHItYSk7bisrKXtjb25zdCBhPVwiQVwiPT09byhlLHQpPy0xOjEsaD1pLmJ1ZmZlci5saW5lcy5nZXQocithKm4pO2g/LmlzV3JhcHBlZCYmcysrfXJldHVybiBzfShlLHQsaSk7cmV0dXJuIGMobCxoKG8oZSx0KSxzKSl9ZnVuY3Rpb24gbihlLHQpe2xldCBpPTAscz10LmJ1ZmZlci5saW5lcy5nZXQoZSkscj1zPy5pc1dyYXBwZWQ7Zm9yKDtyJiZlPj0wJiZlPHQucm93czspaSsrLHM9dC5idWZmZXIubGluZXMuZ2V0KC0tZSkscj1zPy5pc1dyYXBwZWQ7cmV0dXJuIGl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlPnQ/XCJBXCI6XCJCXCJ9ZnVuY3Rpb24gYShlLHQsaSxzLHIsbil7bGV0IG89ZSxhPXQsaD1cIlwiO2Zvcig7byE9PWl8fGEhPT1zOylvKz1yPzE6LTEsciYmbz5uLmNvbHMtMT8oaCs9bi5idWZmZXIudHJhbnNsYXRlQnVmZmVyTGluZVRvU3RyaW5nKGEsITEsZSxvKSxvPTAsZT0wLGErKyk6IXImJm88MCYmKGgrPW4uYnVmZmVyLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhhLCExLDAsZSsxKSxvPW4uY29scy0xLGU9byxhLS0pO3JldHVybiBoK24uYnVmZmVyLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhhLCExLGUsbyl9ZnVuY3Rpb24gaChlLHQpe2NvbnN0IGk9dD9cIk9cIjpcIltcIjtyZXR1cm4gcy5DMC5FU0MraStlfWZ1bmN0aW9uIGMoZSx0KXtlPU1hdGguZmxvb3IoZSk7bGV0IGk9XCJcIjtmb3IobGV0IHM9MDtzPGU7cysrKWkrPXQ7cmV0dXJuIGl9dC5tb3ZlVG9DZWxsU2VxdWVuY2U9ZnVuY3Rpb24oZSx0LGkscyl7Y29uc3Qgbz1pLmJ1ZmZlci54LGw9aS5idWZmZXIueTtpZighaS5idWZmZXIuaGFzU2Nyb2xsYmFjaylyZXR1cm4gZnVuY3Rpb24oZSx0LGkscyxvLGwpe3JldHVybiAwPT09cih0LHMsbyxsKS5sZW5ndGg/XCJcIjpjKGEoZSx0LGUsdC1uKHQsbyksITEsbykubGVuZ3RoLGgoXCJEXCIsbCkpfShvLGwsMCx0LGkscykrcihsLHQsaSxzKStmdW5jdGlvbihlLHQsaSxzLG8sbCl7bGV0IGQ7ZD1yKHQscyxvLGwpLmxlbmd0aD4wP3MtbihzLG8pOnQ7Y29uc3QgXz1zLHU9ZnVuY3Rpb24oZSx0LGkscyxvLGEpe2xldCBoO3JldHVybiBoPXIoaSxzLG8sYSkubGVuZ3RoPjA/cy1uKHMsbyk6dCxlPGkmJmg8PXN8fGU+PWkmJmg8cz9cIkNcIjpcIkRcIn0oZSx0LGkscyxvLGwpO3JldHVybiBjKGEoZSxkLGksXyxcIkNcIj09PXUsbykubGVuZ3RoLGgodSxsKSl9KG8sbCxlLHQsaSxzKTtsZXQgZDtpZihsPT09dClyZXR1cm4gZD1vPmU/XCJEXCI6XCJDXCIsYyhNYXRoLmFicyhvLWUpLGgoZCxzKSk7ZD1sPnQ/XCJEXCI6XCJDXCI7Y29uc3QgXz1NYXRoLmFicyhsLXQpO3JldHVybiBjKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuY29scy1lfShsPnQ/ZTpvLGkpKyhfLTEpKmkuY29scysxKygobD50P286ZSktMSksaChkLHMpKX19LDEyOTY6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LGkscyl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoLG89bjwzP3Q6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSk6cztpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlvPVJlZmxlY3QuZGVjb3JhdGUoZSx0LGkscyk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkocj1lW2FdKSYmKG89KG48Mz9yKG8pOm4+Mz9yKHQsaSxvKTpyKHQsaSkpfHxvKTtyZXR1cm4gbj4zJiZvJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG8pLG99LHI9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3QoaSxzLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Eb21SZW5kZXJlcj12b2lkIDA7Y29uc3Qgbj1pKDM3ODcpLG89aSgyNTUwKSxhPWkoMjIyMyksaD1pKDYxNzEpLGM9aSg2MDUyKSxsPWkoNDcyNSksZD1pKDgwNTUpLF89aSg4NDYwKSx1PWkoODQ0KSxmPWkoMjU4NSksdj1cInh0ZXJtLWRvbS1yZW5kZXJlci1vd25lci1cIixwPVwieHRlcm0tcm93c1wiLGc9XCJ4dGVybS1mZy1cIixtPVwieHRlcm0tYmctXCIsUz1cInh0ZXJtLWZvY3VzXCIsQz1cInh0ZXJtLXNlbGVjdGlvblwiO2xldCBiPTEsdz10LkRvbVJlbmRlcmVyPWNsYXNzIGV4dGVuZHMgdS5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGUsdCxpLHMscixhLGwsZCxmLGcsbSxTLHcpe3N1cGVyKCksdGhpcy5fdGVybWluYWw9ZSx0aGlzLl9kb2N1bWVudD10LHRoaXMuX2VsZW1lbnQ9aSx0aGlzLl9zY3JlZW5FbGVtZW50PXMsdGhpcy5fdmlld3BvcnRFbGVtZW50PXIsdGhpcy5faGVscGVyQ29udGFpbmVyPWEsdGhpcy5fbGlua2lmaWVyMj1sLHRoaXMuX2NoYXJTaXplU2VydmljZT1mLHRoaXMuX29wdGlvbnNTZXJ2aWNlPWcsdGhpcy5fYnVmZmVyU2VydmljZT1tLHRoaXMuX2NvcmVCcm93c2VyU2VydmljZT1TLHRoaXMuX3RoZW1lU2VydmljZT13LHRoaXMuX3Rlcm1pbmFsQ2xhc3M9YisrLHRoaXMuX3Jvd0VsZW1lbnRzPVtdLHRoaXMuX3NlbGVjdGlvblJlbmRlck1vZGVsPSgwLGMuY3JlYXRlU2VsZWN0aW9uUmVuZGVyTW9kZWwpKCksdGhpcy5vblJlcXVlc3RSZWRyYXc9dGhpcy5yZWdpc3RlcihuZXcgXy5FdmVudEVtaXR0ZXIpLmV2ZW50LHRoaXMuX3Jvd0NvbnRhaW5lcj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuX3Jvd0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHApLHRoaXMuX3Jvd0NvbnRhaW5lci5zdHlsZS5saW5lSGVpZ2h0PVwibm9ybWFsXCIsdGhpcy5fcm93Q29udGFpbmVyLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHRoaXMuX3JlZnJlc2hSb3dFbGVtZW50cyh0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzKSx0aGlzLl9zZWxlY3Rpb25Db250YWluZXI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9zZWxlY3Rpb25Db250YWluZXIuY2xhc3NMaXN0LmFkZChDKSx0aGlzLl9zZWxlY3Rpb25Db250YWluZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksdGhpcy5kaW1lbnNpb25zPSgwLGguY3JlYXRlUmVuZGVyRGltZW5zaW9ucykoKSx0aGlzLl91cGRhdGVEaW1lbnNpb25zKCksdGhpcy5yZWdpc3Rlcih0aGlzLl9vcHRpb25zU2VydmljZS5vbk9wdGlvbkNoYW5nZSgoKCk9PnRoaXMuX2hhbmRsZU9wdGlvbnNDaGFuZ2VkKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl90aGVtZVNlcnZpY2Uub25DaGFuZ2VDb2xvcnMoKGU9PnRoaXMuX2luamVjdENzcyhlKSkpKSx0aGlzLl9pbmplY3RDc3ModGhpcy5fdGhlbWVTZXJ2aWNlLmNvbG9ycyksdGhpcy5fcm93RmFjdG9yeT1kLmNyZWF0ZUluc3RhbmNlKG4uRG9tUmVuZGVyZXJSb3dGYWN0b3J5LGRvY3VtZW50KSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQodit0aGlzLl90ZXJtaW5hbENsYXNzKSx0aGlzLl9zY3JlZW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3Jvd0NvbnRhaW5lciksdGhpcy5fc2NyZWVuRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9zZWxlY3Rpb25Db250YWluZXIpLHRoaXMucmVnaXN0ZXIodGhpcy5fbGlua2lmaWVyMi5vblNob3dMaW5rVW5kZXJsaW5lKChlPT50aGlzLl9oYW5kbGVMaW5rSG92ZXIoZSkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9saW5raWZpZXIyLm9uSGlkZUxpbmtVbmRlcmxpbmUoKGU9PnRoaXMuX2hhbmRsZUxpbmtMZWF2ZShlKSkpKSx0aGlzLnJlZ2lzdGVyKCgwLHUudG9EaXNwb3NhYmxlKSgoKCk9Pnt0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodit0aGlzLl90ZXJtaW5hbENsYXNzKSx0aGlzLl9yb3dDb250YWluZXIucmVtb3ZlKCksdGhpcy5fc2VsZWN0aW9uQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX3dpZHRoQ2FjaGUuZGlzcG9zZSgpLHRoaXMuX3RoZW1lU3R5bGVFbGVtZW50LnJlbW92ZSgpLHRoaXMuX2RpbWVuc2lvbnNTdHlsZUVsZW1lbnQucmVtb3ZlKCl9KSkpLHRoaXMuX3dpZHRoQ2FjaGU9bmV3IG8uV2lkdGhDYWNoZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9oZWxwZXJDb250YWluZXIpLHRoaXMuX3dpZHRoQ2FjaGUuc2V0Rm9udCh0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZvbnRGYW1pbHksdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250U2l6ZSx0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZvbnRXZWlnaHQsdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250V2VpZ2h0Qm9sZCksdGhpcy5fc2V0RGVmYXVsdFNwYWNpbmcoKX1fdXBkYXRlRGltZW5zaW9ucygpe2NvbnN0IGU9dGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLmRwcjt0aGlzLmRpbWVuc2lvbnMuZGV2aWNlLmNoYXIud2lkdGg9dGhpcy5fY2hhclNpemVTZXJ2aWNlLndpZHRoKmUsdGhpcy5kaW1lbnNpb25zLmRldmljZS5jaGFyLmhlaWdodD1NYXRoLmNlaWwodGhpcy5fY2hhclNpemVTZXJ2aWNlLmhlaWdodCplKSx0aGlzLmRpbWVuc2lvbnMuZGV2aWNlLmNlbGwud2lkdGg9dGhpcy5kaW1lbnNpb25zLmRldmljZS5jaGFyLndpZHRoK01hdGgucm91bmQodGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5sZXR0ZXJTcGFjaW5nKSx0aGlzLmRpbWVuc2lvbnMuZGV2aWNlLmNlbGwuaGVpZ2h0PU1hdGguZmxvb3IodGhpcy5kaW1lbnNpb25zLmRldmljZS5jaGFyLmhlaWdodCp0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmxpbmVIZWlnaHQpLHRoaXMuZGltZW5zaW9ucy5kZXZpY2UuY2hhci5sZWZ0PTAsdGhpcy5kaW1lbnNpb25zLmRldmljZS5jaGFyLnRvcD0wLHRoaXMuZGltZW5zaW9ucy5kZXZpY2UuY2FudmFzLndpZHRoPXRoaXMuZGltZW5zaW9ucy5kZXZpY2UuY2VsbC53aWR0aCp0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5kaW1lbnNpb25zLmRldmljZS5jYW52YXMuaGVpZ2h0PXRoaXMuZGltZW5zaW9ucy5kZXZpY2UuY2VsbC5oZWlnaHQqdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLHRoaXMuZGltZW5zaW9ucy5jc3MuY2FudmFzLndpZHRoPU1hdGgucm91bmQodGhpcy5kaW1lbnNpb25zLmRldmljZS5jYW52YXMud2lkdGgvZSksdGhpcy5kaW1lbnNpb25zLmNzcy5jYW52YXMuaGVpZ2h0PU1hdGgucm91bmQodGhpcy5kaW1lbnNpb25zLmRldmljZS5jYW52YXMuaGVpZ2h0L2UpLHRoaXMuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aD10aGlzLmRpbWVuc2lvbnMuY3NzLmNhbnZhcy53aWR0aC90aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5kaW1lbnNpb25zLmNzcy5jZWxsLmhlaWdodD10aGlzLmRpbWVuc2lvbnMuY3NzLmNhbnZhcy5oZWlnaHQvdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzO2Zvcihjb25zdCBlIG9mIHRoaXMuX3Jvd0VsZW1lbnRzKWUuc3R5bGUud2lkdGg9YCR7dGhpcy5kaW1lbnNpb25zLmNzcy5jYW52YXMud2lkdGh9cHhgLGUuc3R5bGUuaGVpZ2h0PWAke3RoaXMuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHR9cHhgLGUuc3R5bGUubGluZUhlaWdodD1gJHt0aGlzLmRpbWVuc2lvbnMuY3NzLmNlbGwuaGVpZ2h0fXB4YCxlLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCI7dGhpcy5fZGltZW5zaW9uc1N0eWxlRWxlbWVudHx8KHRoaXMuX2RpbWVuc2lvbnNTdHlsZUVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLHRoaXMuX3NjcmVlbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZGltZW5zaW9uc1N0eWxlRWxlbWVudCkpO2NvbnN0IHQ9YCR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0gLiR7cH0gc3BhbiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wO31gO3RoaXMuX2RpbWVuc2lvbnNTdHlsZUVsZW1lbnQudGV4dENvbnRlbnQ9dCx0aGlzLl9zZWxlY3Rpb25Db250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuX3ZpZXdwb3J0RWxlbWVudC5zdHlsZS5oZWlnaHQsdGhpcy5fc2NyZWVuRWxlbWVudC5zdHlsZS53aWR0aD1gJHt0aGlzLmRpbWVuc2lvbnMuY3NzLmNhbnZhcy53aWR0aH1weGAsdGhpcy5fc2NyZWVuRWxlbWVudC5zdHlsZS5oZWlnaHQ9YCR7dGhpcy5kaW1lbnNpb25zLmNzcy5jYW52YXMuaGVpZ2h0fXB4YH1faW5qZWN0Q3NzKGUpe3RoaXMuX3RoZW1lU3R5bGVFbGVtZW50fHwodGhpcy5fdGhlbWVTdHlsZUVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLHRoaXMuX3NjcmVlbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fdGhlbWVTdHlsZUVsZW1lbnQpKTtsZXQgdD1gJHt0aGlzLl90ZXJtaW5hbFNlbGVjdG9yfSAuJHtwfSB7IGNvbG9yOiAke2UuZm9yZWdyb3VuZC5jc3N9OyBmb250LWZhbWlseTogJHt0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZvbnRGYW1pbHl9OyBmb250LXNpemU6ICR7dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250U2l6ZX1weDsgZm9udC1rZXJuaW5nOiBub25lOyB3aGl0ZS1zcGFjZTogcHJlfWA7dCs9YCR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0gLiR7cH0gLnh0ZXJtLWRpbSB7IGNvbG9yOiAke2QuY29sb3IubXVsdGlwbHlPcGFjaXR5KGUuZm9yZWdyb3VuZCwuNSkuY3NzfTt9YCx0Kz1gJHt0aGlzLl90ZXJtaW5hbFNlbGVjdG9yfSBzcGFuOm5vdCgueHRlcm0tYm9sZCkgeyBmb250LXdlaWdodDogJHt0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZvbnRXZWlnaHR9O30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IHNwYW4ueHRlcm0tYm9sZCB7IGZvbnQtd2VpZ2h0OiAke3RoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZm9udFdlaWdodEJvbGR9O30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IHNwYW4ueHRlcm0taXRhbGljIHsgZm9udC1zdHlsZTogaXRhbGljO31gO2NvbnN0IGk9YGJsaW5rX3VuZGVybGluZV8ke3RoaXMuX3Rlcm1pbmFsQ2xhc3N9YCxzPWBibGlua19iYXJfJHt0aGlzLl90ZXJtaW5hbENsYXNzfWAscj1gYmxpbmtfYmxvY2tfJHt0aGlzLl90ZXJtaW5hbENsYXNzfWA7dCs9YEBrZXlmcmFtZXMgJHtpfSB7IDUwJSB7ICBib3JkZXItYm90dG9tLXN0eWxlOiBoaWRkZW47IH19YCx0Kz1gQGtleWZyYW1lcyAke3N9IHsgNTAlIHsgIGJveC1zaGFkb3c6IG5vbmU7IH19YCx0Kz1gQGtleWZyYW1lcyAke3J9IHsgMCUgeyAgYmFja2dyb3VuZC1jb2xvcjogJHtlLmN1cnNvci5jc3N9OyAgY29sb3I6ICR7ZS5jdXJzb3JBY2NlbnQuY3NzfTsgfSA1MCUgeyAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsgIGNvbG9yOiAke2UuY3Vyc29yLmNzc307IH19YCx0Kz1gJHt0aGlzLl90ZXJtaW5hbFNlbGVjdG9yfSAuJHtwfS4ke1N9IC54dGVybS1jdXJzb3IueHRlcm0tY3Vyc29yLWJsaW5rLnh0ZXJtLWN1cnNvci11bmRlcmxpbmUgeyBhbmltYXRpb246ICR7aX0gMXMgc3RlcC1lbmQgaW5maW5pdGU7fSR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0gLiR7cH0uJHtTfSAueHRlcm0tY3Vyc29yLnh0ZXJtLWN1cnNvci1ibGluay54dGVybS1jdXJzb3ItYmFyIHsgYW5pbWF0aW9uOiAke3N9IDFzIHN0ZXAtZW5kIGluZmluaXRlO30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke3B9LiR7U30gLnh0ZXJtLWN1cnNvci54dGVybS1jdXJzb3ItYmxpbmsueHRlcm0tY3Vyc29yLWJsb2NrIHsgYW5pbWF0aW9uOiAke3J9IDFzIHN0ZXAtZW5kIGluZmluaXRlO30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke3B9IC54dGVybS1jdXJzb3IueHRlcm0tY3Vyc29yLWJsb2NrIHsgYmFja2dyb3VuZC1jb2xvcjogJHtlLmN1cnNvci5jc3N9OyBjb2xvcjogJHtlLmN1cnNvckFjY2VudC5jc3N9O30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke3B9IC54dGVybS1jdXJzb3IueHRlcm0tY3Vyc29yLWJsb2NrOm5vdCgueHRlcm0tY3Vyc29yLWJsaW5rKSB7IGJhY2tncm91bmQtY29sb3I6ICR7ZS5jdXJzb3IuY3NzfSAhaW1wb3J0YW50OyBjb2xvcjogJHtlLmN1cnNvckFjY2VudC5jc3N9ICFpbXBvcnRhbnQ7fSR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0gLiR7cH0gLnh0ZXJtLWN1cnNvci54dGVybS1jdXJzb3Itb3V0bGluZSB7IG91dGxpbmU6IDFweCBzb2xpZCAke2UuY3Vyc29yLmNzc307IG91dGxpbmUtb2Zmc2V0OiAtMXB4O30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke3B9IC54dGVybS1jdXJzb3IueHRlcm0tY3Vyc29yLWJhciB7IGJveC1zaGFkb3c6ICR7dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5jdXJzb3JXaWR0aH1weCAwIDAgJHtlLmN1cnNvci5jc3N9IGluc2V0O30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke3B9IC54dGVybS1jdXJzb3IueHRlcm0tY3Vyc29yLXVuZGVybGluZSB7IGJvcmRlci1ib3R0b206IDFweCAke2UuY3Vyc29yLmNzc307IGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOyBoZWlnaHQ6IGNhbGMoMTAwJSAtIDFweCk7fWAsdCs9YCR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0gLiR7Q30geyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgei1pbmRleDogMTsgcG9pbnRlci1ldmVudHM6IG5vbmU7fSR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0uZm9jdXMgLiR7Q30gZGl2IHsgcG9zaXRpb246IGFic29sdXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAke2Uuc2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZS5jc3N9O30ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke0N9IGRpdiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYmFja2dyb3VuZC1jb2xvcjogJHtlLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZE9wYXF1ZS5jc3N9O31gO2Zvcihjb25zdFtpLHNdb2YgZS5hbnNpLmVudHJpZXMoKSl0Kz1gJHt0aGlzLl90ZXJtaW5hbFNlbGVjdG9yfSAuJHtnfSR7aX0geyBjb2xvcjogJHtzLmNzc307IH0ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke2d9JHtpfS54dGVybS1kaW0geyBjb2xvcjogJHtkLmNvbG9yLm11bHRpcGx5T3BhY2l0eShzLC41KS5jc3N9OyB9JHt0aGlzLl90ZXJtaW5hbFNlbGVjdG9yfSAuJHttfSR7aX0geyBiYWNrZ3JvdW5kLWNvbG9yOiAke3MuY3NzfTsgfWA7dCs9YCR7dGhpcy5fdGVybWluYWxTZWxlY3Rvcn0gLiR7Z30ke2EuSU5WRVJURURfREVGQVVMVF9DT0xPUn0geyBjb2xvcjogJHtkLmNvbG9yLm9wYXF1ZShlLmJhY2tncm91bmQpLmNzc307IH0ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke2d9JHthLklOVkVSVEVEX0RFRkFVTFRfQ09MT1J9Lnh0ZXJtLWRpbSB7IGNvbG9yOiAke2QuY29sb3IubXVsdGlwbHlPcGFjaXR5KGQuY29sb3Iub3BhcXVlKGUuYmFja2dyb3VuZCksLjUpLmNzc307IH0ke3RoaXMuX3Rlcm1pbmFsU2VsZWN0b3J9IC4ke219JHthLklOVkVSVEVEX0RFRkFVTFRfQ09MT1J9IHsgYmFja2dyb3VuZC1jb2xvcjogJHtlLmZvcmVncm91bmQuY3NzfTsgfWAsdGhpcy5fdGhlbWVTdHlsZUVsZW1lbnQudGV4dENvbnRlbnQ9dH1fc2V0RGVmYXVsdFNwYWNpbmcoKXtjb25zdCBlPXRoaXMuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aC10aGlzLl93aWR0aENhY2hlLmdldChcIldcIiwhMSwhMSk7dGhpcy5fcm93Q29udGFpbmVyLnN0eWxlLmxldHRlclNwYWNpbmc9YCR7ZX1weGAsdGhpcy5fcm93RmFjdG9yeS5kZWZhdWx0U3BhY2luZz1lfWhhbmRsZURldmljZVBpeGVsUmF0aW9DaGFuZ2UoKXt0aGlzLl91cGRhdGVEaW1lbnNpb25zKCksdGhpcy5fd2lkdGhDYWNoZS5jbGVhcigpLHRoaXMuX3NldERlZmF1bHRTcGFjaW5nKCl9X3JlZnJlc2hSb3dFbGVtZW50cyhlLHQpe2ZvcihsZXQgZT10aGlzLl9yb3dFbGVtZW50cy5sZW5ndGg7ZTw9dDtlKyspe2NvbnN0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0aGlzLl9yb3dDb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5fcm93RWxlbWVudHMucHVzaChlKX1mb3IoO3RoaXMuX3Jvd0VsZW1lbnRzLmxlbmd0aD50Oyl0aGlzLl9yb3dDb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fcm93RWxlbWVudHMucG9wKCkpfWhhbmRsZVJlc2l6ZShlLHQpe3RoaXMuX3JlZnJlc2hSb3dFbGVtZW50cyhlLHQpLHRoaXMuX3VwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZWQodGhpcy5fc2VsZWN0aW9uUmVuZGVyTW9kZWwuc2VsZWN0aW9uU3RhcnQsdGhpcy5fc2VsZWN0aW9uUmVuZGVyTW9kZWwuc2VsZWN0aW9uRW5kLHRoaXMuX3NlbGVjdGlvblJlbmRlck1vZGVsLmNvbHVtblNlbGVjdE1vZGUpfWhhbmRsZUNoYXJTaXplQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLl93aWR0aENhY2hlLmNsZWFyKCksdGhpcy5fc2V0RGVmYXVsdFNwYWNpbmcoKX1oYW5kbGVCbHVyKCl7dGhpcy5fcm93Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoUyksdGhpcy5yZW5kZXJSb3dzKDAsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpfWhhbmRsZUZvY3VzKCl7dGhpcy5fcm93Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoUyksdGhpcy5yZW5kZXJSb3dzKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnksdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueSl9aGFuZGxlU2VsZWN0aW9uQ2hhbmdlZChlLHQsaSl7aWYodGhpcy5fc2VsZWN0aW9uQ29udGFpbmVyLnJlcGxhY2VDaGlsZHJlbigpLHRoaXMuX3Jvd0ZhY3RvcnkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlZChlLHQsaSksdGhpcy5yZW5kZXJSb3dzKDAsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpLCFlfHwhdClyZXR1cm47dGhpcy5fc2VsZWN0aW9uUmVuZGVyTW9kZWwudXBkYXRlKHRoaXMuX3Rlcm1pbmFsLGUsdCxpKTtjb25zdCBzPXRoaXMuX3NlbGVjdGlvblJlbmRlck1vZGVsLnZpZXdwb3J0U3RhcnRSb3cscj10aGlzLl9zZWxlY3Rpb25SZW5kZXJNb2RlbC52aWV3cG9ydEVuZFJvdyxuPXRoaXMuX3NlbGVjdGlvblJlbmRlck1vZGVsLnZpZXdwb3J0Q2FwcGVkU3RhcnRSb3csbz10aGlzLl9zZWxlY3Rpb25SZW5kZXJNb2RlbC52aWV3cG9ydENhcHBlZEVuZFJvdztpZihuPj10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3N8fG88MClyZXR1cm47Y29uc3QgYT10aGlzLl9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoaSl7Y29uc3QgaT1lWzBdPnRbMF07YS5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVTZWxlY3Rpb25FbGVtZW50KG4saT90WzBdOmVbMF0saT9lWzBdOnRbMF0sby1uKzEpKX1lbHNle2NvbnN0IGk9cz09PW4/ZVswXTowLGg9bj09PXI/dFswXTp0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM7YS5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVTZWxlY3Rpb25FbGVtZW50KG4saSxoKSk7Y29uc3QgYz1vLW4tMTtpZihhLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNlbGVjdGlvbkVsZW1lbnQobisxLDAsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLGMpKSxuIT09byl7Y29uc3QgZT1yPT09bz90WzBdOnRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczthLmFwcGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNlbGVjdGlvbkVsZW1lbnQobywwLGUpKX19dGhpcy5fc2VsZWN0aW9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGEpfV9jcmVhdGVTZWxlY3Rpb25FbGVtZW50KGUsdCxpLHM9MSl7Y29uc3Qgcj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG49dCp0aGlzLmRpbWVuc2lvbnMuY3NzLmNlbGwud2lkdGg7bGV0IG89dGhpcy5kaW1lbnNpb25zLmNzcy5jZWxsLndpZHRoKihpLXQpO3JldHVybiBuK28+dGhpcy5kaW1lbnNpb25zLmNzcy5jYW52YXMud2lkdGgmJihvPXRoaXMuZGltZW5zaW9ucy5jc3MuY2FudmFzLndpZHRoLW4pLHIuc3R5bGUuaGVpZ2h0PXMqdGhpcy5kaW1lbnNpb25zLmNzcy5jZWxsLmhlaWdodCtcInB4XCIsci5zdHlsZS50b3A9ZSp0aGlzLmRpbWVuc2lvbnMuY3NzLmNlbGwuaGVpZ2h0K1wicHhcIixyLnN0eWxlLmxlZnQ9YCR7bn1weGAsci5zdHlsZS53aWR0aD1gJHtvfXB4YCxyfWhhbmRsZUN1cnNvck1vdmUoKXt9X2hhbmRsZU9wdGlvbnNDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlRGltZW5zaW9ucygpLHRoaXMuX2luamVjdENzcyh0aGlzLl90aGVtZVNlcnZpY2UuY29sb3JzKSx0aGlzLl93aWR0aENhY2hlLnNldEZvbnQodGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250RmFtaWx5LHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZm9udFNpemUsdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250V2VpZ2h0LHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZm9udFdlaWdodEJvbGQpLHRoaXMuX3NldERlZmF1bHRTcGFjaW5nKCl9Y2xlYXIoKXtmb3IoY29uc3QgZSBvZiB0aGlzLl9yb3dFbGVtZW50cyllLnJlcGxhY2VDaGlsZHJlbigpfXJlbmRlclJvd3MoZSx0KXtjb25zdCBpPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLHM9aS55YmFzZStpLnkscj1NYXRoLm1pbihpLngsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLTEpLG49dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5jdXJzb3JCbGluayxvPXRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuY3Vyc29yU3R5bGUsYT10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmN1cnNvckluYWN0aXZlU3R5bGU7Zm9yKGxldCBoPWU7aDw9dDtoKyspe2NvbnN0IGU9aCtpLnlkaXNwLHQ9dGhpcy5fcm93RWxlbWVudHNbaF0sYz1pLmxpbmVzLmdldChlKTtpZighdHx8IWMpYnJlYWs7dC5yZXBsYWNlQ2hpbGRyZW4oLi4udGhpcy5fcm93RmFjdG9yeS5jcmVhdGVSb3coYyxlLGU9PT1zLG8sYSxyLG4sdGhpcy5kaW1lbnNpb25zLmNzcy5jZWxsLndpZHRoLHRoaXMuX3dpZHRoQ2FjaGUsLTEsLTEpKX19Z2V0IF90ZXJtaW5hbFNlbGVjdG9yKCl7cmV0dXJuYC4ke3Z9JHt0aGlzLl90ZXJtaW5hbENsYXNzfWB9X2hhbmRsZUxpbmtIb3ZlcihlKXt0aGlzLl9zZXRDZWxsVW5kZXJsaW5lKGUueDEsZS54MixlLnkxLGUueTIsZS5jb2xzLCEwKX1faGFuZGxlTGlua0xlYXZlKGUpe3RoaXMuX3NldENlbGxVbmRlcmxpbmUoZS54MSxlLngyLGUueTEsZS55MixlLmNvbHMsITEpfV9zZXRDZWxsVW5kZXJsaW5lKGUsdCxpLHMscixuKXtpPDAmJihlPTApLHM8MCYmKHQ9MCk7Y29uc3Qgbz10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMTtpPU1hdGgubWF4KE1hdGgubWluKGksbyksMCkscz1NYXRoLm1heChNYXRoLm1pbihzLG8pLDApLHI9TWF0aC5taW4ocix0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpO2NvbnN0IGE9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIsaD1hLnliYXNlK2EueSxjPU1hdGgubWluKGEueCxyLTEpLGw9dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5jdXJzb3JCbGluayxkPXRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuY3Vyc29yU3R5bGUsXz10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmN1cnNvckluYWN0aXZlU3R5bGU7Zm9yKGxldCBvPWk7bzw9czsrK28pe2NvbnN0IHU9bythLnlkaXNwLGY9dGhpcy5fcm93RWxlbWVudHNbb10sdj1hLmxpbmVzLmdldCh1KTtpZighZnx8IXYpYnJlYWs7Zi5yZXBsYWNlQ2hpbGRyZW4oLi4udGhpcy5fcm93RmFjdG9yeS5jcmVhdGVSb3codix1LHU9PT1oLGQsXyxjLGwsdGhpcy5kaW1lbnNpb25zLmNzcy5jZWxsLndpZHRoLHRoaXMuX3dpZHRoQ2FjaGUsbj9vPT09aT9lOjA6LTEsbj8obz09PXM/dDpyKS0xOi0xKSl9fX07dC5Eb21SZW5kZXJlcj13PXMoW3IoNyxmLklJbnN0YW50aWF0aW9uU2VydmljZSkscig4LGwuSUNoYXJTaXplU2VydmljZSkscig5LGYuSU9wdGlvbnNTZXJ2aWNlKSxyKDEwLGYuSUJ1ZmZlclNlcnZpY2UpLHIoMTEsbC5JQ29yZUJyb3dzZXJTZXJ2aWNlKSxyKDEyLGwuSVRoZW1lU2VydmljZSldLHcpfSwzNzg3OmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuRG9tUmVuZGVyZXJSb3dGYWN0b3J5PXZvaWQgMDtjb25zdCBuPWkoMjIyMyksbz1pKDY0MyksYT1pKDUxMSksaD1pKDI1ODUpLGM9aSg4MDU1KSxsPWkoNDcyNSksZD1pKDQyNjkpLF89aSg2MTcxKSx1PWkoMzczNCk7bGV0IGY9dC5Eb21SZW5kZXJlclJvd0ZhY3Rvcnk9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkscyxyLG4sbyl7dGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9jaGFyYWN0ZXJKb2luZXJTZXJ2aWNlPXQsdGhpcy5fb3B0aW9uc1NlcnZpY2U9aSx0aGlzLl9jb3JlQnJvd3NlclNlcnZpY2U9cyx0aGlzLl9jb3JlU2VydmljZT1yLHRoaXMuX2RlY29yYXRpb25TZXJ2aWNlPW4sdGhpcy5fdGhlbWVTZXJ2aWNlPW8sdGhpcy5fd29ya0NlbGw9bmV3IGEuQ2VsbERhdGEsdGhpcy5fY29sdW1uU2VsZWN0TW9kZT0hMSx0aGlzLmRlZmF1bHRTcGFjaW5nPTB9aGFuZGxlU2VsZWN0aW9uQ2hhbmdlZChlLHQsaSl7dGhpcy5fc2VsZWN0aW9uU3RhcnQ9ZSx0aGlzLl9zZWxlY3Rpb25FbmQ9dCx0aGlzLl9jb2x1bW5TZWxlY3RNb2RlPWl9Y3JlYXRlUm93KGUsdCxpLHMscixhLGgsbCxfLGYscCl7Y29uc3QgZz1bXSxtPXRoaXMuX2NoYXJhY3RlckpvaW5lclNlcnZpY2UuZ2V0Sm9pbmVkQ2hhcmFjdGVycyh0KSxTPXRoaXMuX3RoZW1lU2VydmljZS5jb2xvcnM7bGV0IEMsYj1lLmdldE5vQmdUcmltbWVkTGVuZ3RoKCk7aSYmYjxhKzEmJihiPWErMSk7bGV0IHc9MCx5PVwiXCIsRT0wLGs9MCxMPTAsRD0hMSxSPTAseD0hMSxBPTA7Y29uc3QgQj1bXSxUPS0xIT09ZiYmLTEhPT1wO2ZvcihsZXQgTT0wO008YjtNKyspe2UubG9hZENlbGwoTSx0aGlzLl93b3JrQ2VsbCk7bGV0IGI9dGhpcy5fd29ya0NlbGwuZ2V0V2lkdGgoKTtpZigwPT09Yiljb250aW51ZTtsZXQgTz0hMSxQPU0sST10aGlzLl93b3JrQ2VsbDtpZihtLmxlbmd0aD4wJiZNPT09bVswXVswXSl7Tz0hMDtjb25zdCB0PW0uc2hpZnQoKTtJPW5ldyBkLkpvaW5lZENlbGxEYXRhKHRoaXMuX3dvcmtDZWxsLGUudHJhbnNsYXRlVG9TdHJpbmcoITAsdFswXSx0WzFdKSx0WzFdLXRbMF0pLFA9dFsxXS0xLGI9SS5nZXRXaWR0aCgpfWNvbnN0IEg9dGhpcy5faXNDZWxsSW5TZWxlY3Rpb24oTSx0KSxGPWkmJk09PT1hLFc9VCYmTT49ZiYmTTw9cDtsZXQgVT0hMTt0aGlzLl9kZWNvcmF0aW9uU2VydmljZS5mb3JFYWNoRGVjb3JhdGlvbkF0Q2VsbChNLHQsdm9pZCAwLChlPT57VT0hMH0pKTtsZXQgTj1JLmdldENoYXJzKCl8fG8uV0hJVEVTUEFDRV9DRUxMX0NIQVI7aWYoXCIgXCI9PT1OJiYoSS5pc1VuZGVybGluZSgpfHxJLmlzT3ZlcmxpbmUoKSkmJihOPVwiwqBcIiksQT1iKmwtXy5nZXQoTixJLmlzQm9sZCgpLEkuaXNJdGFsaWMoKSksQyl7aWYodyYmKEgmJnh8fCFIJiYheCYmSS5iZz09PUUpJiYoSCYmeCYmUy5zZWxlY3Rpb25Gb3JlZ3JvdW5kfHxJLmZnPT09aykmJkkuZXh0ZW5kZWQuZXh0PT09TCYmVz09PUQmJkE9PT1SJiYhRiYmIU8mJiFVKXtJLmlzSW52aXNpYmxlKCk/eSs9by5XSElURVNQQUNFX0NFTExfQ0hBUjp5Kz1OLHcrKztjb250aW51ZX13JiYoQy50ZXh0Q29udGVudD15KSxDPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLHc9MCx5PVwiXCJ9ZWxzZSBDPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO2lmKEU9SS5iZyxrPUkuZmcsTD1JLmV4dGVuZGVkLmV4dCxEPVcsUj1BLHg9SCxPJiZhPj1NJiZhPD1QJiYoYT1NKSwhdGhpcy5fY29yZVNlcnZpY2UuaXNDdXJzb3JIaWRkZW4mJkYmJnRoaXMuX2NvcmVTZXJ2aWNlLmlzQ3Vyc29ySW5pdGlhbGl6ZWQpaWYoQi5wdXNoKFwieHRlcm0tY3Vyc29yXCIpLHRoaXMuX2NvcmVCcm93c2VyU2VydmljZS5pc0ZvY3VzZWQpaCYmQi5wdXNoKFwieHRlcm0tY3Vyc29yLWJsaW5rXCIpLEIucHVzaChcImJhclwiPT09cz9cInh0ZXJtLWN1cnNvci1iYXJcIjpcInVuZGVybGluZVwiPT09cz9cInh0ZXJtLWN1cnNvci11bmRlcmxpbmVcIjpcInh0ZXJtLWN1cnNvci1ibG9ja1wiKTtlbHNlIGlmKHIpc3dpdGNoKHIpe2Nhc2VcIm91dGxpbmVcIjpCLnB1c2goXCJ4dGVybS1jdXJzb3Itb3V0bGluZVwiKTticmVhaztjYXNlXCJibG9ja1wiOkIucHVzaChcInh0ZXJtLWN1cnNvci1ibG9ja1wiKTticmVhaztjYXNlXCJiYXJcIjpCLnB1c2goXCJ4dGVybS1jdXJzb3ItYmFyXCIpO2JyZWFrO2Nhc2VcInVuZGVybGluZVwiOkIucHVzaChcInh0ZXJtLWN1cnNvci11bmRlcmxpbmVcIil9aWYoSS5pc0JvbGQoKSYmQi5wdXNoKFwieHRlcm0tYm9sZFwiKSxJLmlzSXRhbGljKCkmJkIucHVzaChcInh0ZXJtLWl0YWxpY1wiKSxJLmlzRGltKCkmJkIucHVzaChcInh0ZXJtLWRpbVwiKSx5PUkuaXNJbnZpc2libGUoKT9vLldISVRFU1BBQ0VfQ0VMTF9DSEFSOkkuZ2V0Q2hhcnMoKXx8by5XSElURVNQQUNFX0NFTExfQ0hBUixJLmlzVW5kZXJsaW5lKCkmJihCLnB1c2goYHh0ZXJtLXVuZGVybGluZS0ke0kuZXh0ZW5kZWQudW5kZXJsaW5lU3R5bGV9YCksXCIgXCI9PT15JiYoeT1cIsKgXCIpLCFJLmlzVW5kZXJsaW5lQ29sb3JEZWZhdWx0KCkpKWlmKEkuaXNVbmRlcmxpbmVDb2xvclJHQigpKUMuc3R5bGUudGV4dERlY29yYXRpb25Db2xvcj1gcmdiKCR7dS5BdHRyaWJ1dGVEYXRhLnRvQ29sb3JSR0IoSS5nZXRVbmRlcmxpbmVDb2xvcigpKS5qb2luKFwiLFwiKX0pYDtlbHNle2xldCBlPUkuZ2V0VW5kZXJsaW5lQ29sb3IoKTt0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzJiZJLmlzQm9sZCgpJiZlPDgmJihlKz04KSxDLnN0eWxlLnRleHREZWNvcmF0aW9uQ29sb3I9Uy5hbnNpW2VdLmNzc31JLmlzT3ZlcmxpbmUoKSYmKEIucHVzaChcInh0ZXJtLW92ZXJsaW5lXCIpLFwiIFwiPT09eSYmKHk9XCLCoFwiKSksSS5pc1N0cmlrZXRocm91Z2goKSYmQi5wdXNoKFwieHRlcm0tc3RyaWtldGhyb3VnaFwiKSxXJiYoQy5zdHlsZS50ZXh0RGVjb3JhdGlvbj1cInVuZGVybGluZVwiKTtsZXQgJD1JLmdldEZnQ29sb3IoKSxqPUkuZ2V0RmdDb2xvck1vZGUoKSx6PUkuZ2V0QmdDb2xvcigpLEs9SS5nZXRCZ0NvbG9yTW9kZSgpO2NvbnN0IHE9ISFJLmlzSW52ZXJzZSgpO2lmKHEpe2NvbnN0IGU9JDskPXosej1lO2NvbnN0IHQ9ajtqPUssSz10fWxldCBWLEcsWCxKPSExO3N3aXRjaCh0aGlzLl9kZWNvcmF0aW9uU2VydmljZS5mb3JFYWNoRGVjb3JhdGlvbkF0Q2VsbChNLHQsdm9pZCAwLChlPT57XCJ0b3BcIiE9PWUub3B0aW9ucy5sYXllciYmSnx8KGUuYmFja2dyb3VuZENvbG9yUkdCJiYoSz01MDMzMTY0OCx6PWUuYmFja2dyb3VuZENvbG9yUkdCLnJnYmE+PjgmMTY3NzcyMTUsVj1lLmJhY2tncm91bmRDb2xvclJHQiksZS5mb3JlZ3JvdW5kQ29sb3JSR0ImJihqPTUwMzMxNjQ4LCQ9ZS5mb3JlZ3JvdW5kQ29sb3JSR0IucmdiYT4+OCYxNjc3NzIxNSxHPWUuZm9yZWdyb3VuZENvbG9yUkdCKSxKPVwidG9wXCI9PT1lLm9wdGlvbnMubGF5ZXIpfSkpLCFKJiZIJiYoVj10aGlzLl9jb3JlQnJvd3NlclNlcnZpY2UuaXNGb2N1c2VkP1Muc2VsZWN0aW9uQmFja2dyb3VuZE9wYXF1ZTpTLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZE9wYXF1ZSx6PVYucmdiYT4+OCYxNjc3NzIxNSxLPTUwMzMxNjQ4LEo9ITAsUy5zZWxlY3Rpb25Gb3JlZ3JvdW5kJiYoaj01MDMzMTY0OCwkPVMuc2VsZWN0aW9uRm9yZWdyb3VuZC5yZ2JhPj44JjE2Nzc3MjE1LEc9Uy5zZWxlY3Rpb25Gb3JlZ3JvdW5kKSksSiYmQi5wdXNoKFwieHRlcm0tZGVjb3JhdGlvbi10b3BcIiksSyl7Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOlg9Uy5hbnNpW3pdLEIucHVzaChgeHRlcm0tYmctJHt6fWApO2JyZWFrO2Nhc2UgNTAzMzE2NDg6WD1jLmNoYW5uZWxzLnRvQ29sb3Ioej4+MTYsej4+OCYyNTUsMjU1JnopLHRoaXMuX2FkZFN0eWxlKEMsYGJhY2tncm91bmQtY29sb3I6IyR7digoej4+PjApLnRvU3RyaW5nKDE2KSxcIjBcIiw2KX1gKTticmVhaztkZWZhdWx0OnE/KFg9Uy5mb3JlZ3JvdW5kLEIucHVzaChgeHRlcm0tYmctJHtuLklOVkVSVEVEX0RFRkFVTFRfQ09MT1J9YCkpOlg9Uy5iYWNrZ3JvdW5kfXN3aXRjaChWfHxJLmlzRGltKCkmJihWPWMuY29sb3IubXVsdGlwbHlPcGFjaXR5KFgsLjUpKSxqKXtjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6SS5pc0JvbGQoKSYmJDw4JiZ0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzJiYoJCs9OCksdGhpcy5fYXBwbHlNaW5pbXVtQ29udHJhc3QoQyxYLFMuYW5zaVskXSxJLFYsdm9pZCAwKXx8Qi5wdXNoKGB4dGVybS1mZy0keyR9YCk7YnJlYWs7Y2FzZSA1MDMzMTY0ODpjb25zdCBlPWMuY2hhbm5lbHMudG9Db2xvcigkPj4xNiYyNTUsJD4+OCYyNTUsMjU1JiQpO3RoaXMuX2FwcGx5TWluaW11bUNvbnRyYXN0KEMsWCxlLEksVixHKXx8dGhpcy5fYWRkU3R5bGUoQyxgY29sb3I6IyR7digkLnRvU3RyaW5nKDE2KSxcIjBcIiw2KX1gKTticmVhaztkZWZhdWx0OnRoaXMuX2FwcGx5TWluaW11bUNvbnRyYXN0KEMsWCxTLmZvcmVncm91bmQsSSxWLEcpfHxxJiZCLnB1c2goYHh0ZXJtLWZnLSR7bi5JTlZFUlRFRF9ERUZBVUxUX0NPTE9SfWApfUIubGVuZ3RoJiYoQy5jbGFzc05hbWU9Qi5qb2luKFwiIFwiKSxCLmxlbmd0aD0wKSxGfHxPfHxVP0MudGV4dENvbnRlbnQ9eTp3KyssQSE9PXRoaXMuZGVmYXVsdFNwYWNpbmcmJihDLnN0eWxlLmxldHRlclNwYWNpbmc9YCR7QX1weGApLGcucHVzaChDKSxNPVB9cmV0dXJuIEMmJncmJihDLnRleHRDb250ZW50PXkpLGd9X2FwcGx5TWluaW11bUNvbnRyYXN0KGUsdCxpLHMscixuKXtpZigxPT09dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5taW5pbXVtQ29udHJhc3RSYXRpb3x8KDAsXy50cmVhdEdseXBoQXNCYWNrZ3JvdW5kQ29sb3IpKHMuZ2V0Q29kZSgpKSlyZXR1cm4hMTtjb25zdCBvPXRoaXMuX2dldENvbnRyYXN0Q2FjaGUocyk7bGV0IGE7aWYocnx8bnx8KGE9by5nZXRDb2xvcih0LnJnYmEsaS5yZ2JhKSksdm9pZCAwPT09YSl7Y29uc3QgZT10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLm1pbmltdW1Db250cmFzdFJhdGlvLyhzLmlzRGltKCk/MjoxKTthPWMuY29sb3IuZW5zdXJlQ29udHJhc3RSYXRpbyhyfHx0LG58fGksZSksby5zZXRDb2xvcigocnx8dCkucmdiYSwobnx8aSkucmdiYSxhPz9udWxsKX1yZXR1cm4hIWEmJih0aGlzLl9hZGRTdHlsZShlLGBjb2xvcjoke2EuY3NzfWApLCEwKX1fZ2V0Q29udHJhc3RDYWNoZShlKXtyZXR1cm4gZS5pc0RpbSgpP3RoaXMuX3RoZW1lU2VydmljZS5jb2xvcnMuaGFsZkNvbnRyYXN0Q2FjaGU6dGhpcy5fdGhlbWVTZXJ2aWNlLmNvbG9ycy5jb250cmFzdENhY2hlfV9hZGRTdHlsZShlLHQpe2Uuc2V0QXR0cmlidXRlKFwic3R5bGVcIixgJHtlLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpfHxcIlwifSR7dH07YCl9X2lzQ2VsbEluU2VsZWN0aW9uKGUsdCl7Y29uc3QgaT10aGlzLl9zZWxlY3Rpb25TdGFydCxzPXRoaXMuX3NlbGVjdGlvbkVuZDtyZXR1cm4hKCFpfHwhcykmJih0aGlzLl9jb2x1bW5TZWxlY3RNb2RlP2lbMF08PXNbMF0/ZT49aVswXSYmdD49aVsxXSYmZTxzWzBdJiZ0PD1zWzFdOmU8aVswXSYmdD49aVsxXSYmZT49c1swXSYmdDw9c1sxXTp0PmlbMV0mJnQ8c1sxXXx8aVsxXT09PXNbMV0mJnQ9PT1pWzFdJiZlPj1pWzBdJiZlPHNbMF18fGlbMV08c1sxXSYmdD09PXNbMV0mJmU8c1swXXx8aVsxXTxzWzFdJiZ0PT09aVsxXSYmZT49aVswXSl9fTtmdW5jdGlvbiB2KGUsdCxpKXtmb3IoO2UubGVuZ3RoPGk7KWU9dCtlO3JldHVybiBlfXQuRG9tUmVuZGVyZXJSb3dGYWN0b3J5PWY9cyhbcigxLGwuSUNoYXJhY3RlckpvaW5lclNlcnZpY2UpLHIoMixoLklPcHRpb25zU2VydmljZSkscigzLGwuSUNvcmVCcm93c2VyU2VydmljZSkscig0LGguSUNvcmVTZXJ2aWNlKSxyKDUsaC5JRGVjb3JhdGlvblNlcnZpY2UpLHIoNixsLklUaGVtZVNlcnZpY2UpXSxmKX0sMjU1MDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuV2lkdGhDYWNoZT12b2lkIDAsdC5XaWR0aENhY2hlPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fZmxhdD1uZXcgRmxvYXQzMkFycmF5KDI1NiksdGhpcy5fZm9udD1cIlwiLHRoaXMuX2ZvbnRTaXplPTAsdGhpcy5fd2VpZ2h0PVwibm9ybWFsXCIsdGhpcy5fd2VpZ2h0Qm9sZD1cImJvbGRcIix0aGlzLl9tZWFzdXJlRWxlbWVudHM9W10sdGhpcy5fY29udGFpbmVyPWUuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChcInh0ZXJtLXdpZHRoLWNhY2hlLW1lYXN1cmUtY29udGFpbmVyXCIpLHRoaXMuX2NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSx0aGlzLl9jb250YWluZXIuc3R5bGUud2hpdGVTcGFjZT1cInByZVwiLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5mb250S2VybmluZz1cIm5vbmVcIjtjb25zdCBpPWUuY3JlYXRlRWxlbWVudChcInNwYW5cIik7aS5jbGFzc0xpc3QuYWRkKFwieHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnRcIik7Y29uc3Qgcz1lLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3MuY2xhc3NMaXN0LmFkZChcInh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50XCIpLHMuc3R5bGUuZm9udFdlaWdodD1cImJvbGRcIjtjb25zdCByPWUuY3JlYXRlRWxlbWVudChcInNwYW5cIik7ci5jbGFzc0xpc3QuYWRkKFwieHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnRcIiksci5zdHlsZS5mb250U3R5bGU9XCJpdGFsaWNcIjtjb25zdCBuPWUuY3JlYXRlRWxlbWVudChcInNwYW5cIik7bi5jbGFzc0xpc3QuYWRkKFwieHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnRcIiksbi5zdHlsZS5mb250V2VpZ2h0PVwiYm9sZFwiLG4uc3R5bGUuZm9udFN0eWxlPVwiaXRhbGljXCIsdGhpcy5fbWVhc3VyZUVsZW1lbnRzPVtpLHMscixuXSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoaSksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHMpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQobiksdC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuY2xlYXIoKX1kaXNwb3NlKCl7dGhpcy5fY29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lYXN1cmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9ob2xleT12b2lkIDB9Y2xlYXIoKXt0aGlzLl9mbGF0LmZpbGwoLTk5OTkpLHRoaXMuX2hvbGV5PW5ldyBNYXB9c2V0Rm9udChlLHQsaSxzKXtlPT09dGhpcy5fZm9udCYmdD09PXRoaXMuX2ZvbnRTaXplJiZpPT09dGhpcy5fd2VpZ2h0JiZzPT09dGhpcy5fd2VpZ2h0Qm9sZHx8KHRoaXMuX2ZvbnQ9ZSx0aGlzLl9mb250U2l6ZT10LHRoaXMuX3dlaWdodD1pLHRoaXMuX3dlaWdodEJvbGQ9cyx0aGlzLl9jb250YWluZXIuc3R5bGUuZm9udEZhbWlseT10aGlzLl9mb250LHRoaXMuX2NvbnRhaW5lci5zdHlsZS5mb250U2l6ZT1gJHt0aGlzLl9mb250U2l6ZX1weGAsdGhpcy5fbWVhc3VyZUVsZW1lbnRzWzBdLnN0eWxlLmZvbnRXZWlnaHQ9YCR7aX1gLHRoaXMuX21lYXN1cmVFbGVtZW50c1sxXS5zdHlsZS5mb250V2VpZ2h0PWAke3N9YCx0aGlzLl9tZWFzdXJlRWxlbWVudHNbMl0uc3R5bGUuZm9udFdlaWdodD1gJHtpfWAsdGhpcy5fbWVhc3VyZUVsZW1lbnRzWzNdLnN0eWxlLmZvbnRXZWlnaHQ9YCR7c31gLHRoaXMuY2xlYXIoKSl9Z2V0KGUsdCxpKXtsZXQgcz0wO2lmKCF0JiYhaSYmMT09PWUubGVuZ3RoJiYocz1lLmNoYXJDb2RlQXQoMCkpPDI1Nil7aWYoLTk5OTkhPT10aGlzLl9mbGF0W3NdKXJldHVybiB0aGlzLl9mbGF0W3NdO2NvbnN0IHQ9dGhpcy5fbWVhc3VyZShlLDApO3JldHVybiB0PjAmJih0aGlzLl9mbGF0W3NdPXQpLHR9bGV0IHI9ZTt0JiYocis9XCJCXCIpLGkmJihyKz1cIklcIik7bGV0IG49dGhpcy5faG9sZXkuZ2V0KHIpO2lmKHZvaWQgMD09PW4pe2xldCBzPTA7dCYmKHN8PTEpLGkmJihzfD0yKSxuPXRoaXMuX21lYXN1cmUoZSxzKSxuPjAmJnRoaXMuX2hvbGV5LnNldChyLG4pfXJldHVybiBufV9tZWFzdXJlKGUsdCl7Y29uc3QgaT10aGlzLl9tZWFzdXJlRWxlbWVudHNbdF07cmV0dXJuIGkudGV4dENvbnRlbnQ9ZS5yZXBlYXQoMzIpLGkub2Zmc2V0V2lkdGgvMzJ9fX0sMjIyMzooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5URVhUX0JBU0VMSU5FPXQuRElNX09QQUNJVFk9dC5JTlZFUlRFRF9ERUZBVUxUX0NPTE9SPXZvaWQgMDtjb25zdCBzPWkoNjExNCk7dC5JTlZFUlRFRF9ERUZBVUxUX0NPTE9SPTI1Nyx0LkRJTV9PUEFDSVRZPS41LHQuVEVYVF9CQVNFTElORT1zLmlzRmlyZWZveHx8cy5pc0xlZ2FjeUVkZ2U/XCJib3R0b21cIjpcImlkZW9ncmFwaGljXCJ9LDYxNzE6KGUsdCk9PntmdW5jdGlvbiBpKGUpe3JldHVybiA1NzUwODw9ZSYmZTw9NTc1NTh9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZT49MTI4NTEyJiZlPD0xMjg1OTF8fGU+PTEyNzc0NCYmZTw9MTI4NTExfHxlPj0xMjg2NDAmJmU8PTEyODc2N3x8ZT49OTcyOCYmZTw9OTk4M3x8ZT49OTk4NCYmZTw9MTAxNzV8fGU+PTY1MDI0JiZlPD02NTAzOXx8ZT49MTI5MjgwJiZlPD0xMjk1MzV8fGU+PTEyNzQ2MiYmZTw9MTI3NDg3fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY29tcHV0ZU5leHRWYXJpYW50T2Zmc2V0PXQuY3JlYXRlUmVuZGVyRGltZW5zaW9ucz10LnRyZWF0R2x5cGhBc0JhY2tncm91bmRDb2xvcj10LmFsbG93UmVzY2FsaW5nPXQuaXNFbW9qaT10LmlzUmVzdHJpY3RlZFBvd2VybGluZUdseXBoPXQuaXNQb3dlcmxpbmVHbHlwaD10LnRocm93SWZGYWxzeT12b2lkIDAsdC50aHJvd0lmRmFsc3k9ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwidmFsdWUgbXVzdCBub3QgYmUgZmFsc3lcIik7cmV0dXJuIGV9LHQuaXNQb3dlcmxpbmVHbHlwaD1pLHQuaXNSZXN0cmljdGVkUG93ZXJsaW5lR2x5cGg9ZnVuY3Rpb24oZSl7cmV0dXJuIDU3NTIwPD1lJiZlPD01NzUyN30sdC5pc0Vtb2ppPXMsdC5hbGxvd1Jlc2NhbGluZz1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gMT09PXQmJnI+TWF0aC5jZWlsKDEuNSpuKSYmdm9pZCAwIT09ZSYmZT4yNTUmJiFzKGUpJiYhaShlKSYmIWZ1bmN0aW9uKGUpe3JldHVybiA1NzM0NDw9ZSYmZTw9NjM3NDN9KGUpfSx0LnRyZWF0R2x5cGhBc0JhY2tncm91bmRDb2xvcj1mdW5jdGlvbihlKXtyZXR1cm4gaShlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuIDk0NzI8PWUmJmU8PTk2MzF9KGUpfSx0LmNyZWF0ZVJlbmRlckRpbWVuc2lvbnM9ZnVuY3Rpb24oKXtyZXR1cm57Y3NzOntjYW52YXM6e3dpZHRoOjAsaGVpZ2h0OjB9LGNlbGw6e3dpZHRoOjAsaGVpZ2h0OjB9fSxkZXZpY2U6e2NhbnZhczp7d2lkdGg6MCxoZWlnaHQ6MH0sY2VsbDp7d2lkdGg6MCxoZWlnaHQ6MH0sY2hhcjp7d2lkdGg6MCxoZWlnaHQ6MCxsZWZ0OjAsdG9wOjB9fX19LHQuY29tcHV0ZU5leHRWYXJpYW50T2Zmc2V0PWZ1bmN0aW9uKGUsdCxpPTApe3JldHVybihlLSgyKk1hdGgucm91bmQodCktaSkpJSgyKk1hdGgucm91bmQodCkpfX0sNjA1MjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY3JlYXRlU2VsZWN0aW9uUmVuZGVyTW9kZWw9dm9pZCAwO2NsYXNzIGl7Y29uc3RydWN0b3IoKXt0aGlzLmNsZWFyKCl9Y2xlYXIoKXt0aGlzLmhhc1NlbGVjdGlvbj0hMSx0aGlzLmNvbHVtblNlbGVjdE1vZGU9ITEsdGhpcy52aWV3cG9ydFN0YXJ0Um93PTAsdGhpcy52aWV3cG9ydEVuZFJvdz0wLHRoaXMudmlld3BvcnRDYXBwZWRTdGFydFJvdz0wLHRoaXMudmlld3BvcnRDYXBwZWRFbmRSb3c9MCx0aGlzLnN0YXJ0Q29sPTAsdGhpcy5lbmRDb2w9MCx0aGlzLnNlbGVjdGlvblN0YXJ0PXZvaWQgMCx0aGlzLnNlbGVjdGlvbkVuZD12b2lkIDB9dXBkYXRlKGUsdCxpLHM9ITEpe2lmKHRoaXMuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLnNlbGVjdGlvbkVuZD1pLCF0fHwhaXx8dFswXT09PWlbMF0mJnRbMV09PT1pWzFdKXJldHVybiB2b2lkIHRoaXMuY2xlYXIoKTtjb25zdCByPWUuYnVmZmVycy5hY3RpdmUueWRpc3Asbj10WzFdLXIsbz1pWzFdLXIsYT1NYXRoLm1heChuLDApLGg9TWF0aC5taW4obyxlLnJvd3MtMSk7YT49ZS5yb3dzfHxoPDA/dGhpcy5jbGVhcigpOih0aGlzLmhhc1NlbGVjdGlvbj0hMCx0aGlzLmNvbHVtblNlbGVjdE1vZGU9cyx0aGlzLnZpZXdwb3J0U3RhcnRSb3c9bix0aGlzLnZpZXdwb3J0RW5kUm93PW8sdGhpcy52aWV3cG9ydENhcHBlZFN0YXJ0Um93PWEsdGhpcy52aWV3cG9ydENhcHBlZEVuZFJvdz1oLHRoaXMuc3RhcnRDb2w9dFswXSx0aGlzLmVuZENvbD1pWzBdKX1pc0NlbGxTZWxlY3RlZChlLHQsaSl7cmV0dXJuISF0aGlzLmhhc1NlbGVjdGlvbiYmKGktPWUuYnVmZmVyLmFjdGl2ZS52aWV3cG9ydFksdGhpcy5jb2x1bW5TZWxlY3RNb2RlP3RoaXMuc3RhcnRDb2w8PXRoaXMuZW5kQ29sP3Q+PXRoaXMuc3RhcnRDb2wmJmk+PXRoaXMudmlld3BvcnRDYXBwZWRTdGFydFJvdyYmdDx0aGlzLmVuZENvbCYmaTw9dGhpcy52aWV3cG9ydENhcHBlZEVuZFJvdzp0PHRoaXMuc3RhcnRDb2wmJmk+PXRoaXMudmlld3BvcnRDYXBwZWRTdGFydFJvdyYmdD49dGhpcy5lbmRDb2wmJmk8PXRoaXMudmlld3BvcnRDYXBwZWRFbmRSb3c6aT50aGlzLnZpZXdwb3J0U3RhcnRSb3cmJmk8dGhpcy52aWV3cG9ydEVuZFJvd3x8dGhpcy52aWV3cG9ydFN0YXJ0Um93PT09dGhpcy52aWV3cG9ydEVuZFJvdyYmaT09PXRoaXMudmlld3BvcnRTdGFydFJvdyYmdD49dGhpcy5zdGFydENvbCYmdDx0aGlzLmVuZENvbHx8dGhpcy52aWV3cG9ydFN0YXJ0Um93PHRoaXMudmlld3BvcnRFbmRSb3cmJmk9PT10aGlzLnZpZXdwb3J0RW5kUm93JiZ0PHRoaXMuZW5kQ29sfHx0aGlzLnZpZXdwb3J0U3RhcnRSb3c8dGhpcy52aWV3cG9ydEVuZFJvdyYmaT09PXRoaXMudmlld3BvcnRTdGFydFJvdyYmdD49dGhpcy5zdGFydENvbCl9fXQuY3JlYXRlU2VsZWN0aW9uUmVuZGVyTW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGl9fSw0NTY6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNlbGVjdGlvbk1vZGVsPXZvaWQgMCx0LlNlbGVjdGlvbk1vZGVsPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLmlzU2VsZWN0QWxsQWN0aXZlPSExLHRoaXMuc2VsZWN0aW9uU3RhcnRMZW5ndGg9MH1jbGVhclNlbGVjdGlvbigpe3RoaXMuc2VsZWN0aW9uU3RhcnQ9dm9pZCAwLHRoaXMuc2VsZWN0aW9uRW5kPXZvaWQgMCx0aGlzLmlzU2VsZWN0QWxsQWN0aXZlPSExLHRoaXMuc2VsZWN0aW9uU3RhcnRMZW5ndGg9MH1nZXQgZmluYWxTZWxlY3Rpb25TdGFydCgpe3JldHVybiB0aGlzLmlzU2VsZWN0QWxsQWN0aXZlP1swLDBdOnRoaXMuc2VsZWN0aW9uRW5kJiZ0aGlzLnNlbGVjdGlvblN0YXJ0JiZ0aGlzLmFyZVNlbGVjdGlvblZhbHVlc1JldmVyc2VkKCk/dGhpcy5zZWxlY3Rpb25FbmQ6dGhpcy5zZWxlY3Rpb25TdGFydH1nZXQgZmluYWxTZWxlY3Rpb25FbmQoKXtpZih0aGlzLmlzU2VsZWN0QWxsQWN0aXZlKXJldHVyblt0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWJhc2UrdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTFdO2lmKHRoaXMuc2VsZWN0aW9uU3RhcnQpe2lmKCF0aGlzLnNlbGVjdGlvbkVuZHx8dGhpcy5hcmVTZWxlY3Rpb25WYWx1ZXNSZXZlcnNlZCgpKXtjb25zdCBlPXRoaXMuc2VsZWN0aW9uU3RhcnRbMF0rdGhpcy5zZWxlY3Rpb25TdGFydExlbmd0aDtyZXR1cm4gZT50aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM/ZSV0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM9PTA/W3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLnNlbGVjdGlvblN0YXJ0WzFdK01hdGguZmxvb3IoZS90aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpLTFdOltlJXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLnNlbGVjdGlvblN0YXJ0WzFdK01hdGguZmxvb3IoZS90aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpXTpbZSx0aGlzLnNlbGVjdGlvblN0YXJ0WzFdXX1pZih0aGlzLnNlbGVjdGlvblN0YXJ0TGVuZ3RoJiZ0aGlzLnNlbGVjdGlvbkVuZFsxXT09PXRoaXMuc2VsZWN0aW9uU3RhcnRbMV0pe2NvbnN0IGU9dGhpcy5zZWxlY3Rpb25TdGFydFswXSt0aGlzLnNlbGVjdGlvblN0YXJ0TGVuZ3RoO3JldHVybiBlPnRoaXMuX2J1ZmZlclNlcnZpY2UuY29scz9bZSV0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5zZWxlY3Rpb25TdGFydFsxXStNYXRoLmZsb29yKGUvdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzKV06W01hdGgubWF4KGUsdGhpcy5zZWxlY3Rpb25FbmRbMF0pLHRoaXMuc2VsZWN0aW9uRW5kWzFdXX1yZXR1cm4gdGhpcy5zZWxlY3Rpb25FbmR9fWFyZVNlbGVjdGlvblZhbHVlc1JldmVyc2VkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvblN0YXJ0LHQ9dGhpcy5zZWxlY3Rpb25FbmQ7cmV0dXJuISghZXx8IXQpJiYoZVsxXT50WzFdfHxlWzFdPT09dFsxXSYmZVswXT50WzBdKX1oYW5kbGVUcmltKGUpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0JiYodGhpcy5zZWxlY3Rpb25TdGFydFsxXS09ZSksdGhpcy5zZWxlY3Rpb25FbmQmJih0aGlzLnNlbGVjdGlvbkVuZFsxXS09ZSksdGhpcy5zZWxlY3Rpb25FbmQmJnRoaXMuc2VsZWN0aW9uRW5kWzFdPDA/KHRoaXMuY2xlYXJTZWxlY3Rpb24oKSwhMCk6KHRoaXMuc2VsZWN0aW9uU3RhcnQmJnRoaXMuc2VsZWN0aW9uU3RhcnRbMV08MCYmKHRoaXMuc2VsZWN0aW9uU3RhcnRbMV09MCksITEpfX19LDQyODpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNoYXJTaXplU2VydmljZT12b2lkIDA7Y29uc3Qgbj1pKDI1ODUpLG89aSg4NDYwKSxhPWkoODQ0KTtsZXQgaD10LkNoYXJTaXplU2VydmljZT1jbGFzcyBleHRlbmRzIGEuRGlzcG9zYWJsZXtnZXQgaGFzVmFsaWRTaXplKCl7cmV0dXJuIHRoaXMud2lkdGg+MCYmdGhpcy5oZWlnaHQ+MH1jb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoKSx0aGlzLl9vcHRpb25zU2VydmljZT1pLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX29uQ2hhclNpemVDaGFuZ2U9dGhpcy5yZWdpc3RlcihuZXcgby5FdmVudEVtaXR0ZXIpLHRoaXMub25DaGFyU2l6ZUNoYW5nZT10aGlzLl9vbkNoYXJTaXplQ2hhbmdlLmV2ZW50O3RyeXt0aGlzLl9tZWFzdXJlU3RyYXRlZ3k9dGhpcy5yZWdpc3RlcihuZXcgZCh0aGlzLl9vcHRpb25zU2VydmljZSkpfWNhdGNoe3RoaXMuX21lYXN1cmVTdHJhdGVneT10aGlzLnJlZ2lzdGVyKG5ldyBsKGUsdCx0aGlzLl9vcHRpb25zU2VydmljZSkpfXRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25NdWx0aXBsZU9wdGlvbkNoYW5nZShbXCJmb250RmFtaWx5XCIsXCJmb250U2l6ZVwiXSwoKCk9PnRoaXMubWVhc3VyZSgpKSkpfW1lYXN1cmUoKXtjb25zdCBlPXRoaXMuX21lYXN1cmVTdHJhdGVneS5tZWFzdXJlKCk7ZS53aWR0aD09PXRoaXMud2lkdGgmJmUuaGVpZ2h0PT09dGhpcy5oZWlnaHR8fCh0aGlzLndpZHRoPWUud2lkdGgsdGhpcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5fb25DaGFyU2l6ZUNoYW5nZS5maXJlKCkpfX07dC5DaGFyU2l6ZVNlcnZpY2U9aD1zKFtyKDIsbi5JT3B0aW9uc1NlcnZpY2UpXSxoKTtjbGFzcyBjIGV4dGVuZHMgYS5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZXN1bHQ9e3dpZHRoOjAsaGVpZ2h0OjB9fV92YWxpZGF0ZUFuZFNldChlLHQpe3ZvaWQgMCE9PWUmJmU+MCYmdm9pZCAwIT09dCYmdD4wJiYodGhpcy5fcmVzdWx0LndpZHRoPWUsdGhpcy5fcmVzdWx0LmhlaWdodD10KX19Y2xhc3MgbCBleHRlbmRzIGN7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCksdGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9wYXJlbnRFbGVtZW50PXQsdGhpcy5fb3B0aW9uc1NlcnZpY2U9aSx0aGlzLl9tZWFzdXJlRWxlbWVudD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwieHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnRcIiksdGhpcy5fbWVhc3VyZUVsZW1lbnQudGV4dENvbnRlbnQ9XCJXXCIucmVwZWF0KDMyKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlPVwicHJlXCIsdGhpcy5fbWVhc3VyZUVsZW1lbnQuc3R5bGUuZm9udEtlcm5pbmc9XCJub25lXCIsdGhpcy5fcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCl9bWVhc3VyZSgpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5mb250RmFtaWx5PXRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZm9udEZhbWlseSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5mb250U2l6ZT1gJHt0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmZvbnRTaXplfXB4YCx0aGlzLl92YWxpZGF0ZUFuZFNldChOdW1iZXIodGhpcy5fbWVhc3VyZUVsZW1lbnQub2Zmc2V0V2lkdGgpLzMyLE51bWJlcih0aGlzLl9tZWFzdXJlRWxlbWVudC5vZmZzZXRIZWlnaHQpKSx0aGlzLl9yZXN1bHR9fWNsYXNzIGQgZXh0ZW5kcyBje2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fb3B0aW9uc1NlcnZpY2U9ZSx0aGlzLl9jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygxMDAsMTAwKSx0aGlzLl9jdHg9dGhpcy5fY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtjb25zdCB0PXRoaXMuX2N0eC5tZWFzdXJlVGV4dChcIldcIik7aWYoIShcIndpZHRoXCJpbiB0JiZcImZvbnRCb3VuZGluZ0JveEFzY2VudFwiaW4gdCYmXCJmb250Qm91bmRpbmdCb3hEZXNjZW50XCJpbiB0KSl0aHJvdyBuZXcgRXJyb3IoXCJSZXF1aXJlZCBmb250IG1ldHJpY3Mgbm90IHN1cHBvcnRlZFwiKX1tZWFzdXJlKCl7dGhpcy5fY3R4LmZvbnQ9YCR7dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5mb250U2l6ZX1weCAke3RoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZm9udEZhbWlseX1gO2NvbnN0IGU9dGhpcy5fY3R4Lm1lYXN1cmVUZXh0KFwiV1wiKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVBbmRTZXQoZS53aWR0aCxlLmZvbnRCb3VuZGluZ0JveEFzY2VudCtlLmZvbnRCb3VuZGluZ0JveERlc2NlbnQpLHRoaXMuX3Jlc3VsdH19fSw0MjY5OmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2hhcmFjdGVySm9pbmVyU2VydmljZT10LkpvaW5lZENlbGxEYXRhPXZvaWQgMDtjb25zdCBuPWkoMzczNCksbz1pKDY0MyksYT1pKDUxMSksaD1pKDI1ODUpO2NsYXNzIGMgZXh0ZW5kcyBuLkF0dHJpYnV0ZURhdGF7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCksdGhpcy5jb250ZW50PTAsdGhpcy5jb21iaW5lZERhdGE9XCJcIix0aGlzLmZnPWUuZmcsdGhpcy5iZz1lLmJnLHRoaXMuY29tYmluZWREYXRhPXQsdGhpcy5fd2lkdGg9aX1pc0NvbWJpbmVkKCl7cmV0dXJuIDIwOTcxNTJ9Z2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5fd2lkdGh9Z2V0Q2hhcnMoKXtyZXR1cm4gdGhpcy5jb21iaW5lZERhdGF9Z2V0Q29kZSgpe3JldHVybiAyMDk3MTUxfXNldEZyb21DaGFyRGF0YShlKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIil9Z2V0QXNDaGFyRGF0YSgpe3JldHVyblt0aGlzLmZnLHRoaXMuZ2V0Q2hhcnMoKSx0aGlzLmdldFdpZHRoKCksdGhpcy5nZXRDb2RlKCldfX10LkpvaW5lZENlbGxEYXRhPWM7bGV0IGw9dC5DaGFyYWN0ZXJKb2luZXJTZXJ2aWNlPWNsYXNzIGV7Y29uc3RydWN0b3IoZSl7dGhpcy5fYnVmZmVyU2VydmljZT1lLHRoaXMuX2NoYXJhY3RlckpvaW5lcnM9W10sdGhpcy5fbmV4dENoYXJhY3RlckpvaW5lcklkPTAsdGhpcy5fd29ya0NlbGw9bmV3IGEuQ2VsbERhdGF9cmVnaXN0ZXIoZSl7Y29uc3QgdD17aWQ6dGhpcy5fbmV4dENoYXJhY3RlckpvaW5lcklkKyssaGFuZGxlcjplfTtyZXR1cm4gdGhpcy5fY2hhcmFjdGVySm9pbmVycy5wdXNoKHQpLHQuaWR9ZGVyZWdpc3RlcihlKXtmb3IobGV0IHQ9MDt0PHRoaXMuX2NoYXJhY3RlckpvaW5lcnMubGVuZ3RoO3QrKylpZih0aGlzLl9jaGFyYWN0ZXJKb2luZXJzW3RdLmlkPT09ZSlyZXR1cm4gdGhpcy5fY2hhcmFjdGVySm9pbmVycy5zcGxpY2UodCwxKSwhMDtyZXR1cm4hMX1nZXRKb2luZWRDaGFyYWN0ZXJzKGUpe2lmKDA9PT10aGlzLl9jaGFyYWN0ZXJKb2luZXJzLmxlbmd0aClyZXR1cm5bXTtjb25zdCB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmdldChlKTtpZighdHx8MD09PXQubGVuZ3RoKXJldHVybltdO2NvbnN0IGk9W10scz10LnRyYW5zbGF0ZVRvU3RyaW5nKCEwKTtsZXQgcj0wLG49MCxhPTAsaD10LmdldEZnKDApLGM9dC5nZXRCZygwKTtmb3IobGV0IGU9MDtlPHQuZ2V0VHJpbW1lZExlbmd0aCgpO2UrKylpZih0LmxvYWRDZWxsKGUsdGhpcy5fd29ya0NlbGwpLDAhPT10aGlzLl93b3JrQ2VsbC5nZXRXaWR0aCgpKXtpZih0aGlzLl93b3JrQ2VsbC5mZyE9PWh8fHRoaXMuX3dvcmtDZWxsLmJnIT09Yyl7aWYoZS1yPjEpe2NvbnN0IGU9dGhpcy5fZ2V0Sm9pbmVkUmFuZ2VzKHMsYSxuLHQscik7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaS5wdXNoKGVbdF0pfXI9ZSxhPW4saD10aGlzLl93b3JrQ2VsbC5mZyxjPXRoaXMuX3dvcmtDZWxsLmJnfW4rPXRoaXMuX3dvcmtDZWxsLmdldENoYXJzKCkubGVuZ3RofHxvLldISVRFU1BBQ0VfQ0VMTF9DSEFSLmxlbmd0aH1pZih0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMtcj4xKXtjb25zdCBlPXRoaXMuX2dldEpvaW5lZFJhbmdlcyhzLGEsbix0LHIpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWkucHVzaChlW3RdKX1yZXR1cm4gaX1fZ2V0Sm9pbmVkUmFuZ2VzKHQsaSxzLHIsbil7Y29uc3Qgbz10LnN1YnN0cmluZyhpLHMpO2xldCBhPVtdO3RyeXthPXRoaXMuX2NoYXJhY3RlckpvaW5lcnNbMF0uaGFuZGxlcihvKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfWZvcihsZXQgdD0xO3Q8dGhpcy5fY2hhcmFjdGVySm9pbmVycy5sZW5ndGg7dCsrKXRyeXtjb25zdCBpPXRoaXMuX2NoYXJhY3RlckpvaW5lcnNbdF0uaGFuZGxlcihvKTtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyllLl9tZXJnZVJhbmdlcyhhLGlbdF0pfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9cmV0dXJuIHRoaXMuX3N0cmluZ1Jhbmdlc1RvQ2VsbFJhbmdlcyhhLHIsbiksYX1fc3RyaW5nUmFuZ2VzVG9DZWxsUmFuZ2VzKGUsdCxpKXtsZXQgcz0wLHI9ITEsbj0wLGE9ZVtzXTtpZihhKXtmb3IobGV0IGg9aTtoPHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scztoKyspe2NvbnN0IGk9dC5nZXRXaWR0aChoKSxjPXQuZ2V0U3RyaW5nKGgpLmxlbmd0aHx8by5XSElURVNQQUNFX0NFTExfQ0hBUi5sZW5ndGg7aWYoMCE9PWkpe2lmKCFyJiZhWzBdPD1uJiYoYVswXT1oLHI9ITApLGFbMV08PW4pe2lmKGFbMV09aCxhPWVbKytzXSwhYSlicmVhazthWzBdPD1uPyhhWzBdPWgscj0hMCk6cj0hMX1uKz1jfX1hJiYoYVsxXT10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpfX1zdGF0aWMgX21lcmdlUmFuZ2VzKGUsdCl7bGV0IGk9ITE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IHI9ZVtzXTtpZihpKXtpZih0WzFdPD1yWzBdKXJldHVybiBlW3MtMV1bMV09dFsxXSxlO2lmKHRbMV08PXJbMV0pcmV0dXJuIGVbcy0xXVsxXT1NYXRoLm1heCh0WzFdLHJbMV0pLGUuc3BsaWNlKHMsMSksZTtlLnNwbGljZShzLDEpLHMtLX1lbHNle2lmKHRbMV08PXJbMF0pcmV0dXJuIGUuc3BsaWNlKHMsMCx0KSxlO2lmKHRbMV08PXJbMV0pcmV0dXJuIHJbMF09TWF0aC5taW4odFswXSxyWzBdKSxlO3RbMF08clsxXSYmKHJbMF09TWF0aC5taW4odFswXSxyWzBdKSxpPSEwKX19cmV0dXJuIGk/ZVtlLmxlbmd0aC0xXVsxXT10WzFdOmUucHVzaCh0KSxlfX07dC5DaGFyYWN0ZXJKb2luZXJTZXJ2aWNlPWw9cyhbcigwLGguSUJ1ZmZlclNlcnZpY2UpXSxsKX0sNTExNDooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Db3JlQnJvd3NlclNlcnZpY2U9dm9pZCAwO2NvbnN0IHM9aSg4NDQpLHI9aSg4NDYwKSxuPWkoMzY1Nik7Y2xhc3MgbyBleHRlbmRzIHMuRGlzcG9zYWJsZXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoKSx0aGlzLl90ZXh0YXJlYT1lLHRoaXMuX3dpbmRvdz10LHRoaXMubWFpbkRvY3VtZW50PWksdGhpcy5faXNGb2N1c2VkPSExLHRoaXMuX2NhY2hlZElzRm9jdXNlZD12b2lkIDAsdGhpcy5fc2NyZWVuRHByTW9uaXRvcj1uZXcgYSh0aGlzLl93aW5kb3cpLHRoaXMuX29uRHByQ2hhbmdlPXRoaXMucmVnaXN0ZXIobmV3IHIuRXZlbnRFbWl0dGVyKSx0aGlzLm9uRHByQ2hhbmdlPXRoaXMuX29uRHByQ2hhbmdlLmV2ZW50LHRoaXMuX29uV2luZG93Q2hhbmdlPXRoaXMucmVnaXN0ZXIobmV3IHIuRXZlbnRFbWl0dGVyKSx0aGlzLm9uV2luZG93Q2hhbmdlPXRoaXMuX29uV2luZG93Q2hhbmdlLmV2ZW50LHRoaXMucmVnaXN0ZXIodGhpcy5vbldpbmRvd0NoYW5nZSgoZT0+dGhpcy5fc2NyZWVuRHByTW9uaXRvci5zZXRXaW5kb3coZSkpKSksdGhpcy5yZWdpc3RlcigoMCxyLmZvcndhcmRFdmVudCkodGhpcy5fc2NyZWVuRHByTW9uaXRvci5vbkRwckNoYW5nZSx0aGlzLl9vbkRwckNoYW5nZSkpLHRoaXMuX3RleHRhcmVhLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCgoKT0+dGhpcy5faXNGb2N1c2VkPSEwKSksdGhpcy5fdGV4dGFyZWEuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwoKCk9PnRoaXMuX2lzRm9jdXNlZD0hMSkpfWdldCB3aW5kb3coKXtyZXR1cm4gdGhpcy5fd2luZG93fXNldCB3aW5kb3coZSl7dGhpcy5fd2luZG93IT09ZSYmKHRoaXMuX3dpbmRvdz1lLHRoaXMuX29uV2luZG93Q2hhbmdlLmZpcmUodGhpcy5fd2luZG93KSl9Z2V0IGRwcigpe3JldHVybiB0aGlzLndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfWdldCBpc0ZvY3VzZWQoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkSXNGb2N1c2VkJiYodGhpcy5fY2FjaGVkSXNGb2N1c2VkPXRoaXMuX2lzRm9jdXNlZCYmdGhpcy5fdGV4dGFyZWEub3duZXJEb2N1bWVudC5oYXNGb2N1cygpLHF1ZXVlTWljcm90YXNrKCgoKT0+dGhpcy5fY2FjaGVkSXNGb2N1c2VkPXZvaWQgMCkpKSx0aGlzLl9jYWNoZWRJc0ZvY3VzZWR9fXQuQ29yZUJyb3dzZXJTZXJ2aWNlPW87Y2xhc3MgYSBleHRlbmRzIHMuRGlzcG9zYWJsZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX3BhcmVudFdpbmRvdz1lLHRoaXMuX3dpbmRvd1Jlc2l6ZUxpc3RlbmVyPXRoaXMucmVnaXN0ZXIobmV3IHMuTXV0YWJsZURpc3Bvc2FibGUpLHRoaXMuX29uRHByQ2hhbmdlPXRoaXMucmVnaXN0ZXIobmV3IHIuRXZlbnRFbWl0dGVyKSx0aGlzLm9uRHByQ2hhbmdlPXRoaXMuX29uRHByQ2hhbmdlLmV2ZW50LHRoaXMuX291dGVyTGlzdGVuZXI9KCk9PnRoaXMuX3NldERwckFuZEZpcmVJZkRpZmZlcnMoKSx0aGlzLl9jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbz10aGlzLl9wYXJlbnRXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLl91cGRhdGVEcHIoKSx0aGlzLl9zZXRXaW5kb3dSZXNpemVMaXN0ZW5lcigpLHRoaXMucmVnaXN0ZXIoKDAscy50b0Rpc3Bvc2FibGUpKCgoKT0+dGhpcy5jbGVhckxpc3RlbmVyKCkpKSl9c2V0V2luZG93KGUpe3RoaXMuX3BhcmVudFdpbmRvdz1lLHRoaXMuX3NldFdpbmRvd1Jlc2l6ZUxpc3RlbmVyKCksdGhpcy5fc2V0RHByQW5kRmlyZUlmRGlmZmVycygpfV9zZXRXaW5kb3dSZXNpemVMaXN0ZW5lcigpe3RoaXMuX3dpbmRvd1Jlc2l6ZUxpc3RlbmVyLnZhbHVlPSgwLG4uYWRkRGlzcG9zYWJsZURvbUxpc3RlbmVyKSh0aGlzLl9wYXJlbnRXaW5kb3csXCJyZXNpemVcIiwoKCk9PnRoaXMuX3NldERwckFuZEZpcmVJZkRpZmZlcnMoKSkpfV9zZXREcHJBbmRGaXJlSWZEaWZmZXJzKCl7dGhpcy5fcGFyZW50V2luZG93LmRldmljZVBpeGVsUmF0aW8hPT10aGlzLl9jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyYmdGhpcy5fb25EcHJDaGFuZ2UuZmlyZSh0aGlzLl9wYXJlbnRXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5fdXBkYXRlRHByKCl9X3VwZGF0ZURwcigpe3RoaXMuX291dGVyTGlzdGVuZXImJih0aGlzLl9yZXNvbHV0aW9uTWVkaWFNYXRjaExpc3Q/LnJlbW92ZUxpc3RlbmVyKHRoaXMuX291dGVyTGlzdGVuZXIpLHRoaXMuX2N1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXRoaXMuX3BhcmVudFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLHRoaXMuX3Jlc29sdXRpb25NZWRpYU1hdGNoTGlzdD10aGlzLl9wYXJlbnRXaW5kb3cubWF0Y2hNZWRpYShgc2NyZWVuIGFuZCAocmVzb2x1dGlvbjogJHt0aGlzLl9wYXJlbnRXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpb31kcHB4KWApLHRoaXMuX3Jlc29sdXRpb25NZWRpYU1hdGNoTGlzdC5hZGRMaXN0ZW5lcih0aGlzLl9vdXRlckxpc3RlbmVyKSl9Y2xlYXJMaXN0ZW5lcigpe3RoaXMuX3Jlc29sdXRpb25NZWRpYU1hdGNoTGlzdCYmdGhpcy5fb3V0ZXJMaXN0ZW5lciYmKHRoaXMuX3Jlc29sdXRpb25NZWRpYU1hdGNoTGlzdC5yZW1vdmVMaXN0ZW5lcih0aGlzLl9vdXRlckxpc3RlbmVyKSx0aGlzLl9yZXNvbHV0aW9uTWVkaWFNYXRjaExpc3Q9dm9pZCAwLHRoaXMuX291dGVyTGlzdGVuZXI9dm9pZCAwKX19fSw3Nzk6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuTGlua1Byb3ZpZGVyU2VydmljZT12b2lkIDA7Y29uc3Qgcz1pKDg0NCk7Y2xhc3MgciBleHRlbmRzIHMuRGlzcG9zYWJsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5saW5rUHJvdmlkZXJzPVtdLHRoaXMucmVnaXN0ZXIoKDAscy50b0Rpc3Bvc2FibGUpKCgoKT0+dGhpcy5saW5rUHJvdmlkZXJzLmxlbmd0aD0wKSkpfXJlZ2lzdGVyTGlua1Byb3ZpZGVyKGUpe3JldHVybiB0aGlzLmxpbmtQcm92aWRlcnMucHVzaChlKSx7ZGlzcG9zZTooKT0+e2NvbnN0IHQ9dGhpcy5saW5rUHJvdmlkZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLmxpbmtQcm92aWRlcnMuc3BsaWNlKHQsMSl9fX19dC5MaW5rUHJvdmlkZXJTZXJ2aWNlPXJ9LDg5MzQ6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LGkscyl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoLG89bjwzP3Q6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSk6cztpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlvPVJlZmxlY3QuZGVjb3JhdGUoZSx0LGkscyk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkocj1lW2FdKSYmKG89KG48Mz9yKG8pOm4+Mz9yKHQsaSxvKTpyKHQsaSkpfHxvKTtyZXR1cm4gbj4zJiZvJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG8pLG99LHI9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3QoaSxzLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Nb3VzZVNlcnZpY2U9dm9pZCAwO2NvbnN0IG49aSg0NzI1KSxvPWkoOTgwNik7bGV0IGE9dC5Nb3VzZVNlcnZpY2U9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9yZW5kZXJTZXJ2aWNlPWUsdGhpcy5fY2hhclNpemVTZXJ2aWNlPXR9Z2V0Q29vcmRzKGUsdCxpLHMscil7cmV0dXJuKDAsby5nZXRDb29yZHMpKHdpbmRvdyxlLHQsaSxzLHRoaXMuX2NoYXJTaXplU2VydmljZS5oYXNWYWxpZFNpemUsdGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jZWxsLndpZHRoLHRoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC5oZWlnaHQscil9Z2V0TW91c2VSZXBvcnRDb29yZHMoZSx0KXtjb25zdCBpPSgwLG8uZ2V0Q29vcmRzUmVsYXRpdmVUb0VsZW1lbnQpKHdpbmRvdyxlLHQpO2lmKHRoaXMuX2NoYXJTaXplU2VydmljZS5oYXNWYWxpZFNpemUpcmV0dXJuIGlbMF09TWF0aC5taW4oTWF0aC5tYXgoaVswXSwwKSx0aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY3NzLmNhbnZhcy53aWR0aC0xKSxpWzFdPU1hdGgubWluKE1hdGgubWF4KGlbMV0sMCksdGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jYW52YXMuaGVpZ2h0LTEpLHtjb2w6TWF0aC5mbG9vcihpWzBdL3RoaXMuX3JlbmRlclNlcnZpY2UuZGltZW5zaW9ucy5jc3MuY2VsbC53aWR0aCkscm93Ok1hdGguZmxvb3IoaVsxXS90aGlzLl9yZW5kZXJTZXJ2aWNlLmRpbWVuc2lvbnMuY3NzLmNlbGwuaGVpZ2h0KSx4Ok1hdGguZmxvb3IoaVswXSkseTpNYXRoLmZsb29yKGlbMV0pfX19O3QuTW91c2VTZXJ2aWNlPWE9cyhbcigwLG4uSVJlbmRlclNlcnZpY2UpLHIoMSxuLklDaGFyU2l6ZVNlcnZpY2UpXSxhKX0sMzIzMDpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlJlbmRlclNlcnZpY2U9dm9pZCAwO2NvbnN0IG49aSg2MTkzKSxvPWkoNDcyNSksYT1pKDg0NjApLGg9aSg4NDQpLGM9aSg3MjI2KSxsPWkoMjU4NSk7bGV0IGQ9dC5SZW5kZXJTZXJ2aWNlPWNsYXNzIGV4dGVuZHMgaC5EaXNwb3NhYmxle2dldCBkaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnZhbHVlLmRpbWVuc2lvbnN9Y29uc3RydWN0b3IoZSx0LGkscyxyLG8sbCxkKXtzdXBlcigpLHRoaXMuX3Jvd0NvdW50PWUsdGhpcy5fY2hhclNpemVTZXJ2aWNlPXMsdGhpcy5fcmVuZGVyZXI9dGhpcy5yZWdpc3RlcihuZXcgaC5NdXRhYmxlRGlzcG9zYWJsZSksdGhpcy5fcGF1c2VkUmVzaXplVGFzaz1uZXcgYy5EZWJvdW5jZWRJZGxlVGFzayx0aGlzLl9vYnNlcnZlckRpc3Bvc2FibGU9dGhpcy5yZWdpc3RlcihuZXcgaC5NdXRhYmxlRGlzcG9zYWJsZSksdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5fbmVlZHNGdWxsUmVmcmVzaD0hMSx0aGlzLl9pc05leHRSZW5kZXJSZWRyYXdPbmx5PSEwLHRoaXMuX25lZWRzU2VsZWN0aW9uUmVmcmVzaD0hMSx0aGlzLl9jYW52YXNXaWR0aD0wLHRoaXMuX2NhbnZhc0hlaWdodD0wLHRoaXMuX3NlbGVjdGlvblN0YXRlPXtzdGFydDp2b2lkIDAsZW5kOnZvaWQgMCxjb2x1bW5TZWxlY3RNb2RlOiExfSx0aGlzLl9vbkRpbWVuc2lvbnNDaGFuZ2U9dGhpcy5yZWdpc3RlcihuZXcgYS5FdmVudEVtaXR0ZXIpLHRoaXMub25EaW1lbnNpb25zQ2hhbmdlPXRoaXMuX29uRGltZW5zaW9uc0NoYW5nZS5ldmVudCx0aGlzLl9vblJlbmRlcmVkVmlld3BvcnRDaGFuZ2U9dGhpcy5yZWdpc3RlcihuZXcgYS5FdmVudEVtaXR0ZXIpLHRoaXMub25SZW5kZXJlZFZpZXdwb3J0Q2hhbmdlPXRoaXMuX29uUmVuZGVyZWRWaWV3cG9ydENoYW5nZS5ldmVudCx0aGlzLl9vblJlbmRlcj10aGlzLnJlZ2lzdGVyKG5ldyBhLkV2ZW50RW1pdHRlciksdGhpcy5vblJlbmRlcj10aGlzLl9vblJlbmRlci5ldmVudCx0aGlzLl9vblJlZnJlc2hSZXF1ZXN0PXRoaXMucmVnaXN0ZXIobmV3IGEuRXZlbnRFbWl0dGVyKSx0aGlzLm9uUmVmcmVzaFJlcXVlc3Q9dGhpcy5fb25SZWZyZXNoUmVxdWVzdC5ldmVudCx0aGlzLl9yZW5kZXJEZWJvdW5jZXI9bmV3IG4uUmVuZGVyRGVib3VuY2VyKCgoZSx0KT0+dGhpcy5fcmVuZGVyUm93cyhlLHQpKSxsKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX3JlbmRlckRlYm91bmNlciksdGhpcy5yZWdpc3RlcihsLm9uRHByQ2hhbmdlKCgoKT0+dGhpcy5oYW5kbGVEZXZpY2VQaXhlbFJhdGlvQ2hhbmdlKCkpKSksdGhpcy5yZWdpc3RlcihvLm9uUmVzaXplKCgoKT0+dGhpcy5fZnVsbFJlZnJlc2goKSkpKSx0aGlzLnJlZ2lzdGVyKG8uYnVmZmVycy5vbkJ1ZmZlckFjdGl2YXRlKCgoKT0+dGhpcy5fcmVuZGVyZXIudmFsdWU/LmNsZWFyKCkpKSksdGhpcy5yZWdpc3RlcihpLm9uT3B0aW9uQ2hhbmdlKCgoKT0+dGhpcy5faGFuZGxlT3B0aW9uc0NoYW5nZWQoKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2NoYXJTaXplU2VydmljZS5vbkNoYXJTaXplQ2hhbmdlKCgoKT0+dGhpcy5oYW5kbGVDaGFyU2l6ZUNoYW5nZWQoKSkpKSx0aGlzLnJlZ2lzdGVyKHIub25EZWNvcmF0aW9uUmVnaXN0ZXJlZCgoKCk9PnRoaXMuX2Z1bGxSZWZyZXNoKCkpKSksdGhpcy5yZWdpc3RlcihyLm9uRGVjb3JhdGlvblJlbW92ZWQoKCgpPT50aGlzLl9mdWxsUmVmcmVzaCgpKSkpLHRoaXMucmVnaXN0ZXIoaS5vbk11bHRpcGxlT3B0aW9uQ2hhbmdlKFtcImN1c3RvbUdseXBoc1wiLFwiZHJhd0JvbGRUZXh0SW5CcmlnaHRDb2xvcnNcIixcImxldHRlclNwYWNpbmdcIixcImxpbmVIZWlnaHRcIixcImZvbnRGYW1pbHlcIixcImZvbnRTaXplXCIsXCJmb250V2VpZ2h0XCIsXCJmb250V2VpZ2h0Qm9sZFwiLFwibWluaW11bUNvbnRyYXN0UmF0aW9cIixcInJlc2NhbGVPdmVybGFwcGluZ0dseXBoc1wiXSwoKCk9Pnt0aGlzLmNsZWFyKCksdGhpcy5oYW5kbGVSZXNpemUoby5jb2xzLG8ucm93cyksdGhpcy5fZnVsbFJlZnJlc2goKX0pKSksdGhpcy5yZWdpc3RlcihpLm9uTXVsdGlwbGVPcHRpb25DaGFuZ2UoW1wiY3Vyc29yQmxpbmtcIixcImN1cnNvclN0eWxlXCJdLCgoKT0+dGhpcy5yZWZyZXNoUm93cyhvLmJ1ZmZlci55LG8uYnVmZmVyLnksITApKSkpLHRoaXMucmVnaXN0ZXIoZC5vbkNoYW5nZUNvbG9ycygoKCk9PnRoaXMuX2Z1bGxSZWZyZXNoKCkpKSksdGhpcy5fcmVnaXN0ZXJJbnRlcnNlY3Rpb25PYnNlcnZlcihsLndpbmRvdyx0KSx0aGlzLnJlZ2lzdGVyKGwub25XaW5kb3dDaGFuZ2UoKGU9PnRoaXMuX3JlZ2lzdGVySW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZSx0KSkpKX1fcmVnaXN0ZXJJbnRlcnNlY3Rpb25PYnNlcnZlcihlLHQpe2lmKFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcImluIGUpe2NvbnN0IGk9bmV3IGUuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGU9PnRoaXMuX2hhbmRsZUludGVyc2VjdGlvbkNoYW5nZShlW2UubGVuZ3RoLTFdKSkse3RocmVzaG9sZDowfSk7aS5vYnNlcnZlKHQpLHRoaXMuX29ic2VydmVyRGlzcG9zYWJsZS52YWx1ZT0oMCxoLnRvRGlzcG9zYWJsZSkoKCgpPT5pLmRpc2Nvbm5lY3QoKSkpfX1faGFuZGxlSW50ZXJzZWN0aW9uQ2hhbmdlKGUpe3RoaXMuX2lzUGF1c2VkPXZvaWQgMD09PWUuaXNJbnRlcnNlY3Rpbmc/MD09PWUuaW50ZXJzZWN0aW9uUmF0aW86IWUuaXNJbnRlcnNlY3RpbmcsdGhpcy5faXNQYXVzZWR8fHRoaXMuX2NoYXJTaXplU2VydmljZS5oYXNWYWxpZFNpemV8fHRoaXMuX2NoYXJTaXplU2VydmljZS5tZWFzdXJlKCksIXRoaXMuX2lzUGF1c2VkJiZ0aGlzLl9uZWVkc0Z1bGxSZWZyZXNoJiYodGhpcy5fcGF1c2VkUmVzaXplVGFzay5mbHVzaCgpLHRoaXMucmVmcmVzaFJvd3MoMCx0aGlzLl9yb3dDb3VudC0xKSx0aGlzLl9uZWVkc0Z1bGxSZWZyZXNoPSExKX1yZWZyZXNoUm93cyhlLHQsaT0hMSl7dGhpcy5faXNQYXVzZWQ/dGhpcy5fbmVlZHNGdWxsUmVmcmVzaD0hMDooaXx8KHRoaXMuX2lzTmV4dFJlbmRlclJlZHJhd09ubHk9ITEpLHRoaXMuX3JlbmRlckRlYm91bmNlci5yZWZyZXNoKGUsdCx0aGlzLl9yb3dDb3VudCkpfV9yZW5kZXJSb3dzKGUsdCl7dGhpcy5fcmVuZGVyZXIudmFsdWUmJihlPU1hdGgubWluKGUsdGhpcy5fcm93Q291bnQtMSksdD1NYXRoLm1pbih0LHRoaXMuX3Jvd0NvdW50LTEpLHRoaXMuX3JlbmRlcmVyLnZhbHVlLnJlbmRlclJvd3MoZSx0KSx0aGlzLl9uZWVkc1NlbGVjdGlvblJlZnJlc2gmJih0aGlzLl9yZW5kZXJlci52YWx1ZS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2VkKHRoaXMuX3NlbGVjdGlvblN0YXRlLnN0YXJ0LHRoaXMuX3NlbGVjdGlvblN0YXRlLmVuZCx0aGlzLl9zZWxlY3Rpb25TdGF0ZS5jb2x1bW5TZWxlY3RNb2RlKSx0aGlzLl9uZWVkc1NlbGVjdGlvblJlZnJlc2g9ITEpLHRoaXMuX2lzTmV4dFJlbmRlclJlZHJhd09ubHl8fHRoaXMuX29uUmVuZGVyZWRWaWV3cG9ydENoYW5nZS5maXJlKHtzdGFydDplLGVuZDp0fSksdGhpcy5fb25SZW5kZXIuZmlyZSh7c3RhcnQ6ZSxlbmQ6dH0pLHRoaXMuX2lzTmV4dFJlbmRlclJlZHJhd09ubHk9ITApfXJlc2l6ZShlLHQpe3RoaXMuX3Jvd0NvdW50PXQsdGhpcy5fZmlyZU9uQ2FudmFzUmVzaXplKCl9X2hhbmRsZU9wdGlvbnNDaGFuZ2VkKCl7dGhpcy5fcmVuZGVyZXIudmFsdWUmJih0aGlzLnJlZnJlc2hSb3dzKDAsdGhpcy5fcm93Q291bnQtMSksdGhpcy5fZmlyZU9uQ2FudmFzUmVzaXplKCkpfV9maXJlT25DYW52YXNSZXNpemUoKXt0aGlzLl9yZW5kZXJlci52YWx1ZSYmKHRoaXMuX3JlbmRlcmVyLnZhbHVlLmRpbWVuc2lvbnMuY3NzLmNhbnZhcy53aWR0aD09PXRoaXMuX2NhbnZhc1dpZHRoJiZ0aGlzLl9yZW5kZXJlci52YWx1ZS5kaW1lbnNpb25zLmNzcy5jYW52YXMuaGVpZ2h0PT09dGhpcy5fY2FudmFzSGVpZ2h0fHx0aGlzLl9vbkRpbWVuc2lvbnNDaGFuZ2UuZmlyZSh0aGlzLl9yZW5kZXJlci52YWx1ZS5kaW1lbnNpb25zKSl9aGFzUmVuZGVyZXIoKXtyZXR1cm4hIXRoaXMuX3JlbmRlcmVyLnZhbHVlfXNldFJlbmRlcmVyKGUpe3RoaXMuX3JlbmRlcmVyLnZhbHVlPWUsdGhpcy5fcmVuZGVyZXIudmFsdWUmJih0aGlzLl9yZW5kZXJlci52YWx1ZS5vblJlcXVlc3RSZWRyYXcoKGU9PnRoaXMucmVmcmVzaFJvd3MoZS5zdGFydCxlLmVuZCwhMCkpKSx0aGlzLl9uZWVkc1NlbGVjdGlvblJlZnJlc2g9ITAsdGhpcy5fZnVsbFJlZnJlc2goKSl9YWRkUmVmcmVzaENhbGxiYWNrKGUpe3JldHVybiB0aGlzLl9yZW5kZXJEZWJvdW5jZXIuYWRkUmVmcmVzaENhbGxiYWNrKGUpfV9mdWxsUmVmcmVzaCgpe3RoaXMuX2lzUGF1c2VkP3RoaXMuX25lZWRzRnVsbFJlZnJlc2g9ITA6dGhpcy5yZWZyZXNoUm93cygwLHRoaXMuX3Jvd0NvdW50LTEpfWNsZWFyVGV4dHVyZUF0bGFzKCl7dGhpcy5fcmVuZGVyZXIudmFsdWUmJih0aGlzLl9yZW5kZXJlci52YWx1ZS5jbGVhclRleHR1cmVBdGxhcz8uKCksdGhpcy5fZnVsbFJlZnJlc2goKSl9aGFuZGxlRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZSgpe3RoaXMuX2NoYXJTaXplU2VydmljZS5tZWFzdXJlKCksdGhpcy5fcmVuZGVyZXIudmFsdWUmJih0aGlzLl9yZW5kZXJlci52YWx1ZS5oYW5kbGVEZXZpY2VQaXhlbFJhdGlvQ2hhbmdlKCksdGhpcy5yZWZyZXNoUm93cygwLHRoaXMuX3Jvd0NvdW50LTEpKX1oYW5kbGVSZXNpemUoZSx0KXt0aGlzLl9yZW5kZXJlci52YWx1ZSYmKHRoaXMuX2lzUGF1c2VkP3RoaXMuX3BhdXNlZFJlc2l6ZVRhc2suc2V0KCgoKT0+dGhpcy5fcmVuZGVyZXIudmFsdWU/LmhhbmRsZVJlc2l6ZShlLHQpKSk6dGhpcy5fcmVuZGVyZXIudmFsdWUuaGFuZGxlUmVzaXplKGUsdCksdGhpcy5fZnVsbFJlZnJlc2goKSl9aGFuZGxlQ2hhclNpemVDaGFuZ2VkKCl7dGhpcy5fcmVuZGVyZXIudmFsdWU/LmhhbmRsZUNoYXJTaXplQ2hhbmdlZCgpfWhhbmRsZUJsdXIoKXt0aGlzLl9yZW5kZXJlci52YWx1ZT8uaGFuZGxlQmx1cigpfWhhbmRsZUZvY3VzKCl7dGhpcy5fcmVuZGVyZXIudmFsdWU/LmhhbmRsZUZvY3VzKCl9aGFuZGxlU2VsZWN0aW9uQ2hhbmdlZChlLHQsaSl7dGhpcy5fc2VsZWN0aW9uU3RhdGUuc3RhcnQ9ZSx0aGlzLl9zZWxlY3Rpb25TdGF0ZS5lbmQ9dCx0aGlzLl9zZWxlY3Rpb25TdGF0ZS5jb2x1bW5TZWxlY3RNb2RlPWksdGhpcy5fcmVuZGVyZXIudmFsdWU/LmhhbmRsZVNlbGVjdGlvbkNoYW5nZWQoZSx0LGkpfWhhbmRsZUN1cnNvck1vdmUoKXt0aGlzLl9yZW5kZXJlci52YWx1ZT8uaGFuZGxlQ3Vyc29yTW92ZSgpfWNsZWFyKCl7dGhpcy5fcmVuZGVyZXIudmFsdWU/LmNsZWFyKCl9fTt0LlJlbmRlclNlcnZpY2U9ZD1zKFtyKDIsbC5JT3B0aW9uc1NlcnZpY2UpLHIoMyxvLklDaGFyU2l6ZVNlcnZpY2UpLHIoNCxsLklEZWNvcmF0aW9uU2VydmljZSkscig1LGwuSUJ1ZmZlclNlcnZpY2UpLHIoNixvLklDb3JlQnJvd3NlclNlcnZpY2UpLHIoNyxvLklUaGVtZVNlcnZpY2UpXSxkKX0sOTMxMjpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlNlbGVjdGlvblNlcnZpY2U9dm9pZCAwO2NvbnN0IG49aSg5ODA2KSxvPWkoOTUwNCksYT1pKDQ1NiksaD1pKDQ3MjUpLGM9aSg4NDYwKSxsPWkoODQ0KSxkPWkoNjExNCksXz1pKDQ4NDEpLHU9aSg1MTEpLGY9aSgyNTg1KSx2PVN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSxwPW5ldyBSZWdFeHAodixcImdcIik7bGV0IGc9dC5TZWxlY3Rpb25TZXJ2aWNlPWNsYXNzIGV4dGVuZHMgbC5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGUsdCxpLHMscixuLG8saCxkKXtzdXBlcigpLHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zY3JlZW5FbGVtZW50PXQsdGhpcy5fbGlua2lmaWVyPWksdGhpcy5fYnVmZmVyU2VydmljZT1zLHRoaXMuX2NvcmVTZXJ2aWNlPXIsdGhpcy5fbW91c2VTZXJ2aWNlPW4sdGhpcy5fb3B0aW9uc1NlcnZpY2U9byx0aGlzLl9yZW5kZXJTZXJ2aWNlPWgsdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlPWQsdGhpcy5fZHJhZ1Njcm9sbEFtb3VudD0wLHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5fd29ya0NlbGw9bmV3IHUuQ2VsbERhdGEsdGhpcy5fbW91c2VEb3duVGltZVN0YW1wPTAsdGhpcy5fb2xkSGFzU2VsZWN0aW9uPSExLHRoaXMuX29sZFNlbGVjdGlvblN0YXJ0PXZvaWQgMCx0aGlzLl9vbGRTZWxlY3Rpb25FbmQ9dm9pZCAwLHRoaXMuX29uTGludXhNb3VzZVNlbGVjdGlvbj10aGlzLnJlZ2lzdGVyKG5ldyBjLkV2ZW50RW1pdHRlciksdGhpcy5vbkxpbnV4TW91c2VTZWxlY3Rpb249dGhpcy5fb25MaW51eE1vdXNlU2VsZWN0aW9uLmV2ZW50LHRoaXMuX29uUmVkcmF3UmVxdWVzdD10aGlzLnJlZ2lzdGVyKG5ldyBjLkV2ZW50RW1pdHRlciksdGhpcy5vblJlcXVlc3RSZWRyYXc9dGhpcy5fb25SZWRyYXdSZXF1ZXN0LmV2ZW50LHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlPXRoaXMucmVnaXN0ZXIobmV3IGMuRXZlbnRFbWl0dGVyKSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPXRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlLmV2ZW50LHRoaXMuX29uUmVxdWVzdFNjcm9sbExpbmVzPXRoaXMucmVnaXN0ZXIobmV3IGMuRXZlbnRFbWl0dGVyKSx0aGlzLm9uUmVxdWVzdFNjcm9sbExpbmVzPXRoaXMuX29uUmVxdWVzdFNjcm9sbExpbmVzLmV2ZW50LHRoaXMuX21vdXNlTW92ZUxpc3RlbmVyPWU9PnRoaXMuX2hhbmRsZU1vdXNlTW92ZShlKSx0aGlzLl9tb3VzZVVwTGlzdGVuZXI9ZT0+dGhpcy5faGFuZGxlTW91c2VVcChlKSx0aGlzLl9jb3JlU2VydmljZS5vblVzZXJJbnB1dCgoKCk9Pnt0aGlzLmhhc1NlbGVjdGlvbiYmdGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuX3RyaW1MaXN0ZW5lcj10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5saW5lcy5vblRyaW0oKGU9PnRoaXMuX2hhbmRsZVRyaW0oZSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVycy5vbkJ1ZmZlckFjdGl2YXRlKChlPT50aGlzLl9oYW5kbGVCdWZmZXJBY3RpdmF0ZShlKSkpKSx0aGlzLmVuYWJsZSgpLHRoaXMuX21vZGVsPW5ldyBhLlNlbGVjdGlvbk1vZGVsKHRoaXMuX2J1ZmZlclNlcnZpY2UpLHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGU9MCx0aGlzLnJlZ2lzdGVyKCgwLGwudG9EaXNwb3NhYmxlKSgoKCk9Pnt0aGlzLl9yZW1vdmVNb3VzZURvd25MaXN0ZW5lcnMoKX0pKSl9cmVzZXQoKXt0aGlzLmNsZWFyU2VsZWN0aW9uKCl9ZGlzYWJsZSgpe3RoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9lbmFibGVkPSExfWVuYWJsZSgpe3RoaXMuX2VuYWJsZWQ9ITB9Z2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uU3RhcnR9Z2V0IHNlbGVjdGlvbkVuZCgpe3JldHVybiB0aGlzLl9tb2RlbC5maW5hbFNlbGVjdGlvbkVuZH1nZXQgaGFzU2VsZWN0aW9uKCl7Y29uc3QgZT10aGlzLl9tb2RlbC5maW5hbFNlbGVjdGlvblN0YXJ0LHQ9dGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25FbmQ7cmV0dXJuISghZXx8IXR8fGVbMF09PT10WzBdJiZlWzFdPT09dFsxXSl9Z2V0IHNlbGVjdGlvblRleHQoKXtjb25zdCBlPXRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uU3RhcnQsdD10aGlzLl9tb2RlbC5maW5hbFNlbGVjdGlvbkVuZDtpZighZXx8IXQpcmV0dXJuXCJcIjtjb25zdCBpPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLHM9W107aWYoMz09PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGUpe2lmKGVbMF09PT10WzBdKXJldHVyblwiXCI7Y29uc3Qgcj1lWzBdPHRbMF0/ZVswXTp0WzBdLG49ZVswXTx0WzBdP3RbMF06ZVswXTtmb3IobGV0IG89ZVsxXTtvPD10WzFdO28rKyl7Y29uc3QgZT1pLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhvLCEwLHIsbik7cy5wdXNoKGUpfX1lbHNle2NvbnN0IHI9ZVsxXT09PXRbMV0/dFswXTp2b2lkIDA7cy5wdXNoKGkudHJhbnNsYXRlQnVmZmVyTGluZVRvU3RyaW5nKGVbMV0sITAsZVswXSxyKSk7Zm9yKGxldCByPWVbMV0rMTtyPD10WzFdLTE7cisrKXtjb25zdCBlPWkubGluZXMuZ2V0KHIpLHQ9aS50cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmcociwhMCk7ZT8uaXNXcmFwcGVkP3Nbcy5sZW5ndGgtMV0rPXQ6cy5wdXNoKHQpfWlmKGVbMV0hPT10WzFdKXtjb25zdCBlPWkubGluZXMuZ2V0KHRbMV0pLHI9aS50cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmcodFsxXSwhMCwwLHRbMF0pO2UmJmUuaXNXcmFwcGVkP3Nbcy5sZW5ndGgtMV0rPXI6cy5wdXNoKHIpfX1yZXR1cm4gcy5tYXAoKGU9PmUucmVwbGFjZShwLFwiIFwiKSkpLmpvaW4oZC5pc1dpbmRvd3M/XCJcXHJcXG5cIjpcIlxcblwiKX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX21vZGVsLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5fcmVtb3ZlTW91c2VEb3duTGlzdGVuZXJzKCksdGhpcy5yZWZyZXNoKCksdGhpcy5fb25TZWxlY3Rpb25DaGFuZ2UuZmlyZSgpfXJlZnJlc2goZSl7dGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lfHwodGhpcy5fcmVmcmVzaEFuaW1hdGlvbkZyYW1lPXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS53aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5fcmVmcmVzaCgpKSkpLGQuaXNMaW51eCYmZSYmdGhpcy5zZWxlY3Rpb25UZXh0Lmxlbmd0aCYmdGhpcy5fb25MaW51eE1vdXNlU2VsZWN0aW9uLmZpcmUodGhpcy5zZWxlY3Rpb25UZXh0KX1fcmVmcmVzaCgpe3RoaXMuX3JlZnJlc2hBbmltYXRpb25GcmFtZT12b2lkIDAsdGhpcy5fb25SZWRyYXdSZXF1ZXN0LmZpcmUoe3N0YXJ0OnRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uU3RhcnQsZW5kOnRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uRW5kLGNvbHVtblNlbGVjdE1vZGU6Mz09PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGV9KX1faXNDbGlja0luU2VsZWN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5fZ2V0TW91c2VCdWZmZXJDb29yZHMoZSksaT10aGlzLl9tb2RlbC5maW5hbFNlbGVjdGlvblN0YXJ0LHM9dGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25FbmQ7cmV0dXJuISEoaSYmcyYmdCkmJnRoaXMuX2FyZUNvb3Jkc0luU2VsZWN0aW9uKHQsaSxzKX1pc0NlbGxJblNlbGVjdGlvbihlLHQpe2NvbnN0IGk9dGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25TdGFydCxzPXRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uRW5kO3JldHVybiEoIWl8fCFzKSYmdGhpcy5fYXJlQ29vcmRzSW5TZWxlY3Rpb24oW2UsdF0saSxzKX1fYXJlQ29vcmRzSW5TZWxlY3Rpb24oZSx0LGkpe3JldHVybiBlWzFdPnRbMV0mJmVbMV08aVsxXXx8dFsxXT09PWlbMV0mJmVbMV09PT10WzFdJiZlWzBdPj10WzBdJiZlWzBdPGlbMF18fHRbMV08aVsxXSYmZVsxXT09PWlbMV0mJmVbMF08aVswXXx8dFsxXTxpWzFdJiZlWzFdPT09dFsxXSYmZVswXT49dFswXX1fc2VsZWN0V29yZEF0Q3Vyc29yKGUsdCl7Y29uc3QgaT10aGlzLl9saW5raWZpZXIuY3VycmVudExpbms/Lmxpbms/LnJhbmdlO2lmKGkpcmV0dXJuIHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0PVtpLnN0YXJ0LngtMSxpLnN0YXJ0LnktMV0sdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnRMZW5ndGg9KDAsXy5nZXRSYW5nZUxlbmd0aCkoaSx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpLHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD12b2lkIDAsITA7Y29uc3Qgcz10aGlzLl9nZXRNb3VzZUJ1ZmZlckNvb3JkcyhlKTtyZXR1cm4hIXMmJih0aGlzLl9zZWxlY3RXb3JkQXQocyx0KSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9dm9pZCAwLCEwKX1zZWxlY3RBbGwoKXt0aGlzLl9tb2RlbC5pc1NlbGVjdEFsbEFjdGl2ZT0hMCx0aGlzLnJlZnJlc2goKSx0aGlzLl9vblNlbGVjdGlvbkNoYW5nZS5maXJlKCl9c2VsZWN0TGluZXMoZSx0KXt0aGlzLl9tb2RlbC5jbGVhclNlbGVjdGlvbigpLGU9TWF0aC5tYXgoZSwwKSx0PU1hdGgubWluKHQsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIubGluZXMubGVuZ3RoLTEpLHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0PVswLGVdLHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD1bdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHRdLHRoaXMucmVmcmVzaCgpLHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlLmZpcmUoKX1faGFuZGxlVHJpbShlKXt0aGlzLl9tb2RlbC5oYW5kbGVUcmltKGUpJiZ0aGlzLnJlZnJlc2goKX1fZ2V0TW91c2VCdWZmZXJDb29yZHMoZSl7Y29uc3QgdD10aGlzLl9tb3VzZVNlcnZpY2UuZ2V0Q29vcmRzKGUsdGhpcy5fc2NyZWVuRWxlbWVudCx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLCEwKTtpZih0KXJldHVybiB0WzBdLS0sdFsxXS0tLHRbMV0rPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwLHR9X2dldE1vdXNlRXZlbnRTY3JvbGxBbW91bnQoZSl7bGV0IHQ9KDAsbi5nZXRDb29yZHNSZWxhdGl2ZVRvRWxlbWVudCkodGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLndpbmRvdyxlLHRoaXMuX3NjcmVlbkVsZW1lbnQpWzFdO2NvbnN0IGk9dGhpcy5fcmVuZGVyU2VydmljZS5kaW1lbnNpb25zLmNzcy5jYW52YXMuaGVpZ2h0O3JldHVybiB0Pj0wJiZ0PD1pPzA6KHQ+aSYmKHQtPWkpLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwtNTApLDUwKSx0Lz01MCx0L01hdGguYWJzKHQpK01hdGgucm91bmQoMTQqdCkpfXNob3VsZEZvcmNlU2VsZWN0aW9uKGUpe3JldHVybiBkLmlzTWFjP2UuYWx0S2V5JiZ0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLm1hY09wdGlvbkNsaWNrRm9yY2VzU2VsZWN0aW9uOmUuc2hpZnRLZXl9aGFuZGxlTW91c2VEb3duKGUpe2lmKHRoaXMuX21vdXNlRG93blRpbWVTdGFtcD1lLnRpbWVTdGFtcCwoMiE9PWUuYnV0dG9ufHwhdGhpcy5oYXNTZWxlY3Rpb24pJiYwPT09ZS5idXR0b24pe2lmKCF0aGlzLl9lbmFibGVkKXtpZighdGhpcy5zaG91bGRGb3JjZVNlbGVjdGlvbihlKSlyZXR1cm47ZS5zdG9wUHJvcGFnYXRpb24oKX1lLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ1Njcm9sbEFtb3VudD0wLHRoaXMuX2VuYWJsZWQmJmUuc2hpZnRLZXk/dGhpcy5faGFuZGxlSW5jcmVtZW50YWxDbGljayhlKToxPT09ZS5kZXRhaWw/dGhpcy5faGFuZGxlU2luZ2xlQ2xpY2soZSk6Mj09PWUuZGV0YWlsP3RoaXMuX2hhbmRsZURvdWJsZUNsaWNrKGUpOjM9PT1lLmRldGFpbCYmdGhpcy5faGFuZGxlVHJpcGxlQ2xpY2soZSksdGhpcy5fYWRkTW91c2VEb3duTGlzdGVuZXJzKCksdGhpcy5yZWZyZXNoKCEwKX19X2FkZE1vdXNlRG93bkxpc3RlbmVycygpe3RoaXMuX3NjcmVlbkVsZW1lbnQub3duZXJEb2N1bWVudCYmKHRoaXMuX3NjcmVlbkVsZW1lbnQub3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5fbW91c2VNb3ZlTGlzdGVuZXIpLHRoaXMuX3NjcmVlbkVsZW1lbnQub3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuX21vdXNlVXBMaXN0ZW5lcikpLHRoaXMuX2RyYWdTY3JvbGxJbnRlcnZhbFRpbWVyPXRoaXMuX2NvcmVCcm93c2VyU2VydmljZS53aW5kb3cuc2V0SW50ZXJ2YWwoKCgpPT50aGlzLl9kcmFnU2Nyb2xsKCkpLDUwKX1fcmVtb3ZlTW91c2VEb3duTGlzdGVuZXJzKCl7dGhpcy5fc2NyZWVuRWxlbWVudC5vd25lckRvY3VtZW50JiYodGhpcy5fc2NyZWVuRWxlbWVudC5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLl9tb3VzZU1vdmVMaXN0ZW5lciksdGhpcy5fc2NyZWVuRWxlbWVudC5vd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5fbW91c2VVcExpc3RlbmVyKSksdGhpcy5fY29yZUJyb3dzZXJTZXJ2aWNlLndpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX2RyYWdTY3JvbGxJbnRlcnZhbFRpbWVyKSx0aGlzLl9kcmFnU2Nyb2xsSW50ZXJ2YWxUaW1lcj12b2lkIDB9X2hhbmRsZUluY3JlbWVudGFsQ2xpY2soZSl7dGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQmJih0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQ9dGhpcy5fZ2V0TW91c2VCdWZmZXJDb29yZHMoZSkpfV9oYW5kbGVTaW5nbGVDbGljayhlKXtpZih0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydExlbmd0aD0wLHRoaXMuX21vZGVsLmlzU2VsZWN0QWxsQWN0aXZlPSExLHRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGU9dGhpcy5zaG91bGRDb2x1bW5TZWxlY3QoZSk/MzowLHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0PXRoaXMuX2dldE1vdXNlQnVmZmVyQ29vcmRzKGUpLCF0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydClyZXR1cm47dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kPXZvaWQgMDtjb25zdCB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmxpbmVzLmdldCh0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydFsxXSk7dCYmdC5sZW5ndGghPT10aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydFswXSYmMD09PXQuaGFzV2lkdGgodGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnRbMF0pJiZ0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydFswXSsrfV9oYW5kbGVEb3VibGVDbGljayhlKXt0aGlzLl9zZWxlY3RXb3JkQXRDdXJzb3IoZSwhMCkmJih0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlPTEpfV9oYW5kbGVUcmlwbGVDbGljayhlKXtjb25zdCB0PXRoaXMuX2dldE1vdXNlQnVmZmVyQ29vcmRzKGUpO3QmJih0aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlPTIsdGhpcy5fc2VsZWN0TGluZUF0KHRbMV0pKX1zaG91bGRDb2x1bW5TZWxlY3QoZSl7cmV0dXJuIGUuYWx0S2V5JiYhKGQuaXNNYWMmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMubWFjT3B0aW9uQ2xpY2tGb3JjZXNTZWxlY3Rpb24pfV9oYW5kbGVNb3VzZU1vdmUoZSl7aWYoZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kP1t0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF0sdGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzFdXTpudWxsO2lmKHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD10aGlzLl9nZXRNb3VzZUJ1ZmZlckNvb3JkcyhlKSwhdGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kKXJldHVybiB2b2lkIHRoaXMucmVmcmVzaCghMCk7Mj09PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGU/dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzFdPHRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0WzFdP3RoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXT0wOnRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXT10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM6MT09PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGUmJnRoaXMuX3NlbGVjdFRvV29yZEF0KHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZCksdGhpcy5fZHJhZ1Njcm9sbEFtb3VudD10aGlzLl9nZXRNb3VzZUV2ZW50U2Nyb2xsQW1vdW50KGUpLDMhPT10aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlJiYodGhpcy5fZHJhZ1Njcm9sbEFtb3VudD4wP3RoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXT10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHM6dGhpcy5fZHJhZ1Njcm9sbEFtb3VudDwwJiYodGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdPTApKTtjb25zdCBpPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO2lmKHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFsxXTxpLmxpbmVzLmxlbmd0aCl7Y29uc3QgZT1pLmxpbmVzLmdldCh0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMV0pO2UmJjA9PT1lLmhhc1dpZHRoKHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXSkmJnRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXTx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMmJnRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZFswXSsrfXQmJnRbMF09PT10aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF0mJnRbMV09PT10aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMV18fHRoaXMucmVmcmVzaCghMCl9X2RyYWdTY3JvbGwoKXtpZih0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmQmJnRoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0JiZ0aGlzLl9kcmFnU2Nyb2xsQW1vdW50KXt0aGlzLl9vblJlcXVlc3RTY3JvbGxMaW5lcy5maXJlKHthbW91bnQ6dGhpcy5fZHJhZ1Njcm9sbEFtb3VudCxzdXBwcmVzc1Njcm9sbEV2ZW50OiExfSk7Y29uc3QgZT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjt0aGlzLl9kcmFnU2Nyb2xsQW1vdW50PjA/KDMhPT10aGlzLl9hY3RpdmVTZWxlY3Rpb25Nb2RlJiYodGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzBdPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyksdGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzFdPU1hdGgubWluKGUueWRpc3ArdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLGUubGluZXMubGVuZ3RoLTEpKTooMyE9PXRoaXMuX2FjdGl2ZVNlbGVjdGlvbk1vZGUmJih0aGlzLl9tb2RlbC5zZWxlY3Rpb25FbmRbMF09MCksdGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kWzFdPWUueWRpc3ApLHRoaXMucmVmcmVzaCgpfX1faGFuZGxlTW91c2VVcChlKXtjb25zdCB0PWUudGltZVN0YW1wLXRoaXMuX21vdXNlRG93blRpbWVTdGFtcDtpZih0aGlzLl9yZW1vdmVNb3VzZURvd25MaXN0ZW5lcnMoKSx0aGlzLnNlbGVjdGlvblRleHQubGVuZ3RoPD0xJiZ0PDUwMCYmZS5hbHRLZXkmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuYWx0Q2xpY2tNb3Zlc0N1cnNvcil7aWYodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWJhc2U9PT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCl7Y29uc3QgdD10aGlzLl9tb3VzZVNlcnZpY2UuZ2V0Q29vcmRzKGUsdGhpcy5fZWxlbWVudCx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLCExKTtpZih0JiZ2b2lkIDAhPT10WzBdJiZ2b2lkIDAhPT10WzFdKXtjb25zdCBlPSgwLG8ubW92ZVRvQ2VsbFNlcXVlbmNlKSh0WzBdLTEsdFsxXS0xLHRoaXMuX2J1ZmZlclNlcnZpY2UsdGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmFwcGxpY2F0aW9uQ3Vyc29yS2V5cyk7dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChlLCEwKX19fWVsc2UgdGhpcy5fZmlyZUV2ZW50SWZTZWxlY3Rpb25DaGFuZ2VkKCl9X2ZpcmVFdmVudElmU2VsZWN0aW9uQ2hhbmdlZCgpe2NvbnN0IGU9dGhpcy5fbW9kZWwuZmluYWxTZWxlY3Rpb25TdGFydCx0PXRoaXMuX21vZGVsLmZpbmFsU2VsZWN0aW9uRW5kLGk9ISghZXx8IXR8fGVbMF09PT10WzBdJiZlWzFdPT09dFsxXSk7aT9lJiZ0JiYodGhpcy5fb2xkU2VsZWN0aW9uU3RhcnQmJnRoaXMuX29sZFNlbGVjdGlvbkVuZCYmZVswXT09PXRoaXMuX29sZFNlbGVjdGlvblN0YXJ0WzBdJiZlWzFdPT09dGhpcy5fb2xkU2VsZWN0aW9uU3RhcnRbMV0mJnRbMF09PT10aGlzLl9vbGRTZWxlY3Rpb25FbmRbMF0mJnRbMV09PT10aGlzLl9vbGRTZWxlY3Rpb25FbmRbMV18fHRoaXMuX2ZpcmVPblNlbGVjdGlvbkNoYW5nZShlLHQsaSkpOnRoaXMuX29sZEhhc1NlbGVjdGlvbiYmdGhpcy5fZmlyZU9uU2VsZWN0aW9uQ2hhbmdlKGUsdCxpKX1fZmlyZU9uU2VsZWN0aW9uQ2hhbmdlKGUsdCxpKXt0aGlzLl9vbGRTZWxlY3Rpb25TdGFydD1lLHRoaXMuX29sZFNlbGVjdGlvbkVuZD10LHRoaXMuX29sZEhhc1NlbGVjdGlvbj1pLHRoaXMuX29uU2VsZWN0aW9uQ2hhbmdlLmZpcmUoKX1faGFuZGxlQnVmZmVyQWN0aXZhdGUoZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX3RyaW1MaXN0ZW5lci5kaXNwb3NlKCksdGhpcy5fdHJpbUxpc3RlbmVyPWUuYWN0aXZlQnVmZmVyLmxpbmVzLm9uVHJpbSgoZT0+dGhpcy5faGFuZGxlVHJpbShlKSkpfV9jb252ZXJ0Vmlld3BvcnRDb2xUb0NoYXJhY3RlckluZGV4KGUsdCl7bGV0IGk9dDtmb3IobGV0IHM9MDt0Pj1zO3MrKyl7Y29uc3Qgcj1lLmxvYWRDZWxsKHMsdGhpcy5fd29ya0NlbGwpLmdldENoYXJzKCkubGVuZ3RoOzA9PT10aGlzLl93b3JrQ2VsbC5nZXRXaWR0aCgpP2ktLTpyPjEmJnQhPT1zJiYoaSs9ci0xKX1yZXR1cm4gaX1zZXRTZWxlY3Rpb24oZSx0LGkpe3RoaXMuX21vZGVsLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5fcmVtb3ZlTW91c2VEb3duTGlzdGVuZXJzKCksdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnQ9W2UsdF0sdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnRMZW5ndGg9aSx0aGlzLnJlZnJlc2goKSx0aGlzLl9maXJlRXZlbnRJZlNlbGVjdGlvbkNoYW5nZWQoKX1yaWdodENsaWNrU2VsZWN0KGUpe3RoaXMuX2lzQ2xpY2tJblNlbGVjdGlvbihlKXx8KHRoaXMuX3NlbGVjdFdvcmRBdEN1cnNvcihlLCExKSYmdGhpcy5yZWZyZXNoKCEwKSx0aGlzLl9maXJlRXZlbnRJZlNlbGVjdGlvbkNoYW5nZWQoKSl9X2dldFdvcmRBdChlLHQsaT0hMCxzPSEwKXtpZihlWzBdPj10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpcmV0dXJuO2NvbnN0IHI9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIsbj1yLmxpbmVzLmdldChlWzFdKTtpZighbilyZXR1cm47Y29uc3Qgbz1yLnRyYW5zbGF0ZUJ1ZmZlckxpbmVUb1N0cmluZyhlWzFdLCExKTtsZXQgYT10aGlzLl9jb252ZXJ0Vmlld3BvcnRDb2xUb0NoYXJhY3RlckluZGV4KG4sZVswXSksaD1hO2NvbnN0IGM9ZVswXS1hO2xldCBsPTAsZD0wLF89MCx1PTA7aWYoXCIgXCI9PT1vLmNoYXJBdChhKSl7Zm9yKDthPjAmJlwiIFwiPT09by5jaGFyQXQoYS0xKTspYS0tO2Zvcig7aDxvLmxlbmd0aCYmXCIgXCI9PT1vLmNoYXJBdChoKzEpOyloKyt9ZWxzZXtsZXQgdD1lWzBdLGk9ZVswXTswPT09bi5nZXRXaWR0aCh0KSYmKGwrKyx0LS0pLDI9PT1uLmdldFdpZHRoKGkpJiYoZCsrLGkrKyk7Y29uc3Qgcz1uLmdldFN0cmluZyhpKS5sZW5ndGg7Zm9yKHM+MSYmKHUrPXMtMSxoKz1zLTEpO3Q+MCYmYT4wJiYhdGhpcy5faXNDaGFyV29yZFNlcGFyYXRvcihuLmxvYWRDZWxsKHQtMSx0aGlzLl93b3JrQ2VsbCkpOyl7bi5sb2FkQ2VsbCh0LTEsdGhpcy5fd29ya0NlbGwpO2NvbnN0IGU9dGhpcy5fd29ya0NlbGwuZ2V0Q2hhcnMoKS5sZW5ndGg7MD09PXRoaXMuX3dvcmtDZWxsLmdldFdpZHRoKCk/KGwrKyx0LS0pOmU+MSYmKF8rPWUtMSxhLT1lLTEpLGEtLSx0LS19Zm9yKDtpPG4ubGVuZ3RoJiZoKzE8by5sZW5ndGgmJiF0aGlzLl9pc0NoYXJXb3JkU2VwYXJhdG9yKG4ubG9hZENlbGwoaSsxLHRoaXMuX3dvcmtDZWxsKSk7KXtuLmxvYWRDZWxsKGkrMSx0aGlzLl93b3JrQ2VsbCk7Y29uc3QgZT10aGlzLl93b3JrQ2VsbC5nZXRDaGFycygpLmxlbmd0aDsyPT09dGhpcy5fd29ya0NlbGwuZ2V0V2lkdGgoKT8oZCsrLGkrKyk6ZT4xJiYodSs9ZS0xLGgrPWUtMSksaCsrLGkrK319aCsrO2xldCBmPWErYy1sK18sdj1NYXRoLm1pbih0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsaC1hK2wrZC1fLXUpO2lmKHR8fFwiXCIhPT1vLnNsaWNlKGEsaCkudHJpbSgpKXtpZihpJiYwPT09ZiYmMzIhPT1uLmdldENvZGVQb2ludCgwKSl7Y29uc3QgdD1yLmxpbmVzLmdldChlWzFdLTEpO2lmKHQmJm4uaXNXcmFwcGVkJiYzMiE9PXQuZ2V0Q29kZVBvaW50KHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scy0xKSl7Y29uc3QgdD10aGlzLl9nZXRXb3JkQXQoW3RoaXMuX2J1ZmZlclNlcnZpY2UuY29scy0xLGVbMV0tMV0sITEsITAsITEpO2lmKHQpe2NvbnN0IGU9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLXQuc3RhcnQ7Zi09ZSx2Kz1lfX19aWYocyYmZit2PT09dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzJiYzMiE9PW4uZ2V0Q29kZVBvaW50KHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scy0xKSl7Y29uc3QgdD1yLmxpbmVzLmdldChlWzFdKzEpO2lmKHQ/LmlzV3JhcHBlZCYmMzIhPT10LmdldENvZGVQb2ludCgwKSl7Y29uc3QgdD10aGlzLl9nZXRXb3JkQXQoWzAsZVsxXSsxXSwhMSwhMSwhMCk7dCYmKHYrPXQubGVuZ3RoKX19cmV0dXJue3N0YXJ0OmYsbGVuZ3RoOnZ9fX1fc2VsZWN0V29yZEF0KGUsdCl7Y29uc3QgaT10aGlzLl9nZXRXb3JkQXQoZSx0KTtpZihpKXtmb3IoO2kuc3RhcnQ8MDspaS5zdGFydCs9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLGVbMV0tLTt0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydD1baS5zdGFydCxlWzFdXSx0aGlzLl9tb2RlbC5zZWxlY3Rpb25TdGFydExlbmd0aD1pLmxlbmd0aH19X3NlbGVjdFRvV29yZEF0KGUpe2NvbnN0IHQ9dGhpcy5fZ2V0V29yZEF0KGUsITApO2lmKHQpe2xldCBpPWVbMV07Zm9yKDt0LnN0YXJ0PDA7KXQuc3RhcnQrPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxpLS07aWYoIXRoaXMuX21vZGVsLmFyZVNlbGVjdGlvblZhbHVlc1JldmVyc2VkKCkpZm9yKDt0LnN0YXJ0K3QubGVuZ3RoPnRoaXMuX2J1ZmZlclNlcnZpY2UuY29sczspdC5sZW5ndGgtPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyxpKys7dGhpcy5fbW9kZWwuc2VsZWN0aW9uRW5kPVt0aGlzLl9tb2RlbC5hcmVTZWxlY3Rpb25WYWx1ZXNSZXZlcnNlZCgpP3Quc3RhcnQ6dC5zdGFydCt0Lmxlbmd0aCxpXX19X2lzQ2hhcldvcmRTZXBhcmF0b3IoZSl7cmV0dXJuIDAhPT1lLmdldFdpZHRoKCkmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMud29yZFNlcGFyYXRvci5pbmRleE9mKGUuZ2V0Q2hhcnMoKSk+PTB9X3NlbGVjdExpbmVBdChlKXtjb25zdCB0PXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLmdldFdyYXBwZWRSYW5nZUZvckxpbmUoZSksaT17c3RhcnQ6e3g6MCx5OnQuZmlyc3R9LGVuZDp7eDp0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMtMSx5OnQubGFzdH19O3RoaXMuX21vZGVsLnNlbGVjdGlvblN0YXJ0PVswLHQuZmlyc3RdLHRoaXMuX21vZGVsLnNlbGVjdGlvbkVuZD12b2lkIDAsdGhpcy5fbW9kZWwuc2VsZWN0aW9uU3RhcnRMZW5ndGg9KDAsXy5nZXRSYW5nZUxlbmd0aCkoaSx0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpfX07dC5TZWxlY3Rpb25TZXJ2aWNlPWc9cyhbcigzLGYuSUJ1ZmZlclNlcnZpY2UpLHIoNCxmLklDb3JlU2VydmljZSkscig1LGguSU1vdXNlU2VydmljZSkscig2LGYuSU9wdGlvbnNTZXJ2aWNlKSxyKDcsaC5JUmVuZGVyU2VydmljZSkscig4LGguSUNvcmVCcm93c2VyU2VydmljZSldLGcpfSw0NzI1OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LklMaW5rUHJvdmlkZXJTZXJ2aWNlPXQuSVRoZW1lU2VydmljZT10LklDaGFyYWN0ZXJKb2luZXJTZXJ2aWNlPXQuSVNlbGVjdGlvblNlcnZpY2U9dC5JUmVuZGVyU2VydmljZT10LklNb3VzZVNlcnZpY2U9dC5JQ29yZUJyb3dzZXJTZXJ2aWNlPXQuSUNoYXJTaXplU2VydmljZT12b2lkIDA7Y29uc3Qgcz1pKDgzNDMpO3QuSUNoYXJTaXplU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJDaGFyU2l6ZVNlcnZpY2VcIiksdC5JQ29yZUJyb3dzZXJTZXJ2aWNlPSgwLHMuY3JlYXRlRGVjb3JhdG9yKShcIkNvcmVCcm93c2VyU2VydmljZVwiKSx0LklNb3VzZVNlcnZpY2U9KDAscy5jcmVhdGVEZWNvcmF0b3IpKFwiTW91c2VTZXJ2aWNlXCIpLHQuSVJlbmRlclNlcnZpY2U9KDAscy5jcmVhdGVEZWNvcmF0b3IpKFwiUmVuZGVyU2VydmljZVwiKSx0LklTZWxlY3Rpb25TZXJ2aWNlPSgwLHMuY3JlYXRlRGVjb3JhdG9yKShcIlNlbGVjdGlvblNlcnZpY2VcIiksdC5JQ2hhcmFjdGVySm9pbmVyU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJDaGFyYWN0ZXJKb2luZXJTZXJ2aWNlXCIpLHQuSVRoZW1lU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJUaGVtZVNlcnZpY2VcIiksdC5JTGlua1Byb3ZpZGVyU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJMaW5rUHJvdmlkZXJTZXJ2aWNlXCIpfSw2NzMxOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVGhlbWVTZXJ2aWNlPXQuREVGQVVMVF9BTlNJX0NPTE9SUz12b2lkIDA7Y29uc3Qgbj1pKDcyMzkpLG89aSg4MDU1KSxhPWkoODQ2MCksaD1pKDg0NCksYz1pKDI1ODUpLGw9by5jc3MudG9Db2xvcihcIiNmZmZmZmZcIiksZD1vLmNzcy50b0NvbG9yKFwiIzAwMDAwMFwiKSxfPW8uY3NzLnRvQ29sb3IoXCIjZmZmZmZmXCIpLHU9by5jc3MudG9Db2xvcihcIiMwMDAwMDBcIiksZj17Y3NzOlwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpXCIscmdiYTo0Mjk0OTY3MTE3fTt0LkRFRkFVTFRfQU5TSV9DT0xPUlM9T2JqZWN0LmZyZWV6ZSgoKCk9Pntjb25zdCBlPVtvLmNzcy50b0NvbG9yKFwiIzJlMzQzNlwiKSxvLmNzcy50b0NvbG9yKFwiI2NjMDAwMFwiKSxvLmNzcy50b0NvbG9yKFwiIzRlOWEwNlwiKSxvLmNzcy50b0NvbG9yKFwiI2M0YTAwMFwiKSxvLmNzcy50b0NvbG9yKFwiIzM0NjVhNFwiKSxvLmNzcy50b0NvbG9yKFwiIzc1NTA3YlwiKSxvLmNzcy50b0NvbG9yKFwiIzA2OTg5YVwiKSxvLmNzcy50b0NvbG9yKFwiI2QzZDdjZlwiKSxvLmNzcy50b0NvbG9yKFwiIzU1NTc1M1wiKSxvLmNzcy50b0NvbG9yKFwiI2VmMjkyOVwiKSxvLmNzcy50b0NvbG9yKFwiIzhhZTIzNFwiKSxvLmNzcy50b0NvbG9yKFwiI2ZjZTk0ZlwiKSxvLmNzcy50b0NvbG9yKFwiIzcyOWZjZlwiKSxvLmNzcy50b0NvbG9yKFwiI2FkN2ZhOFwiKSxvLmNzcy50b0NvbG9yKFwiIzM0ZTJlMlwiKSxvLmNzcy50b0NvbG9yKFwiI2VlZWVlY1wiKV0sdD1bMCw5NSwxMzUsMTc1LDIxNSwyNTVdO2ZvcihsZXQgaT0wO2k8MjE2O2krKyl7Y29uc3Qgcz10W2kvMzYlNnwwXSxyPXRbaS82JTZ8MF0sbj10W2klNl07ZS5wdXNoKHtjc3M6by5jaGFubmVscy50b0NzcyhzLHIsbikscmdiYTpvLmNoYW5uZWxzLnRvUmdiYShzLHIsbil9KX1mb3IobGV0IHQ9MDt0PDI0O3QrKyl7Y29uc3QgaT04KzEwKnQ7ZS5wdXNoKHtjc3M6by5jaGFubmVscy50b0NzcyhpLGksaSkscmdiYTpvLmNoYW5uZWxzLnRvUmdiYShpLGksaSl9KX1yZXR1cm4gZX0pKCkpO2xldCB2PXQuVGhlbWVTZXJ2aWNlPWNsYXNzIGV4dGVuZHMgaC5EaXNwb3NhYmxle2dldCBjb2xvcnMoKXtyZXR1cm4gdGhpcy5fY29sb3JzfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fb3B0aW9uc1NlcnZpY2U9ZSx0aGlzLl9jb250cmFzdENhY2hlPW5ldyBuLkNvbG9yQ29udHJhc3RDYWNoZSx0aGlzLl9oYWxmQ29udHJhc3RDYWNoZT1uZXcgbi5Db2xvckNvbnRyYXN0Q2FjaGUsdGhpcy5fb25DaGFuZ2VDb2xvcnM9dGhpcy5yZWdpc3RlcihuZXcgYS5FdmVudEVtaXR0ZXIpLHRoaXMub25DaGFuZ2VDb2xvcnM9dGhpcy5fb25DaGFuZ2VDb2xvcnMuZXZlbnQsdGhpcy5fY29sb3JzPXtmb3JlZ3JvdW5kOmwsYmFja2dyb3VuZDpkLGN1cnNvcjpfLGN1cnNvckFjY2VudDp1LHNlbGVjdGlvbkZvcmVncm91bmQ6dm9pZCAwLHNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudDpmLHNlbGVjdGlvbkJhY2tncm91bmRPcGFxdWU6by5jb2xvci5ibGVuZChkLGYpLHNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50OmYsc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kT3BhcXVlOm8uY29sb3IuYmxlbmQoZCxmKSxhbnNpOnQuREVGQVVMVF9BTlNJX0NPTE9SUy5zbGljZSgpLGNvbnRyYXN0Q2FjaGU6dGhpcy5fY29udHJhc3RDYWNoZSxoYWxmQ29udHJhc3RDYWNoZTp0aGlzLl9oYWxmQ29udHJhc3RDYWNoZX0sdGhpcy5fdXBkYXRlUmVzdG9yZUNvbG9ycygpLHRoaXMuX3NldFRoZW1lKHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMudGhlbWUpLHRoaXMucmVnaXN0ZXIodGhpcy5fb3B0aW9uc1NlcnZpY2Uub25TcGVjaWZpY09wdGlvbkNoYW5nZShcIm1pbmltdW1Db250cmFzdFJhdGlvXCIsKCgpPT50aGlzLl9jb250cmFzdENhY2hlLmNsZWFyKCkpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9vcHRpb25zU2VydmljZS5vblNwZWNpZmljT3B0aW9uQ2hhbmdlKFwidGhlbWVcIiwoKCk9PnRoaXMuX3NldFRoZW1lKHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMudGhlbWUpKSkpfV9zZXRUaGVtZShlPXt9KXtjb25zdCBpPXRoaXMuX2NvbG9ycztpZihpLmZvcmVncm91bmQ9cChlLmZvcmVncm91bmQsbCksaS5iYWNrZ3JvdW5kPXAoZS5iYWNrZ3JvdW5kLGQpLGkuY3Vyc29yPXAoZS5jdXJzb3IsXyksaS5jdXJzb3JBY2NlbnQ9cChlLmN1cnNvckFjY2VudCx1KSxpLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudD1wKGUuc2VsZWN0aW9uQmFja2dyb3VuZCxmKSxpLnNlbGVjdGlvbkJhY2tncm91bmRPcGFxdWU9by5jb2xvci5ibGVuZChpLmJhY2tncm91bmQsaS5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQpLGkuc2VsZWN0aW9uSW5hY3RpdmVCYWNrZ3JvdW5kVHJhbnNwYXJlbnQ9cChlLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZCxpLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudCksaS5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRPcGFxdWU9by5jb2xvci5ibGVuZChpLmJhY2tncm91bmQsaS5zZWxlY3Rpb25JbmFjdGl2ZUJhY2tncm91bmRUcmFuc3BhcmVudCksaS5zZWxlY3Rpb25Gb3JlZ3JvdW5kPWUuc2VsZWN0aW9uRm9yZWdyb3VuZD9wKGUuc2VsZWN0aW9uRm9yZWdyb3VuZCxvLk5VTExfQ09MT1IpOnZvaWQgMCxpLnNlbGVjdGlvbkZvcmVncm91bmQ9PT1vLk5VTExfQ09MT1ImJihpLnNlbGVjdGlvbkZvcmVncm91bmQ9dm9pZCAwKSxvLmNvbG9yLmlzT3BhcXVlKGkuc2VsZWN0aW9uQmFja2dyb3VuZFRyYW5zcGFyZW50KSl7Y29uc3QgZT0uMztpLnNlbGVjdGlvbkJhY2tncm91bmRUcmFuc3BhcmVudD1vLmNvbG9yLm9wYWNpdHkoaS5zZWxlY3Rpb25CYWNrZ3JvdW5kVHJhbnNwYXJlbnQsZSl9aWYoby5jb2xvci5pc09wYXF1ZShpLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50KSl7Y29uc3QgZT0uMztpLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50PW8uY29sb3Iub3BhY2l0eShpLnNlbGVjdGlvbkluYWN0aXZlQmFja2dyb3VuZFRyYW5zcGFyZW50LGUpfWlmKGkuYW5zaT10LkRFRkFVTFRfQU5TSV9DT0xPUlMuc2xpY2UoKSxpLmFuc2lbMF09cChlLmJsYWNrLHQuREVGQVVMVF9BTlNJX0NPTE9SU1swXSksaS5hbnNpWzFdPXAoZS5yZWQsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzFdKSxpLmFuc2lbMl09cChlLmdyZWVuLHQuREVGQVVMVF9BTlNJX0NPTE9SU1syXSksaS5hbnNpWzNdPXAoZS55ZWxsb3csdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzNdKSxpLmFuc2lbNF09cChlLmJsdWUsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzRdKSxpLmFuc2lbNV09cChlLm1hZ2VudGEsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzVdKSxpLmFuc2lbNl09cChlLmN5YW4sdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzZdKSxpLmFuc2lbN109cChlLndoaXRlLHQuREVGQVVMVF9BTlNJX0NPTE9SU1s3XSksaS5hbnNpWzhdPXAoZS5icmlnaHRCbGFjayx0LkRFRkFVTFRfQU5TSV9DT0xPUlNbOF0pLGkuYW5zaVs5XT1wKGUuYnJpZ2h0UmVkLHQuREVGQVVMVF9BTlNJX0NPTE9SU1s5XSksaS5hbnNpWzEwXT1wKGUuYnJpZ2h0R3JlZW4sdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzEwXSksaS5hbnNpWzExXT1wKGUuYnJpZ2h0WWVsbG93LHQuREVGQVVMVF9BTlNJX0NPTE9SU1sxMV0pLGkuYW5zaVsxMl09cChlLmJyaWdodEJsdWUsdC5ERUZBVUxUX0FOU0lfQ09MT1JTWzEyXSksaS5hbnNpWzEzXT1wKGUuYnJpZ2h0TWFnZW50YSx0LkRFRkFVTFRfQU5TSV9DT0xPUlNbMTNdKSxpLmFuc2lbMTRdPXAoZS5icmlnaHRDeWFuLHQuREVGQVVMVF9BTlNJX0NPTE9SU1sxNF0pLGkuYW5zaVsxNV09cChlLmJyaWdodFdoaXRlLHQuREVGQVVMVF9BTlNJX0NPTE9SU1sxNV0pLGUuZXh0ZW5kZWRBbnNpKXtjb25zdCBzPU1hdGgubWluKGkuYW5zaS5sZW5ndGgtMTYsZS5leHRlbmRlZEFuc2kubGVuZ3RoKTtmb3IobGV0IHI9MDtyPHM7cisrKWkuYW5zaVtyKzE2XT1wKGUuZXh0ZW5kZWRBbnNpW3JdLHQuREVGQVVMVF9BTlNJX0NPTE9SU1tyKzE2XSl9dGhpcy5fY29udHJhc3RDYWNoZS5jbGVhcigpLHRoaXMuX2hhbGZDb250cmFzdENhY2hlLmNsZWFyKCksdGhpcy5fdXBkYXRlUmVzdG9yZUNvbG9ycygpLHRoaXMuX29uQ2hhbmdlQ29sb3JzLmZpcmUodGhpcy5jb2xvcnMpfXJlc3RvcmVDb2xvcihlKXt0aGlzLl9yZXN0b3JlQ29sb3IoZSksdGhpcy5fb25DaGFuZ2VDb2xvcnMuZmlyZSh0aGlzLmNvbG9ycyl9X3Jlc3RvcmVDb2xvcihlKXtpZih2b2lkIDAhPT1lKXN3aXRjaChlKXtjYXNlIDI1Njp0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZD10aGlzLl9yZXN0b3JlQ29sb3JzLmZvcmVncm91bmQ7YnJlYWs7Y2FzZSAyNTc6dGhpcy5fY29sb3JzLmJhY2tncm91bmQ9dGhpcy5fcmVzdG9yZUNvbG9ycy5iYWNrZ3JvdW5kO2JyZWFrO2Nhc2UgMjU4OnRoaXMuX2NvbG9ycy5jdXJzb3I9dGhpcy5fcmVzdG9yZUNvbG9ycy5jdXJzb3I7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb2xvcnMuYW5zaVtlXT10aGlzLl9yZXN0b3JlQ29sb3JzLmFuc2lbZV19ZWxzZSBmb3IobGV0IGU9MDtlPHRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaS5sZW5ndGg7KytlKXRoaXMuX2NvbG9ycy5hbnNpW2VdPXRoaXMuX3Jlc3RvcmVDb2xvcnMuYW5zaVtlXX1tb2RpZnlDb2xvcnMoZSl7ZSh0aGlzLl9jb2xvcnMpLHRoaXMuX29uQ2hhbmdlQ29sb3JzLmZpcmUodGhpcy5jb2xvcnMpfV91cGRhdGVSZXN0b3JlQ29sb3JzKCl7dGhpcy5fcmVzdG9yZUNvbG9ycz17Zm9yZWdyb3VuZDp0aGlzLl9jb2xvcnMuZm9yZWdyb3VuZCxiYWNrZ3JvdW5kOnRoaXMuX2NvbG9ycy5iYWNrZ3JvdW5kLGN1cnNvcjp0aGlzLl9jb2xvcnMuY3Vyc29yLGFuc2k6dGhpcy5fY29sb3JzLmFuc2kuc2xpY2UoKX19fTtmdW5jdGlvbiBwKGUsdCl7aWYodm9pZCAwIT09ZSl0cnl7cmV0dXJuIG8uY3NzLnRvQ29sb3IoZSl9Y2F0Y2h7fXJldHVybiB0fXQuVGhlbWVTZXJ2aWNlPXY9cyhbcigwLGMuSU9wdGlvbnNTZXJ2aWNlKV0sdil9LDYzNDk6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQ2lyY3VsYXJMaXN0PXZvaWQgMDtjb25zdCBzPWkoODQ2MCkscj1pKDg0NCk7Y2xhc3MgbiBleHRlbmRzIHIuRGlzcG9zYWJsZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX21heExlbmd0aD1lLHRoaXMub25EZWxldGVFbWl0dGVyPXRoaXMucmVnaXN0ZXIobmV3IHMuRXZlbnRFbWl0dGVyKSx0aGlzLm9uRGVsZXRlPXRoaXMub25EZWxldGVFbWl0dGVyLmV2ZW50LHRoaXMub25JbnNlcnRFbWl0dGVyPXRoaXMucmVnaXN0ZXIobmV3IHMuRXZlbnRFbWl0dGVyKSx0aGlzLm9uSW5zZXJ0PXRoaXMub25JbnNlcnRFbWl0dGVyLmV2ZW50LHRoaXMub25UcmltRW1pdHRlcj10aGlzLnJlZ2lzdGVyKG5ldyBzLkV2ZW50RW1pdHRlciksdGhpcy5vblRyaW09dGhpcy5vblRyaW1FbWl0dGVyLmV2ZW50LHRoaXMuX2FycmF5PW5ldyBBcnJheSh0aGlzLl9tYXhMZW5ndGgpLHRoaXMuX3N0YXJ0SW5kZXg9MCx0aGlzLl9sZW5ndGg9MH1nZXQgbWF4TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX21heExlbmd0aH1zZXQgbWF4TGVuZ3RoKGUpe2lmKHRoaXMuX21heExlbmd0aD09PWUpcmV0dXJuO2NvbnN0IHQ9bmV3IEFycmF5KGUpO2ZvcihsZXQgaT0wO2k8TWF0aC5taW4oZSx0aGlzLmxlbmd0aCk7aSsrKXRbaV09dGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgoaSldO3RoaXMuX2FycmF5PXQsdGhpcy5fbWF4TGVuZ3RoPWUsdGhpcy5fc3RhcnRJbmRleD0wfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofXNldCBsZW5ndGgoZSl7aWYoZT50aGlzLl9sZW5ndGgpZm9yKGxldCB0PXRoaXMuX2xlbmd0aDt0PGU7dCsrKXRoaXMuX2FycmF5W3RdPXZvaWQgMDt0aGlzLl9sZW5ndGg9ZX1nZXQoZSl7cmV0dXJuIHRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KGUpXX1zZXQoZSx0KXt0aGlzLl9hcnJheVt0aGlzLl9nZXRDeWNsaWNJbmRleChlKV09dH1wdXNoKGUpe3RoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KHRoaXMuX2xlbmd0aCldPWUsdGhpcy5fbGVuZ3RoPT09dGhpcy5fbWF4TGVuZ3RoPyh0aGlzLl9zdGFydEluZGV4PSsrdGhpcy5fc3RhcnRJbmRleCV0aGlzLl9tYXhMZW5ndGgsdGhpcy5vblRyaW1FbWl0dGVyLmZpcmUoMSkpOnRoaXMuX2xlbmd0aCsrfXJlY3ljbGUoKXtpZih0aGlzLl9sZW5ndGghPT10aGlzLl9tYXhMZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG9ubHkgcmVjeWNsZSB3aGVuIHRoZSBidWZmZXIgaXMgZnVsbFwiKTtyZXR1cm4gdGhpcy5fc3RhcnRJbmRleD0rK3RoaXMuX3N0YXJ0SW5kZXgldGhpcy5fbWF4TGVuZ3RoLHRoaXMub25UcmltRW1pdHRlci5maXJlKDEpLHRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KHRoaXMuX2xlbmd0aC0xKV19Z2V0IGlzRnVsbCgpe3JldHVybiB0aGlzLl9sZW5ndGg9PT10aGlzLl9tYXhMZW5ndGh9cG9wKCl7cmV0dXJuIHRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KHRoaXMuX2xlbmd0aC0tLTEpXX1zcGxpY2UoZSx0LC4uLmkpe2lmKHQpe2ZvcihsZXQgaT1lO2k8dGhpcy5fbGVuZ3RoLXQ7aSsrKXRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KGkpXT10aGlzLl9hcnJheVt0aGlzLl9nZXRDeWNsaWNJbmRleChpK3QpXTt0aGlzLl9sZW5ndGgtPXQsdGhpcy5vbkRlbGV0ZUVtaXR0ZXIuZmlyZSh7aW5kZXg6ZSxhbW91bnQ6dH0pfWZvcihsZXQgdD10aGlzLl9sZW5ndGgtMTt0Pj1lO3QtLSl0aGlzLl9hcnJheVt0aGlzLl9nZXRDeWNsaWNJbmRleCh0K2kubGVuZ3RoKV09dGhpcy5fYXJyYXlbdGhpcy5fZ2V0Q3ljbGljSW5kZXgodCldO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKXRoaXMuX2FycmF5W3RoaXMuX2dldEN5Y2xpY0luZGV4KGUrdCldPWlbdF07aWYoaS5sZW5ndGgmJnRoaXMub25JbnNlcnRFbWl0dGVyLmZpcmUoe2luZGV4OmUsYW1vdW50OmkubGVuZ3RofSksdGhpcy5fbGVuZ3RoK2kubGVuZ3RoPnRoaXMuX21heExlbmd0aCl7Y29uc3QgZT10aGlzLl9sZW5ndGgraS5sZW5ndGgtdGhpcy5fbWF4TGVuZ3RoO3RoaXMuX3N0YXJ0SW5kZXgrPWUsdGhpcy5fbGVuZ3RoPXRoaXMuX21heExlbmd0aCx0aGlzLm9uVHJpbUVtaXR0ZXIuZmlyZShlKX1lbHNlIHRoaXMuX2xlbmd0aCs9aS5sZW5ndGh9dHJpbVN0YXJ0KGUpe2U+dGhpcy5fbGVuZ3RoJiYoZT10aGlzLl9sZW5ndGgpLHRoaXMuX3N0YXJ0SW5kZXgrPWUsdGhpcy5fbGVuZ3RoLT1lLHRoaXMub25UcmltRW1pdHRlci5maXJlKGUpfXNoaWZ0RWxlbWVudHMoZSx0LGkpe2lmKCEodDw9MCkpe2lmKGU8MHx8ZT49dGhpcy5fbGVuZ3RoKXRocm93IG5ldyBFcnJvcihcInN0YXJ0IGFyZ3VtZW50IG91dCBvZiByYW5nZVwiKTtpZihlK2k8MCl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2hpZnQgZWxlbWVudHMgaW4gbGlzdCBiZXlvbmQgaW5kZXggMFwiKTtpZihpPjApe2ZvcihsZXQgcz10LTE7cz49MDtzLS0pdGhpcy5zZXQoZStzK2ksdGhpcy5nZXQoZStzKSk7Y29uc3Qgcz1lK3QraS10aGlzLl9sZW5ndGg7aWYocz4wKWZvcih0aGlzLl9sZW5ndGgrPXM7dGhpcy5fbGVuZ3RoPnRoaXMuX21heExlbmd0aDspdGhpcy5fbGVuZ3RoLS0sdGhpcy5fc3RhcnRJbmRleCsrLHRoaXMub25UcmltRW1pdHRlci5maXJlKDEpfWVsc2UgZm9yKGxldCBzPTA7czx0O3MrKyl0aGlzLnNldChlK3MraSx0aGlzLmdldChlK3MpKX19X2dldEN5Y2xpY0luZGV4KGUpe3JldHVybih0aGlzLl9zdGFydEluZGV4K2UpJXRoaXMuX21heExlbmd0aH19dC5DaXJjdWxhckxpc3Q9bn0sMTQzOTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuY2xvbmU9dm9pZCAwLHQuY2xvbmU9ZnVuY3Rpb24gZSh0LGk9NSl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpcmV0dXJuIHQ7Y29uc3Qgcz1BcnJheS5pc0FycmF5KHQpP1tdOnt9O2Zvcihjb25zdCByIGluIHQpc1tyXT1pPD0xP3Rbcl06dFtyXSYmZSh0W3JdLGktMSk7cmV0dXJuIHN9fSw4MDU1OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5jb250cmFzdFJhdGlvPXQudG9QYWRkZWRIZXg9dC5yZ2JhPXQucmdiPXQuY3NzPXQuY29sb3I9dC5jaGFubmVscz10Lk5VTExfQ09MT1I9dm9pZCAwO2xldCBpPTAscz0wLHI9MCxuPTA7dmFyIG8sYSxoLGMsbDtmdW5jdGlvbiBkKGUpe2NvbnN0IHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIHQubGVuZ3RoPDI/XCIwXCIrdDp0fWZ1bmN0aW9uIF8oZSx0KXtyZXR1cm4gZTx0Pyh0Ky4wNSkvKGUrLjA1KTooZSsuMDUpLyh0Ky4wNSl9dC5OVUxMX0NPTE9SPXtjc3M6XCIjMDAwMDAwMDBcIixyZ2JhOjB9LGZ1bmN0aW9uKGUpe2UudG9Dc3M9ZnVuY3Rpb24oZSx0LGkscyl7cmV0dXJuIHZvaWQgMCE9PXM/YCMke2QoZSl9JHtkKHQpfSR7ZChpKX0ke2Qocyl9YDpgIyR7ZChlKX0ke2QodCl9JHtkKGkpfWB9LGUudG9SZ2JhPWZ1bmN0aW9uKGUsdCxpLHM9MjU1KXtyZXR1cm4oZTw8MjR8dDw8MTZ8aTw8OHxzKT4+PjB9LGUudG9Db2xvcj1mdW5jdGlvbih0LGkscyxyKXtyZXR1cm57Y3NzOmUudG9Dc3ModCxpLHMscikscmdiYTplLnRvUmdiYSh0LGkscyxyKX19fShvfHwodC5jaGFubmVscz1vPXt9KSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3JldHVybiBuPU1hdGgucm91bmQoMjU1KnQpLFtpLHMscl09bC50b0NoYW5uZWxzKGUucmdiYSkse2NzczpvLnRvQ3NzKGkscyxyLG4pLHJnYmE6by50b1JnYmEoaSxzLHIsbil9fWUuYmxlbmQ9ZnVuY3Rpb24oZSx0KXtpZihuPSgyNTUmdC5yZ2JhKS8yNTUsMT09PW4pcmV0dXJue2Nzczp0LmNzcyxyZ2JhOnQucmdiYX07Y29uc3QgYT10LnJnYmE+PjI0JjI1NSxoPXQucmdiYT4+MTYmMjU1LGM9dC5yZ2JhPj44JjI1NSxsPWUucmdiYT4+MjQmMjU1LGQ9ZS5yZ2JhPj4xNiYyNTUsXz1lLnJnYmE+PjgmMjU1O3JldHVybiBpPWwrTWF0aC5yb3VuZCgoYS1sKSpuKSxzPWQrTWF0aC5yb3VuZCgoaC1kKSpuKSxyPV8rTWF0aC5yb3VuZCgoYy1fKSpuKSx7Y3NzOm8udG9Dc3MoaSxzLHIpLHJnYmE6by50b1JnYmEoaSxzLHIpfX0sZS5pc09wYXF1ZT1mdW5jdGlvbihlKXtyZXR1cm4gMjU1PT0oMjU1JmUucmdiYSl9LGUuZW5zdXJlQ29udHJhc3RSYXRpbz1mdW5jdGlvbihlLHQsaSl7Y29uc3Qgcz1sLmVuc3VyZUNvbnRyYXN0UmF0aW8oZS5yZ2JhLHQucmdiYSxpKTtpZihzKXJldHVybiBvLnRvQ29sb3Iocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSl9LGUub3BhcXVlPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDI1NXxlLnJnYmEpPj4+MDtyZXR1cm5baSxzLHJdPWwudG9DaGFubmVscyh0KSx7Y3NzOm8udG9Dc3MoaSxzLHIpLHJnYmE6dH19LGUub3BhY2l0eT10LGUubXVsdGlwbHlPcGFjaXR5PWZ1bmN0aW9uKGUsaSl7cmV0dXJuIG49MjU1JmUucmdiYSx0KGUsbippLzI1NSl9LGUudG9Db2xvclJHQj1mdW5jdGlvbihlKXtyZXR1cm5bZS5yZ2JhPj4yNCYyNTUsZS5yZ2JhPj4xNiYyNTUsZS5yZ2JhPj44JjI1NV19fShhfHwodC5jb2xvcj1hPXt9KSksZnVuY3Rpb24oZSl7bGV0IHQsYTt0cnl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Uud2lkdGg9MSxlLmhlaWdodD0xO2NvbnN0IGk9ZS5nZXRDb250ZXh0KFwiMmRcIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSk7aSYmKHQ9aSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cImNvcHlcIixhPXQuY3JlYXRlTGluZWFyR3JhZGllbnQoMCwwLDEsMSkpfWNhdGNoe31lLnRvQ29sb3I9ZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgvI1tcXGRhLWZdezMsOH0vaSkpc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJuIGk9cGFyc2VJbnQoZS5zbGljZSgxLDIpLnJlcGVhdCgyKSwxNikscz1wYXJzZUludChlLnNsaWNlKDIsMykucmVwZWF0KDIpLDE2KSxyPXBhcnNlSW50KGUuc2xpY2UoMyw0KS5yZXBlYXQoMiksMTYpLG8udG9Db2xvcihpLHMscik7Y2FzZSA1OnJldHVybiBpPXBhcnNlSW50KGUuc2xpY2UoMSwyKS5yZXBlYXQoMiksMTYpLHM9cGFyc2VJbnQoZS5zbGljZSgyLDMpLnJlcGVhdCgyKSwxNikscj1wYXJzZUludChlLnNsaWNlKDMsNCkucmVwZWF0KDIpLDE2KSxuPXBhcnNlSW50KGUuc2xpY2UoNCw1KS5yZXBlYXQoMiksMTYpLG8udG9Db2xvcihpLHMscixuKTtjYXNlIDc6cmV0dXJue2NzczplLHJnYmE6KHBhcnNlSW50KGUuc2xpY2UoMSksMTYpPDw4fDI1NSk+Pj4wfTtjYXNlIDk6cmV0dXJue2NzczplLHJnYmE6cGFyc2VJbnQoZS5zbGljZSgxKSwxNik+Pj4wfX1jb25zdCBoPWUubWF0Y2goL3JnYmE/XFwoXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyooLFxccyooMHwxfFxcZD9cXC4oXFxkKykpXFxzKik/XFwpLyk7aWYoaClyZXR1cm4gaT1wYXJzZUludChoWzFdKSxzPXBhcnNlSW50KGhbMl0pLHI9cGFyc2VJbnQoaFszXSksbj1NYXRoLnJvdW5kKDI1NSoodm9pZCAwPT09aFs1XT8xOnBhcnNlRmxvYXQoaFs1XSkpKSxvLnRvQ29sb3IoaSxzLHIsbik7aWYoIXR8fCFhKXRocm93IG5ldyBFcnJvcihcImNzcy50b0NvbG9yOiBVbnN1cHBvcnRlZCBjc3MgZm9ybWF0XCIpO2lmKHQuZmlsbFN0eWxlPWEsdC5maWxsU3R5bGU9ZSxcInN0cmluZ1wiIT10eXBlb2YgdC5maWxsU3R5bGUpdGhyb3cgbmV3IEVycm9yKFwiY3NzLnRvQ29sb3I6IFVuc3VwcG9ydGVkIGNzcyBmb3JtYXRcIik7aWYodC5maWxsUmVjdCgwLDAsMSwxKSxbaSxzLHIsbl09dC5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YSwyNTUhPT1uKXRocm93IG5ldyBFcnJvcihcImNzcy50b0NvbG9yOiBVbnN1cHBvcnRlZCBjc3MgZm9ybWF0XCIpO3JldHVybntyZ2JhOm8udG9SZ2JhKGkscyxyLG4pLGNzczplfX19KGh8fCh0LmNzcz1oPXt9KSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQsaSl7Y29uc3Qgcz1lLzI1NSxyPXQvMjU1LG49aS8yNTU7cmV0dXJuLjIxMjYqKHM8PS4wMzkyOD9zLzEyLjkyOk1hdGgucG93KChzKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45MjpNYXRoLnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9ZS5yZWxhdGl2ZUx1bWluYW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmUpfSxlLnJlbGF0aXZlTHVtaW5hbmNlMj10fShjfHwodC5yZ2I9Yz17fSkpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LGkpe2NvbnN0IHM9ZT4+MjQmMjU1LHI9ZT4+MTYmMjU1LG49ZT4+OCYyNTU7bGV0IG89dD4+MjQmMjU1LGE9dD4+MTYmMjU1LGg9dD4+OCYyNTUsbD1fKGMucmVsYXRpdmVMdW1pbmFuY2UyKG8sYSxoKSxjLnJlbGF0aXZlTHVtaW5hbmNlMihzLHIsbikpO2Zvcig7bDxpJiYobz4wfHxhPjB8fGg+MCk7KW8tPU1hdGgubWF4KDAsTWF0aC5jZWlsKC4xKm8pKSxhLT1NYXRoLm1heCgwLE1hdGguY2VpbCguMSphKSksaC09TWF0aC5tYXgoMCxNYXRoLmNlaWwoLjEqaCkpLGw9XyhjLnJlbGF0aXZlTHVtaW5hbmNlMihvLGEsaCksYy5yZWxhdGl2ZUx1bWluYW5jZTIocyxyLG4pKTtyZXR1cm4obzw8MjR8YTw8MTZ8aDw8OHwyNTUpPj4+MH1mdW5jdGlvbiBhKGUsdCxpKXtjb25zdCBzPWU+PjI0JjI1NSxyPWU+PjE2JjI1NSxuPWU+PjgmMjU1O2xldCBvPXQ+PjI0JjI1NSxhPXQ+PjE2JjI1NSxoPXQ+PjgmMjU1LGw9XyhjLnJlbGF0aXZlTHVtaW5hbmNlMihvLGEsaCksYy5yZWxhdGl2ZUx1bWluYW5jZTIocyxyLG4pKTtmb3IoO2w8aSYmKG88MjU1fHxhPDI1NXx8aDwyNTUpOylvPU1hdGgubWluKDI1NSxvK01hdGguY2VpbCguMSooMjU1LW8pKSksYT1NYXRoLm1pbigyNTUsYStNYXRoLmNlaWwoLjEqKDI1NS1hKSkpLGg9TWF0aC5taW4oMjU1LGgrTWF0aC5jZWlsKC4xKigyNTUtaCkpKSxsPV8oYy5yZWxhdGl2ZUx1bWluYW5jZTIobyxhLGgpLGMucmVsYXRpdmVMdW1pbmFuY2UyKHMscixuKSk7cmV0dXJuKG88PDI0fGE8PDE2fGg8PDh8MjU1KT4+PjB9ZS5ibGVuZD1mdW5jdGlvbihlLHQpe2lmKG49KDI1NSZ0KS8yNTUsMT09PW4pcmV0dXJuIHQ7Y29uc3QgYT10Pj4yNCYyNTUsaD10Pj4xNiYyNTUsYz10Pj44JjI1NSxsPWU+PjI0JjI1NSxkPWU+PjE2JjI1NSxfPWU+PjgmMjU1O3JldHVybiBpPWwrTWF0aC5yb3VuZCgoYS1sKSpuKSxzPWQrTWF0aC5yb3VuZCgoaC1kKSpuKSxyPV8rTWF0aC5yb3VuZCgoYy1fKSpuKSxvLnRvUmdiYShpLHMscil9LGUuZW5zdXJlQ29udHJhc3RSYXRpbz1mdW5jdGlvbihlLGkscyl7Y29uc3Qgcj1jLnJlbGF0aXZlTHVtaW5hbmNlKGU+PjgpLG49Yy5yZWxhdGl2ZUx1bWluYW5jZShpPj44KTtpZihfKHIsbik8cyl7aWYobjxyKXtjb25zdCBuPXQoZSxpLHMpLG89XyhyLGMucmVsYXRpdmVMdW1pbmFuY2Uobj4+OCkpO2lmKG88cyl7Y29uc3QgdD1hKGUsaSxzKTtyZXR1cm4gbz5fKHIsYy5yZWxhdGl2ZUx1bWluYW5jZSh0Pj44KSk/bjp0fXJldHVybiBufWNvbnN0IG89YShlLGkscyksaD1fKHIsYy5yZWxhdGl2ZUx1bWluYW5jZShvPj44KSk7aWYoaDxzKXtjb25zdCBuPXQoZSxpLHMpO3JldHVybiBoPl8ocixjLnJlbGF0aXZlTHVtaW5hbmNlKG4+PjgpKT9vOm59cmV0dXJuIG99fSxlLnJlZHVjZUx1bWluYW5jZT10LGUuaW5jcmVhc2VMdW1pbmFuY2U9YSxlLnRvQ2hhbm5lbHM9ZnVuY3Rpb24oZSl7cmV0dXJuW2U+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdfX0obHx8KHQucmdiYT1sPXt9KSksdC50b1BhZGRlZEhleD1kLHQuY29udHJhc3RSYXRpbz1ffSw4OTY5OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvcmVUZXJtaW5hbD12b2lkIDA7Y29uc3Qgcz1pKDg0NCkscj1pKDI1ODUpLG49aSg0MzQ4KSxvPWkoNzg2NiksYT1pKDc0NCksaD1pKDczMDIpLGM9aSg2OTc1KSxsPWkoODQ2MCksZD1pKDE3NTMpLF89aSgxNDgwKSx1PWkoNzk5NCksZj1pKDkyODIpLHY9aSg1NDM1KSxwPWkoNTk4MSksZz1pKDI2NjApO2xldCBtPSExO2NsYXNzIFMgZXh0ZW5kcyBzLkRpc3Bvc2FibGV7Z2V0IG9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX29uU2Nyb2xsQXBpfHwodGhpcy5fb25TY3JvbGxBcGk9dGhpcy5yZWdpc3RlcihuZXcgbC5FdmVudEVtaXR0ZXIpLHRoaXMuX29uU2Nyb2xsLmV2ZW50KChlPT57dGhpcy5fb25TY3JvbGxBcGk/LmZpcmUoZS5wb3NpdGlvbil9KSkpLHRoaXMuX29uU2Nyb2xsQXBpLmV2ZW50fWdldCBjb2xzKCl7cmV0dXJuIHRoaXMuX2J1ZmZlclNlcnZpY2UuY29sc31nZXQgcm93cygpe3JldHVybiB0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3N9Z2V0IGJ1ZmZlcnMoKXtyZXR1cm4gdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMub3B0aW9uc1NlcnZpY2Uub3B0aW9uc31zZXQgb3B0aW9ucyhlKXtmb3IoY29uc3QgdCBpbiBlKXRoaXMub3B0aW9uc1NlcnZpY2Uub3B0aW9uc1t0XT1lW3RdfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fd2luZG93c1dyYXBwaW5nSGV1cmlzdGljcz10aGlzLnJlZ2lzdGVyKG5ldyBzLk11dGFibGVEaXNwb3NhYmxlKSx0aGlzLl9vbkJpbmFyeT10aGlzLnJlZ2lzdGVyKG5ldyBsLkV2ZW50RW1pdHRlciksdGhpcy5vbkJpbmFyeT10aGlzLl9vbkJpbmFyeS5ldmVudCx0aGlzLl9vbkRhdGE9dGhpcy5yZWdpc3RlcihuZXcgbC5FdmVudEVtaXR0ZXIpLHRoaXMub25EYXRhPXRoaXMuX29uRGF0YS5ldmVudCx0aGlzLl9vbkxpbmVGZWVkPXRoaXMucmVnaXN0ZXIobmV3IGwuRXZlbnRFbWl0dGVyKSx0aGlzLm9uTGluZUZlZWQ9dGhpcy5fb25MaW5lRmVlZC5ldmVudCx0aGlzLl9vblJlc2l6ZT10aGlzLnJlZ2lzdGVyKG5ldyBsLkV2ZW50RW1pdHRlciksdGhpcy5vblJlc2l6ZT10aGlzLl9vblJlc2l6ZS5ldmVudCx0aGlzLl9vbldyaXRlUGFyc2VkPXRoaXMucmVnaXN0ZXIobmV3IGwuRXZlbnRFbWl0dGVyKSx0aGlzLm9uV3JpdGVQYXJzZWQ9dGhpcy5fb25Xcml0ZVBhcnNlZC5ldmVudCx0aGlzLl9vblNjcm9sbD10aGlzLnJlZ2lzdGVyKG5ldyBsLkV2ZW50RW1pdHRlciksdGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2U9bmV3IG4uSW5zdGFudGlhdGlvblNlcnZpY2UsdGhpcy5vcHRpb25zU2VydmljZT10aGlzLnJlZ2lzdGVyKG5ldyBoLk9wdGlvbnNTZXJ2aWNlKGUpKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKHIuSU9wdGlvbnNTZXJ2aWNlLHRoaXMub3B0aW9uc1NlcnZpY2UpLHRoaXMuX2J1ZmZlclNlcnZpY2U9dGhpcy5yZWdpc3Rlcih0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5jcmVhdGVJbnN0YW5jZShhLkJ1ZmZlclNlcnZpY2UpKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKHIuSUJ1ZmZlclNlcnZpY2UsdGhpcy5fYnVmZmVyU2VydmljZSksdGhpcy5fbG9nU2VydmljZT10aGlzLnJlZ2lzdGVyKHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKG8uTG9nU2VydmljZSkpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uoci5JTG9nU2VydmljZSx0aGlzLl9sb2dTZXJ2aWNlKSx0aGlzLmNvcmVTZXJ2aWNlPXRoaXMucmVnaXN0ZXIodGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoYy5Db3JlU2VydmljZSkpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uoci5JQ29yZVNlcnZpY2UsdGhpcy5jb3JlU2VydmljZSksdGhpcy5jb3JlTW91c2VTZXJ2aWNlPXRoaXMucmVnaXN0ZXIodGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2UuY3JlYXRlSW5zdGFuY2UoZC5Db3JlTW91c2VTZXJ2aWNlKSksdGhpcy5faW5zdGFudGlhdGlvblNlcnZpY2Uuc2V0U2VydmljZShyLklDb3JlTW91c2VTZXJ2aWNlLHRoaXMuY29yZU1vdXNlU2VydmljZSksdGhpcy51bmljb2RlU2VydmljZT10aGlzLnJlZ2lzdGVyKHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKF8uVW5pY29kZVNlcnZpY2UpKSx0aGlzLl9pbnN0YW50aWF0aW9uU2VydmljZS5zZXRTZXJ2aWNlKHIuSVVuaWNvZGVTZXJ2aWNlLHRoaXMudW5pY29kZVNlcnZpY2UpLHRoaXMuX2NoYXJzZXRTZXJ2aWNlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKHUuQ2hhcnNldFNlcnZpY2UpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uoci5JQ2hhcnNldFNlcnZpY2UsdGhpcy5fY2hhcnNldFNlcnZpY2UpLHRoaXMuX29zY0xpbmtTZXJ2aWNlPXRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLmNyZWF0ZUluc3RhbmNlKGcuT3NjTGlua1NlcnZpY2UpLHRoaXMuX2luc3RhbnRpYXRpb25TZXJ2aWNlLnNldFNlcnZpY2Uoci5JT3NjTGlua1NlcnZpY2UsdGhpcy5fb3NjTGlua1NlcnZpY2UpLHRoaXMuX2lucHV0SGFuZGxlcj10aGlzLnJlZ2lzdGVyKG5ldyB2LklucHV0SGFuZGxlcih0aGlzLl9idWZmZXJTZXJ2aWNlLHRoaXMuX2NoYXJzZXRTZXJ2aWNlLHRoaXMuY29yZVNlcnZpY2UsdGhpcy5fbG9nU2VydmljZSx0aGlzLm9wdGlvbnNTZXJ2aWNlLHRoaXMuX29zY0xpbmtTZXJ2aWNlLHRoaXMuY29yZU1vdXNlU2VydmljZSx0aGlzLnVuaWNvZGVTZXJ2aWNlKSksdGhpcy5yZWdpc3RlcigoMCxsLmZvcndhcmRFdmVudCkodGhpcy5faW5wdXRIYW5kbGVyLm9uTGluZUZlZWQsdGhpcy5fb25MaW5lRmVlZCkpLHRoaXMucmVnaXN0ZXIodGhpcy5faW5wdXRIYW5kbGVyKSx0aGlzLnJlZ2lzdGVyKCgwLGwuZm9yd2FyZEV2ZW50KSh0aGlzLl9idWZmZXJTZXJ2aWNlLm9uUmVzaXplLHRoaXMuX29uUmVzaXplKSksdGhpcy5yZWdpc3RlcigoMCxsLmZvcndhcmRFdmVudCkodGhpcy5jb3JlU2VydmljZS5vbkRhdGEsdGhpcy5fb25EYXRhKSksdGhpcy5yZWdpc3RlcigoMCxsLmZvcndhcmRFdmVudCkodGhpcy5jb3JlU2VydmljZS5vbkJpbmFyeSx0aGlzLl9vbkJpbmFyeSkpLHRoaXMucmVnaXN0ZXIodGhpcy5jb3JlU2VydmljZS5vblJlcXVlc3RTY3JvbGxUb0JvdHRvbSgoKCk9PnRoaXMuc2Nyb2xsVG9Cb3R0b20oKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuY29yZVNlcnZpY2Uub25Vc2VySW5wdXQoKCgpPT50aGlzLl93cml0ZUJ1ZmZlci5oYW5kbGVVc2VySW5wdXQoKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMub3B0aW9uc1NlcnZpY2Uub25NdWx0aXBsZU9wdGlvbkNoYW5nZShbXCJ3aW5kb3dzTW9kZVwiLFwid2luZG93c1B0eVwiXSwoKCk9PnRoaXMuX2hhbmRsZVdpbmRvd3NQdHlPcHRpb25DaGFuZ2UoKSkpKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX2J1ZmZlclNlcnZpY2Uub25TY3JvbGwoKGU9Pnt0aGlzLl9vblNjcm9sbC5maXJlKHtwb3NpdGlvbjp0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCxzb3VyY2U6MH0pLHRoaXMuX2lucHV0SGFuZGxlci5tYXJrUmFuZ2VEaXJ0eSh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zY3JvbGxUb3AsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsQm90dG9tKX0pKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9pbnB1dEhhbmRsZXIub25TY3JvbGwoKGU9Pnt0aGlzLl9vblNjcm9sbC5maXJlKHtwb3NpdGlvbjp0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCxzb3VyY2U6MH0pLHRoaXMuX2lucHV0SGFuZGxlci5tYXJrUmFuZ2VEaXJ0eSh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5zY3JvbGxUb3AsdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIuc2Nyb2xsQm90dG9tKX0pKSksdGhpcy5fd3JpdGVCdWZmZXI9dGhpcy5yZWdpc3RlcihuZXcgcC5Xcml0ZUJ1ZmZlcigoKGUsdCk9PnRoaXMuX2lucHV0SGFuZGxlci5wYXJzZShlLHQpKSkpLHRoaXMucmVnaXN0ZXIoKDAsbC5mb3J3YXJkRXZlbnQpKHRoaXMuX3dyaXRlQnVmZmVyLm9uV3JpdGVQYXJzZWQsdGhpcy5fb25Xcml0ZVBhcnNlZCkpfXdyaXRlKGUsdCl7dGhpcy5fd3JpdGVCdWZmZXIud3JpdGUoZSx0KX13cml0ZVN5bmMoZSx0KXt0aGlzLl9sb2dTZXJ2aWNlLmxvZ0xldmVsPD1yLkxvZ0xldmVsRW51bS5XQVJOJiYhbSYmKHRoaXMuX2xvZ1NlcnZpY2Uud2FybihcIndyaXRlU3luYyBpcyB1bnJlbGlhYmxlIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi5cIiksbT0hMCksdGhpcy5fd3JpdGVCdWZmZXIud3JpdGVTeW5jKGUsdCl9aW5wdXQoZSx0PSEwKXt0aGlzLmNvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoZSx0KX1yZXNpemUoZSx0KXtpc05hTihlKXx8aXNOYU4odCl8fChlPU1hdGgubWF4KGUsYS5NSU5JTVVNX0NPTFMpLHQ9TWF0aC5tYXgodCxhLk1JTklNVU1fUk9XUyksdGhpcy5fYnVmZmVyU2VydmljZS5yZXNpemUoZSx0KSl9c2Nyb2xsKGUsdD0hMSl7dGhpcy5fYnVmZmVyU2VydmljZS5zY3JvbGwoZSx0KX1zY3JvbGxMaW5lcyhlLHQsaSl7dGhpcy5fYnVmZmVyU2VydmljZS5zY3JvbGxMaW5lcyhlLHQsaSl9c2Nyb2xsUGFnZXMoZSl7dGhpcy5zY3JvbGxMaW5lcyhlKih0aGlzLnJvd3MtMSkpfXNjcm9sbFRvVG9wKCl7dGhpcy5zY3JvbGxMaW5lcygtdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3ApfXNjcm9sbFRvQm90dG9tKCl7dGhpcy5zY3JvbGxMaW5lcyh0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55YmFzZS10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcCl9c2Nyb2xsVG9MaW5lKGUpe2NvbnN0IHQ9ZS10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55ZGlzcDswIT09dCYmdGhpcy5zY3JvbGxMaW5lcyh0KX1yZWdpc3RlckVzY0hhbmRsZXIoZSx0KXtyZXR1cm4gdGhpcy5faW5wdXRIYW5kbGVyLnJlZ2lzdGVyRXNjSGFuZGxlcihlLHQpfXJlZ2lzdGVyRGNzSGFuZGxlcihlLHQpe3JldHVybiB0aGlzLl9pbnB1dEhhbmRsZXIucmVnaXN0ZXJEY3NIYW5kbGVyKGUsdCl9cmVnaXN0ZXJDc2lIYW5kbGVyKGUsdCl7cmV0dXJuIHRoaXMuX2lucHV0SGFuZGxlci5yZWdpc3RlckNzaUhhbmRsZXIoZSx0KX1yZWdpc3Rlck9zY0hhbmRsZXIoZSx0KXtyZXR1cm4gdGhpcy5faW5wdXRIYW5kbGVyLnJlZ2lzdGVyT3NjSGFuZGxlcihlLHQpfV9zZXR1cCgpe3RoaXMuX2hhbmRsZVdpbmRvd3NQdHlPcHRpb25DaGFuZ2UoKX1yZXNldCgpe3RoaXMuX2lucHV0SGFuZGxlci5yZXNldCgpLHRoaXMuX2J1ZmZlclNlcnZpY2UucmVzZXQoKSx0aGlzLl9jaGFyc2V0U2VydmljZS5yZXNldCgpLHRoaXMuY29yZVNlcnZpY2UucmVzZXQoKSx0aGlzLmNvcmVNb3VzZVNlcnZpY2UucmVzZXQoKX1faGFuZGxlV2luZG93c1B0eU9wdGlvbkNoYW5nZSgpe2xldCBlPSExO2NvbnN0IHQ9dGhpcy5vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLndpbmRvd3NQdHk7dCYmdm9pZCAwIT09dC5idWlsZE51bWJlciYmdm9pZCAwIT09dC5idWlsZE51bWJlcj9lPSEhKFwiY29ucHR5XCI9PT10LmJhY2tlbmQmJnQuYnVpbGROdW1iZXI8MjEzNzYpOnRoaXMub3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy53aW5kb3dzTW9kZSYmKGU9ITApLGU/dGhpcy5fZW5hYmxlV2luZG93c1dyYXBwaW5nSGV1cmlzdGljcygpOnRoaXMuX3dpbmRvd3NXcmFwcGluZ0hldXJpc3RpY3MuY2xlYXIoKX1fZW5hYmxlV2luZG93c1dyYXBwaW5nSGV1cmlzdGljcygpe2lmKCF0aGlzLl93aW5kb3dzV3JhcHBpbmdIZXVyaXN0aWNzLnZhbHVlKXtjb25zdCBlPVtdO2UucHVzaCh0aGlzLm9uTGluZUZlZWQoZi51cGRhdGVXaW5kb3dzTW9kZVdyYXBwZWRTdGF0ZS5iaW5kKG51bGwsdGhpcy5fYnVmZmVyU2VydmljZSkpKSxlLnB1c2godGhpcy5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiSFwifSwoKCk9PigoMCxmLnVwZGF0ZVdpbmRvd3NNb2RlV3JhcHBlZFN0YXRlKSh0aGlzLl9idWZmZXJTZXJ2aWNlKSwhMSkpKSksdGhpcy5fd2luZG93c1dyYXBwaW5nSGV1cmlzdGljcy52YWx1ZT0oMCxzLnRvRGlzcG9zYWJsZSkoKCgpPT57Zm9yKGNvbnN0IHQgb2YgZSl0LmRpc3Bvc2UoKX0pKX19fXQuQ29yZVRlcm1pbmFsPVN9LDg0NjA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnJ1bkFuZFN1YnNjcmliZT10LmZvcndhcmRFdmVudD10LkV2ZW50RW1pdHRlcj12b2lkIDAsdC5FdmVudEVtaXR0ZXI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9saXN0ZW5lcnM9W10sdGhpcy5fZGlzcG9zZWQ9ITF9Z2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuX2V2ZW50fHwodGhpcy5fZXZlbnQ9ZT0+KHRoaXMuX2xpc3RlbmVycy5wdXNoKGUpLHtkaXNwb3NlOigpPT57aWYoIXRoaXMuX2Rpc3Bvc2VkKWZvcihsZXQgdD0wO3Q8dGhpcy5fbGlzdGVuZXJzLmxlbmd0aDt0KyspaWYodGhpcy5fbGlzdGVuZXJzW3RdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSkpLHRoaXMuX2V2ZW50fWZpcmUoZSx0KXtjb25zdCBpPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5fbGlzdGVuZXJzLmxlbmd0aDtlKyspaS5wdXNoKHRoaXMuX2xpc3RlbmVyc1tlXSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspaVtzXS5jYWxsKHZvaWQgMCxlLHQpfWRpc3Bvc2UoKXt0aGlzLmNsZWFyTGlzdGVuZXJzKCksdGhpcy5fZGlzcG9zZWQ9ITB9Y2xlYXJMaXN0ZW5lcnMoKXt0aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnMubGVuZ3RoPTApfX0sdC5mb3J3YXJkRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSgoZT0+dC5maXJlKGUpKSl9LHQucnVuQW5kU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQodm9pZCAwKSxlKChlPT50KGUpKSl9fSw1NDM1OmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSW5wdXRIYW5kbGVyPXQuV2luZG93c09wdGlvbnNSZXBvcnRUeXBlPXZvaWQgMDtjb25zdCBuPWkoMjU4NCksbz1pKDcxMTYpLGE9aSgyMDE1KSxoPWkoODQ0KSxjPWkoNDgyKSxsPWkoODQzNyksZD1pKDg0NjApLF89aSg2NDMpLHU9aSg1MTEpLGY9aSgzNzM0KSx2PWkoMjU4NSkscD1pKDE0ODApLGc9aSg2MjQyKSxtPWkoNjM1MSksUz1pKDU5NDEpLEM9e1wiKFwiOjAsXCIpXCI6MSxcIipcIjoyLFwiK1wiOjMsXCItXCI6MSxcIi5cIjoyfSxiPTEzMTA3MjtmdW5jdGlvbiB3KGUsdCl7aWYoZT4yNClyZXR1cm4gdC5zZXRXaW5MaW5lc3x8ITE7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4hIXQucmVzdG9yZVdpbjtjYXNlIDI6cmV0dXJuISF0Lm1pbmltaXplV2luO2Nhc2UgMzpyZXR1cm4hIXQuc2V0V2luUG9zaXRpb247Y2FzZSA0OnJldHVybiEhdC5zZXRXaW5TaXplUGl4ZWxzO2Nhc2UgNTpyZXR1cm4hIXQucmFpc2VXaW47Y2FzZSA2OnJldHVybiEhdC5sb3dlcldpbjtjYXNlIDc6cmV0dXJuISF0LnJlZnJlc2hXaW47Y2FzZSA4OnJldHVybiEhdC5zZXRXaW5TaXplQ2hhcnM7Y2FzZSA5OnJldHVybiEhdC5tYXhpbWl6ZVdpbjtjYXNlIDEwOnJldHVybiEhdC5mdWxsc2NyZWVuV2luO2Nhc2UgMTE6cmV0dXJuISF0LmdldFdpblN0YXRlO2Nhc2UgMTM6cmV0dXJuISF0LmdldFdpblBvc2l0aW9uO2Nhc2UgMTQ6cmV0dXJuISF0LmdldFdpblNpemVQaXhlbHM7Y2FzZSAxNTpyZXR1cm4hIXQuZ2V0U2NyZWVuU2l6ZVBpeGVscztjYXNlIDE2OnJldHVybiEhdC5nZXRDZWxsU2l6ZVBpeGVscztjYXNlIDE4OnJldHVybiEhdC5nZXRXaW5TaXplQ2hhcnM7Y2FzZSAxOTpyZXR1cm4hIXQuZ2V0U2NyZWVuU2l6ZUNoYXJzO2Nhc2UgMjA6cmV0dXJuISF0LmdldEljb25UaXRsZTtjYXNlIDIxOnJldHVybiEhdC5nZXRXaW5UaXRsZTtjYXNlIDIyOnJldHVybiEhdC5wdXNoVGl0bGU7Y2FzZSAyMzpyZXR1cm4hIXQucG9wVGl0bGU7Y2FzZSAyNDpyZXR1cm4hIXQuc2V0V2luTGluZXN9cmV0dXJuITF9dmFyIHk7IWZ1bmN0aW9uKGUpe2VbZS5HRVRfV0lOX1NJWkVfUElYRUxTPTBdPVwiR0VUX1dJTl9TSVpFX1BJWEVMU1wiLGVbZS5HRVRfQ0VMTF9TSVpFX1BJWEVMUz0xXT1cIkdFVF9DRUxMX1NJWkVfUElYRUxTXCJ9KHl8fCh0LldpbmRvd3NPcHRpb25zUmVwb3J0VHlwZT15PXt9KSk7bGV0IEU9MDtjbGFzcyBrIGV4dGVuZHMgaC5EaXNwb3NhYmxle2dldEF0dHJEYXRhKCl7cmV0dXJuIHRoaXMuX2N1ckF0dHJEYXRhfWNvbnN0cnVjdG9yKGUsdCxpLHMscixoLF8sZix2PW5ldyBhLkVzY2FwZVNlcXVlbmNlUGFyc2VyKXtzdXBlcigpLHRoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLl9jaGFyc2V0U2VydmljZT10LHRoaXMuX2NvcmVTZXJ2aWNlPWksdGhpcy5fbG9nU2VydmljZT1zLHRoaXMuX29wdGlvbnNTZXJ2aWNlPXIsdGhpcy5fb3NjTGlua1NlcnZpY2U9aCx0aGlzLl9jb3JlTW91c2VTZXJ2aWNlPV8sdGhpcy5fdW5pY29kZVNlcnZpY2U9Zix0aGlzLl9wYXJzZXI9dix0aGlzLl9wYXJzZUJ1ZmZlcj1uZXcgVWludDMyQXJyYXkoNDA5NiksdGhpcy5fc3RyaW5nRGVjb2Rlcj1uZXcgYy5TdHJpbmdUb1V0ZjMyLHRoaXMuX3V0ZjhEZWNvZGVyPW5ldyBjLlV0ZjhUb1V0ZjMyLHRoaXMuX3dvcmtDZWxsPW5ldyB1LkNlbGxEYXRhLHRoaXMuX3dpbmRvd1RpdGxlPVwiXCIsdGhpcy5faWNvbk5hbWU9XCJcIix0aGlzLl93aW5kb3dUaXRsZVN0YWNrPVtdLHRoaXMuX2ljb25OYW1lU3RhY2s9W10sdGhpcy5fY3VyQXR0ckRhdGE9bC5ERUZBVUxUX0FUVFJfREFUQS5jbG9uZSgpLHRoaXMuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbD1sLkRFRkFVTFRfQVRUUl9EQVRBLmNsb25lKCksdGhpcy5fb25SZXF1ZXN0QmVsbD10aGlzLnJlZ2lzdGVyKG5ldyBkLkV2ZW50RW1pdHRlciksdGhpcy5vblJlcXVlc3RCZWxsPXRoaXMuX29uUmVxdWVzdEJlbGwuZXZlbnQsdGhpcy5fb25SZXF1ZXN0UmVmcmVzaFJvd3M9dGhpcy5yZWdpc3RlcihuZXcgZC5FdmVudEVtaXR0ZXIpLHRoaXMub25SZXF1ZXN0UmVmcmVzaFJvd3M9dGhpcy5fb25SZXF1ZXN0UmVmcmVzaFJvd3MuZXZlbnQsdGhpcy5fb25SZXF1ZXN0UmVzZXQ9dGhpcy5yZWdpc3RlcihuZXcgZC5FdmVudEVtaXR0ZXIpLHRoaXMub25SZXF1ZXN0UmVzZXQ9dGhpcy5fb25SZXF1ZXN0UmVzZXQuZXZlbnQsdGhpcy5fb25SZXF1ZXN0U2VuZEZvY3VzPXRoaXMucmVnaXN0ZXIobmV3IGQuRXZlbnRFbWl0dGVyKSx0aGlzLm9uUmVxdWVzdFNlbmRGb2N1cz10aGlzLl9vblJlcXVlc3RTZW5kRm9jdXMuZXZlbnQsdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhcj10aGlzLnJlZ2lzdGVyKG5ldyBkLkV2ZW50RW1pdHRlciksdGhpcy5vblJlcXVlc3RTeW5jU2Nyb2xsQmFyPXRoaXMuX29uUmVxdWVzdFN5bmNTY3JvbGxCYXIuZXZlbnQsdGhpcy5fb25SZXF1ZXN0V2luZG93c09wdGlvbnNSZXBvcnQ9dGhpcy5yZWdpc3RlcihuZXcgZC5FdmVudEVtaXR0ZXIpLHRoaXMub25SZXF1ZXN0V2luZG93c09wdGlvbnNSZXBvcnQ9dGhpcy5fb25SZXF1ZXN0V2luZG93c09wdGlvbnNSZXBvcnQuZXZlbnQsdGhpcy5fb25BMTF5Q2hhcj10aGlzLnJlZ2lzdGVyKG5ldyBkLkV2ZW50RW1pdHRlciksdGhpcy5vbkExMXlDaGFyPXRoaXMuX29uQTExeUNoYXIuZXZlbnQsdGhpcy5fb25BMTF5VGFiPXRoaXMucmVnaXN0ZXIobmV3IGQuRXZlbnRFbWl0dGVyKSx0aGlzLm9uQTExeVRhYj10aGlzLl9vbkExMXlUYWIuZXZlbnQsdGhpcy5fb25DdXJzb3JNb3ZlPXRoaXMucmVnaXN0ZXIobmV3IGQuRXZlbnRFbWl0dGVyKSx0aGlzLm9uQ3Vyc29yTW92ZT10aGlzLl9vbkN1cnNvck1vdmUuZXZlbnQsdGhpcy5fb25MaW5lRmVlZD10aGlzLnJlZ2lzdGVyKG5ldyBkLkV2ZW50RW1pdHRlciksdGhpcy5vbkxpbmVGZWVkPXRoaXMuX29uTGluZUZlZWQuZXZlbnQsdGhpcy5fb25TY3JvbGw9dGhpcy5yZWdpc3RlcihuZXcgZC5FdmVudEVtaXR0ZXIpLHRoaXMub25TY3JvbGw9dGhpcy5fb25TY3JvbGwuZXZlbnQsdGhpcy5fb25UaXRsZUNoYW5nZT10aGlzLnJlZ2lzdGVyKG5ldyBkLkV2ZW50RW1pdHRlciksdGhpcy5vblRpdGxlQ2hhbmdlPXRoaXMuX29uVGl0bGVDaGFuZ2UuZXZlbnQsdGhpcy5fb25Db2xvcj10aGlzLnJlZ2lzdGVyKG5ldyBkLkV2ZW50RW1pdHRlciksdGhpcy5vbkNvbG9yPXRoaXMuX29uQ29sb3IuZXZlbnQsdGhpcy5fcGFyc2VTdGFjaz17cGF1c2VkOiExLGN1cnNvclN0YXJ0WDowLGN1cnNvclN0YXJ0WTowLGRlY29kZWRMZW5ndGg6MCxwb3NpdGlvbjowfSx0aGlzLl9zcGVjaWFsQ29sb3JzPVsyNTYsMjU3LDI1OF0sdGhpcy5yZWdpc3Rlcih0aGlzLl9wYXJzZXIpLHRoaXMuX2RpcnR5Um93VHJhY2tlcj1uZXcgTCh0aGlzLl9idWZmZXJTZXJ2aWNlKSx0aGlzLl9hY3RpdmVCdWZmZXI9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIsdGhpcy5yZWdpc3Rlcih0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcnMub25CdWZmZXJBY3RpdmF0ZSgoZT0+dGhpcy5fYWN0aXZlQnVmZmVyPWUuYWN0aXZlQnVmZmVyKSkpLHRoaXMuX3BhcnNlci5zZXRDc2lIYW5kbGVyRmFsbGJhY2soKChlLHQpPT57dGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIlVua25vd24gQ1NJIGNvZGU6IFwiLHtpZGVudGlmaWVyOnRoaXMuX3BhcnNlci5pZGVudFRvU3RyaW5nKGUpLHBhcmFtczp0LnRvQXJyYXkoKX0pfSkpLHRoaXMuX3BhcnNlci5zZXRFc2NIYW5kbGVyRmFsbGJhY2soKGU9Pnt0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiVW5rbm93biBFU0MgY29kZTogXCIse2lkZW50aWZpZXI6dGhpcy5fcGFyc2VyLmlkZW50VG9TdHJpbmcoZSl9KX0pKSx0aGlzLl9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXJGYWxsYmFjaygoZT0+e3RoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJVbmtub3duIEVYRUNVVEUgY29kZTogXCIse2NvZGU6ZX0pfSkpLHRoaXMuX3BhcnNlci5zZXRPc2NIYW5kbGVyRmFsbGJhY2soKChlLHQsaSk9Pnt0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiVW5rbm93biBPU0MgY29kZTogXCIse2lkZW50aWZpZXI6ZSxhY3Rpb246dCxkYXRhOml9KX0pKSx0aGlzLl9wYXJzZXIuc2V0RGNzSGFuZGxlckZhbGxiYWNrKCgoZSx0LGkpPT57XCJIT09LXCI9PT10JiYoaT1pLnRvQXJyYXkoKSksdGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIlVua25vd24gRENTIGNvZGU6IFwiLHtpZGVudGlmaWVyOnRoaXMuX3BhcnNlci5pZGVudFRvU3RyaW5nKGUpLGFjdGlvbjp0LHBheWxvYWQ6aX0pfSkpLHRoaXMuX3BhcnNlci5zZXRQcmludEhhbmRsZXIoKChlLHQsaSk9PnRoaXMucHJpbnQoZSx0LGkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJAXCJ9LChlPT50aGlzLmluc2VydENoYXJzKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiBcIixmaW5hbDpcIkBcIn0sKGU9PnRoaXMuc2Nyb2xsTGVmdChlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiQVwifSwoZT0+dGhpcy5jdXJzb3JVcChlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIgXCIsZmluYWw6XCJBXCJ9LChlPT50aGlzLnNjcm9sbFJpZ2h0KGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJCXCJ9LChlPT50aGlzLmN1cnNvckRvd24oZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIkNcIn0sKGU9PnRoaXMuY3Vyc29yRm9yd2FyZChlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiRFwifSwoZT0+dGhpcy5jdXJzb3JCYWNrd2FyZChlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiRVwifSwoZT0+dGhpcy5jdXJzb3JOZXh0TGluZShlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiRlwifSwoZT0+dGhpcy5jdXJzb3JQcmVjZWRpbmdMaW5lKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJHXCJ9LChlPT50aGlzLmN1cnNvckNoYXJBYnNvbHV0ZShlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiSFwifSwoZT0+dGhpcy5jdXJzb3JQb3NpdGlvbihlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiSVwifSwoZT0+dGhpcy5jdXJzb3JGb3J3YXJkVGFiKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJKXCJ9LChlPT50aGlzLmVyYXNlSW5EaXNwbGF5KGUsITEpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGZpbmFsOlwiSlwifSwoZT0+dGhpcy5lcmFzZUluRGlzcGxheShlLCEwKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiS1wifSwoZT0+dGhpcy5lcmFzZUluTGluZShlLCExKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe3ByZWZpeDpcIj9cIixmaW5hbDpcIktcIn0sKGU9PnRoaXMuZXJhc2VJbkxpbmUoZSwhMCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIkxcIn0sKGU9PnRoaXMuaW5zZXJ0TGluZXMoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIk1cIn0sKGU9PnRoaXMuZGVsZXRlTGluZXMoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIlBcIn0sKGU9PnRoaXMuZGVsZXRlQ2hhcnMoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIlNcIn0sKGU9PnRoaXMuc2Nyb2xsVXAoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIlRcIn0sKGU9PnRoaXMuc2Nyb2xsRG93bihlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiWFwifSwoZT0+dGhpcy5lcmFzZUNoYXJzKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJaXCJ9LChlPT50aGlzLmN1cnNvckJhY2t3YXJkVGFiKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJgXCJ9LChlPT50aGlzLmNoYXJQb3NBYnNvbHV0ZShlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiYVwifSwoZT0+dGhpcy5oUG9zaXRpb25SZWxhdGl2ZShlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiYlwifSwoZT0+dGhpcy5yZXBlYXRQcmVjZWRpbmdDaGFyYWN0ZXIoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcImNcIn0sKGU9PnRoaXMuc2VuZERldmljZUF0dHJpYnV0ZXNQcmltYXJ5KGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7cHJlZml4OlwiPlwiLGZpbmFsOlwiY1wifSwoZT0+dGhpcy5zZW5kRGV2aWNlQXR0cmlidXRlc1NlY29uZGFyeShlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiZFwifSwoZT0+dGhpcy5saW5lUG9zQWJzb2x1dGUoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcImVcIn0sKGU9PnRoaXMudlBvc2l0aW9uUmVsYXRpdmUoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcImZcIn0sKGU9PnRoaXMuaFZQb3NpdGlvbihlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiZ1wifSwoZT0+dGhpcy50YWJDbGVhcihlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwiaFwifSwoZT0+dGhpcy5zZXRNb2RlKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGZpbmFsOlwiaFwifSwoZT0+dGhpcy5zZXRNb2RlUHJpdmF0ZShlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwibFwifSwoZT0+dGhpcy5yZXNldE1vZGUoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtwcmVmaXg6XCI/XCIsZmluYWw6XCJsXCJ9LChlPT50aGlzLnJlc2V0TW9kZVByaXZhdGUoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIm1cIn0sKGU9PnRoaXMuY2hhckF0dHJpYnV0ZXMoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcIm5cIn0sKGU9PnRoaXMuZGV2aWNlU3RhdHVzKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGZpbmFsOlwiblwifSwoZT0+dGhpcy5kZXZpY2VTdGF0dXNQcml2YXRlKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiFcIixmaW5hbDpcInBcIn0sKGU9PnRoaXMuc29mdFJlc2V0KGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiBcIixmaW5hbDpcInFcIn0sKGU9PnRoaXMuc2V0Q3Vyc29yU3R5bGUoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcInJcIn0sKGU9PnRoaXMuc2V0U2Nyb2xsUmVnaW9uKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7ZmluYWw6XCJzXCJ9LChlPT50aGlzLnNhdmVDdXJzb3IoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtmaW5hbDpcInRcIn0sKGU9PnRoaXMud2luZG93T3B0aW9ucyhlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ZpbmFsOlwidVwifSwoZT0+dGhpcy5yZXN0b3JlQ3Vyc29yKGUpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIidcIixmaW5hbDpcIn1cIn0sKGU9PnRoaXMuaW5zZXJ0Q29sdW1ucyhlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCInXCIsZmluYWw6XCJ+XCJ9LChlPT50aGlzLmRlbGV0ZUNvbHVtbnMoZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJDc2lIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOidcIicsZmluYWw6XCJxXCJ9LChlPT50aGlzLnNlbGVjdFByb3RlY3RlZChlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIkXCIsZmluYWw6XCJwXCJ9LChlPT50aGlzLnJlcXVlc3RNb2RlKGUsITApKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcih7cHJlZml4OlwiP1wiLGludGVybWVkaWF0ZXM6XCIkXCIsZmluYWw6XCJwXCJ9LChlPT50aGlzLnJlcXVlc3RNb2RlKGUsITEpKSksdGhpcy5fcGFyc2VyLnNldEV4ZWN1dGVIYW5kbGVyKG4uQzAuQkVMLCgoKT0+dGhpcy5iZWxsKCkpKSx0aGlzLl9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIobi5DMC5MRiwoKCk9PnRoaXMubGluZUZlZWQoKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMwLlZULCgoKT0+dGhpcy5saW5lRmVlZCgpKSksdGhpcy5fcGFyc2VyLnNldEV4ZWN1dGVIYW5kbGVyKG4uQzAuRkYsKCgpPT50aGlzLmxpbmVGZWVkKCkpKSx0aGlzLl9wYXJzZXIuc2V0RXhlY3V0ZUhhbmRsZXIobi5DMC5DUiwoKCk9PnRoaXMuY2FycmlhZ2VSZXR1cm4oKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMwLkJTLCgoKT0+dGhpcy5iYWNrc3BhY2UoKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMwLkhULCgoKT0+dGhpcy50YWIoKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMwLlNPLCgoKT0+dGhpcy5zaGlmdE91dCgpKSksdGhpcy5fcGFyc2VyLnNldEV4ZWN1dGVIYW5kbGVyKG4uQzAuU0ksKCgpPT50aGlzLnNoaWZ0SW4oKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMxLklORCwoKCk9PnRoaXMuaW5kZXgoKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMxLk5FTCwoKCk9PnRoaXMubmV4dExpbmUoKSkpLHRoaXMuX3BhcnNlci5zZXRFeGVjdXRlSGFuZGxlcihuLkMxLkhUUywoKCk9PnRoaXMudGFiU2V0KCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJPc2NIYW5kbGVyKDAsbmV3IGcuT3NjSGFuZGxlcigoZT0+KHRoaXMuc2V0VGl0bGUoZSksdGhpcy5zZXRJY29uTmFtZShlKSwhMCkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcigxLG5ldyBnLk9zY0hhbmRsZXIoKGU9PnRoaXMuc2V0SWNvbk5hbWUoZSkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcigyLG5ldyBnLk9zY0hhbmRsZXIoKGU9PnRoaXMuc2V0VGl0bGUoZSkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcig0LG5ldyBnLk9zY0hhbmRsZXIoKGU9PnRoaXMuc2V0T3JSZXBvcnRJbmRleGVkQ29sb3IoZSkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcig4LG5ldyBnLk9zY0hhbmRsZXIoKGU9PnRoaXMuc2V0SHlwZXJsaW5rKGUpKSkpLHRoaXMuX3BhcnNlci5yZWdpc3Rlck9zY0hhbmRsZXIoMTAsbmV3IGcuT3NjSGFuZGxlcigoZT0+dGhpcy5zZXRPclJlcG9ydEZnQ29sb3IoZSkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcigxMSxuZXcgZy5Pc2NIYW5kbGVyKChlPT50aGlzLnNldE9yUmVwb3J0QmdDb2xvcihlKSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJPc2NIYW5kbGVyKDEyLG5ldyBnLk9zY0hhbmRsZXIoKGU9PnRoaXMuc2V0T3JSZXBvcnRDdXJzb3JDb2xvcihlKSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJPc2NIYW5kbGVyKDEwNCxuZXcgZy5Pc2NIYW5kbGVyKChlPT50aGlzLnJlc3RvcmVJbmRleGVkQ29sb3IoZSkpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcigxMTAsbmV3IGcuT3NjSGFuZGxlcigoZT0+dGhpcy5yZXN0b3JlRmdDb2xvcihlKSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJPc2NIYW5kbGVyKDExMSxuZXcgZy5Pc2NIYW5kbGVyKChlPT50aGlzLnJlc3RvcmVCZ0NvbG9yKGUpKSkpLHRoaXMuX3BhcnNlci5yZWdpc3Rlck9zY0hhbmRsZXIoMTEyLG5ldyBnLk9zY0hhbmRsZXIoKGU9PnRoaXMucmVzdG9yZUN1cnNvckNvbG9yKGUpKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ZpbmFsOlwiN1wifSwoKCk9PnRoaXMuc2F2ZUN1cnNvcigpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7ZmluYWw6XCI4XCJ9LCgoKT0+dGhpcy5yZXN0b3JlQ3Vyc29yKCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIkRcIn0sKCgpPT50aGlzLmluZGV4KCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIkVcIn0sKCgpPT50aGlzLm5leHRMaW5lKCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIkhcIn0sKCgpPT50aGlzLnRhYlNldCgpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7ZmluYWw6XCJNXCJ9LCgoKT0+dGhpcy5yZXZlcnNlSW5kZXgoKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ZpbmFsOlwiPVwifSwoKCk9PnRoaXMua2V5cGFkQXBwbGljYXRpb25Nb2RlKCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIj5cIn0sKCgpPT50aGlzLmtleXBhZE51bWVyaWNNb2RlKCkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcImNcIn0sKCgpPT50aGlzLmZ1bGxSZXNldCgpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7ZmluYWw6XCJuXCJ9LCgoKT0+dGhpcy5zZXRnTGV2ZWwoMikpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIm9cIn0sKCgpPT50aGlzLnNldGdMZXZlbCgzKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ZpbmFsOlwifFwifSwoKCk9PnRoaXMuc2V0Z0xldmVsKDMpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7ZmluYWw6XCJ9XCJ9LCgoKT0+dGhpcy5zZXRnTGV2ZWwoMikpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIn5cIn0sKCgpPT50aGlzLnNldGdMZXZlbCgxKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIlXCIsZmluYWw6XCJAXCJ9LCgoKT0+dGhpcy5zZWxlY3REZWZhdWx0Q2hhcnNldCgpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIiVcIixmaW5hbDpcIkdcIn0sKCgpPT50aGlzLnNlbGVjdERlZmF1bHRDaGFyc2V0KCkpKTtmb3IoY29uc3QgZSBpbiBvLkNIQVJTRVRTKXRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIoXCIsZmluYWw6ZX0sKCgpPT50aGlzLnNlbGVjdENoYXJzZXQoXCIoXCIrZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiKVwiLGZpbmFsOmV9LCgoKT0+dGhpcy5zZWxlY3RDaGFyc2V0KFwiKVwiK2UpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIipcIixmaW5hbDplfSwoKCk9PnRoaXMuc2VsZWN0Q2hhcnNldChcIipcIitlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIrXCIsZmluYWw6ZX0sKCgpPT50aGlzLnNlbGVjdENoYXJzZXQoXCIrXCIrZSkpKSx0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiLVwiLGZpbmFsOmV9LCgoKT0+dGhpcy5zZWxlY3RDaGFyc2V0KFwiLVwiK2UpKSksdGhpcy5fcGFyc2VyLnJlZ2lzdGVyRXNjSGFuZGxlcih7aW50ZXJtZWRpYXRlczpcIi5cIixmaW5hbDplfSwoKCk9PnRoaXMuc2VsZWN0Q2hhcnNldChcIi5cIitlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIvXCIsZmluYWw6ZX0sKCgpPT50aGlzLnNlbGVjdENoYXJzZXQoXCIvXCIrZSkpKTt0aGlzLl9wYXJzZXIucmVnaXN0ZXJFc2NIYW5kbGVyKHtpbnRlcm1lZGlhdGVzOlwiI1wiLGZpbmFsOlwiOFwifSwoKCk9PnRoaXMuc2NyZWVuQWxpZ25tZW50UGF0dGVybigpKSksdGhpcy5fcGFyc2VyLnNldEVycm9ySGFuZGxlcigoZT0+KHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoXCJQYXJzaW5nIGVycm9yOiBcIixlKSxlKSkpLHRoaXMuX3BhcnNlci5yZWdpc3RlckRjc0hhbmRsZXIoe2ludGVybWVkaWF0ZXM6XCIkXCIsZmluYWw6XCJxXCJ9LG5ldyBtLkRjc0hhbmRsZXIoKChlLHQpPT50aGlzLnJlcXVlc3RTdGF0dXNTdHJpbmcoZSx0KSkpKX1fcHJlc2VydmVTdGFjayhlLHQsaSxzKXt0aGlzLl9wYXJzZVN0YWNrLnBhdXNlZD0hMCx0aGlzLl9wYXJzZVN0YWNrLmN1cnNvclN0YXJ0WD1lLHRoaXMuX3BhcnNlU3RhY2suY3Vyc29yU3RhcnRZPXQsdGhpcy5fcGFyc2VTdGFjay5kZWNvZGVkTGVuZ3RoPWksdGhpcy5fcGFyc2VTdGFjay5wb3NpdGlvbj1zfV9sb2dTbG93UmVzb2x2aW5nQXN5bmMoZSl7dGhpcy5fbG9nU2VydmljZS5sb2dMZXZlbDw9di5Mb2dMZXZlbEVudW0uV0FSTiYmUHJvbWlzZS5yYWNlKFtlLG5ldyBQcm9taXNlKCgoZSx0KT0+c2V0VGltZW91dCgoKCk9PnQoXCIjU0xPV19USU1FT1VUXCIpKSw1ZTMpKSldKS5jYXRjaCgoZT0+e2lmKFwiI1NMT1dfVElNRU9VVFwiIT09ZSl0aHJvdyBlO2NvbnNvbGUud2FybihcImFzeW5jIHBhcnNlciBoYW5kbGVyIHRha2luZyBsb25nZXIgdGhhbiA1MDAwIG1zXCIpfSkpfV9nZXRDdXJyZW50TGlua0lkKCl7cmV0dXJuIHRoaXMuX2N1ckF0dHJEYXRhLmV4dGVuZGVkLnVybElkfXBhcnNlKGUsdCl7bGV0IGkscz10aGlzLl9hY3RpdmVCdWZmZXIueCxyPXRoaXMuX2FjdGl2ZUJ1ZmZlci55LG49MDtjb25zdCBvPXRoaXMuX3BhcnNlU3RhY2sucGF1c2VkO2lmKG8pe2lmKGk9dGhpcy5fcGFyc2VyLnBhcnNlKHRoaXMuX3BhcnNlQnVmZmVyLHRoaXMuX3BhcnNlU3RhY2suZGVjb2RlZExlbmd0aCx0KSlyZXR1cm4gdGhpcy5fbG9nU2xvd1Jlc29sdmluZ0FzeW5jKGkpLGk7cz10aGlzLl9wYXJzZVN0YWNrLmN1cnNvclN0YXJ0WCxyPXRoaXMuX3BhcnNlU3RhY2suY3Vyc29yU3RhcnRZLHRoaXMuX3BhcnNlU3RhY2sucGF1c2VkPSExLGUubGVuZ3RoPmImJihuPXRoaXMuX3BhcnNlU3RhY2sucG9zaXRpb24rYil9aWYodGhpcy5fbG9nU2VydmljZS5sb2dMZXZlbDw9di5Mb2dMZXZlbEVudW0uREVCVUcmJnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJwYXJzaW5nIGRhdGFcIisoXCJzdHJpbmdcIj09dHlwZW9mIGU/YCBcIiR7ZX1cImA6YCBcIiR7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGUsKGU9PlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKS5qb2luKFwiXCIpfVwiYCksXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5zcGxpdChcIlwiKS5tYXAoKGU9PmUuY2hhckNvZGVBdCgwKSkpOmUpLHRoaXMuX3BhcnNlQnVmZmVyLmxlbmd0aDxlLmxlbmd0aCYmdGhpcy5fcGFyc2VCdWZmZXIubGVuZ3RoPGImJih0aGlzLl9wYXJzZUJ1ZmZlcj1uZXcgVWludDMyQXJyYXkoTWF0aC5taW4oZS5sZW5ndGgsYikpKSxvfHx0aGlzLl9kaXJ0eVJvd1RyYWNrZXIuY2xlYXJSYW5nZSgpLGUubGVuZ3RoPmIpZm9yKGxldCB0PW47dDxlLmxlbmd0aDt0Kz1iKXtjb25zdCBuPXQrYjxlLmxlbmd0aD90K2I6ZS5sZW5ndGgsbz1cInN0cmluZ1wiPT10eXBlb2YgZT90aGlzLl9zdHJpbmdEZWNvZGVyLmRlY29kZShlLnN1YnN0cmluZyh0LG4pLHRoaXMuX3BhcnNlQnVmZmVyKTp0aGlzLl91dGY4RGVjb2Rlci5kZWNvZGUoZS5zdWJhcnJheSh0LG4pLHRoaXMuX3BhcnNlQnVmZmVyKTtpZihpPXRoaXMuX3BhcnNlci5wYXJzZSh0aGlzLl9wYXJzZUJ1ZmZlcixvKSlyZXR1cm4gdGhpcy5fcHJlc2VydmVTdGFjayhzLHIsbyx0KSx0aGlzLl9sb2dTbG93UmVzb2x2aW5nQXN5bmMoaSksaX1lbHNlIGlmKCFvKXtjb25zdCB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3RoaXMuX3N0cmluZ0RlY29kZXIuZGVjb2RlKGUsdGhpcy5fcGFyc2VCdWZmZXIpOnRoaXMuX3V0ZjhEZWNvZGVyLmRlY29kZShlLHRoaXMuX3BhcnNlQnVmZmVyKTtpZihpPXRoaXMuX3BhcnNlci5wYXJzZSh0aGlzLl9wYXJzZUJ1ZmZlcix0KSlyZXR1cm4gdGhpcy5fcHJlc2VydmVTdGFjayhzLHIsdCwwKSx0aGlzLl9sb2dTbG93UmVzb2x2aW5nQXN5bmMoaSksaX10aGlzLl9hY3RpdmVCdWZmZXIueD09PXMmJnRoaXMuX2FjdGl2ZUJ1ZmZlci55PT09cnx8dGhpcy5fb25DdXJzb3JNb3ZlLmZpcmUoKTtjb25zdCBhPXRoaXMuX2RpcnR5Um93VHJhY2tlci5lbmQrKHRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnliYXNlLXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnlkaXNwKSxoPXRoaXMuX2RpcnR5Um93VHJhY2tlci5zdGFydCsodGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWJhc2UtdGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIueWRpc3ApO2g8dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzJiZ0aGlzLl9vblJlcXVlc3RSZWZyZXNoUm93cy5maXJlKE1hdGgubWluKGgsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpLE1hdGgubWluKGEsdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEpKX1wcmludChlLHQsaSl7bGV0IHMscjtjb25zdCBuPXRoaXMuX2NoYXJzZXRTZXJ2aWNlLmNoYXJzZXQsbz10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnNjcmVlblJlYWRlck1vZGUsYT10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMsaD10aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMud3JhcGFyb3VuZCxkPXRoaXMuX2NvcmVTZXJ2aWNlLm1vZGVzLmluc2VydE1vZGUsdT10aGlzLl9jdXJBdHRyRGF0YTtsZXQgZj10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSk7dGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eSh0aGlzLl9hY3RpdmVCdWZmZXIueSksdGhpcy5fYWN0aXZlQnVmZmVyLngmJmktdD4wJiYyPT09Zi5nZXRXaWR0aCh0aGlzLl9hY3RpdmVCdWZmZXIueC0xKSYmZi5zZXRDZWxsRnJvbUNvZGVwb2ludCh0aGlzLl9hY3RpdmVCdWZmZXIueC0xLDAsMSx1KTtsZXQgdj10aGlzLl9wYXJzZXIucHJlY2VkaW5nSm9pblN0YXRlO2ZvcihsZXQgZz10O2c8aTsrK2cpe2lmKHM9ZVtnXSxzPDEyNyYmbil7Y29uc3QgZT1uW1N0cmluZy5mcm9tQ2hhckNvZGUocyldO2UmJihzPWUuY2hhckNvZGVBdCgwKSl9Y29uc3QgdD10aGlzLl91bmljb2RlU2VydmljZS5jaGFyUHJvcGVydGllcyhzLHYpO3I9cC5Vbmljb2RlU2VydmljZS5leHRyYWN0V2lkdGgodCk7Y29uc3QgaT1wLlVuaWNvZGVTZXJ2aWNlLmV4dHJhY3RTaG91bGRKb2luKHQpLG09aT9wLlVuaWNvZGVTZXJ2aWNlLmV4dHJhY3RXaWR0aCh2KTowO2lmKHY9dCxvJiZ0aGlzLl9vbkExMXlDaGFyLmZpcmUoKDAsYy5zdHJpbmdGcm9tQ29kZVBvaW50KShzKSksdGhpcy5fZ2V0Q3VycmVudExpbmtJZCgpJiZ0aGlzLl9vc2NMaW5rU2VydmljZS5hZGRMaW5lVG9MaW5rKHRoaXMuX2dldEN1cnJlbnRMaW5rSWQoKSx0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrdGhpcy5fYWN0aXZlQnVmZmVyLnkpLHRoaXMuX2FjdGl2ZUJ1ZmZlci54K3ItbT5hKWlmKGgpe2NvbnN0IGU9ZjtsZXQgdD10aGlzLl9hY3RpdmVCdWZmZXIueC1tO2Zvcih0aGlzLl9hY3RpdmVCdWZmZXIueD1tLHRoaXMuX2FjdGl2ZUJ1ZmZlci55KyssdGhpcy5fYWN0aXZlQnVmZmVyLnk9PT10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKzE/KHRoaXMuX2FjdGl2ZUJ1ZmZlci55LS0sdGhpcy5fYnVmZmVyU2VydmljZS5zY3JvbGwodGhpcy5fZXJhc2VBdHRyRGF0YSgpLCEwKSk6KHRoaXMuX2FjdGl2ZUJ1ZmZlci55Pj10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MmJih0aGlzLl9hY3RpdmVCdWZmZXIueT10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMSksdGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrdGhpcy5fYWN0aXZlQnVmZmVyLnkpLmlzV3JhcHBlZD0hMCksZj10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSksbT4wJiZmIGluc3RhbmNlb2YgbC5CdWZmZXJMaW5lJiZmLmNvcHlDZWxsc0Zyb20oZSx0LDAsbSwhMSk7dDxhOyllLnNldENlbGxGcm9tQ29kZXBvaW50KHQrKywwLDEsdSl9ZWxzZSBpZih0aGlzLl9hY3RpdmVCdWZmZXIueD1hLTEsMj09PXIpY29udGludWU7aWYoaSYmdGhpcy5fYWN0aXZlQnVmZmVyLngpe2NvbnN0IGU9Zi5nZXRXaWR0aCh0aGlzLl9hY3RpdmVCdWZmZXIueC0xKT8xOjI7Zi5hZGRDb2RlcG9pbnRUb0NlbGwodGhpcy5fYWN0aXZlQnVmZmVyLngtZSxzLHIpO2ZvcihsZXQgZT1yLW07LS1lPj0wOylmLnNldENlbGxGcm9tQ29kZXBvaW50KHRoaXMuX2FjdGl2ZUJ1ZmZlci54KyssMCwwLHUpfWVsc2UgaWYoZCYmKGYuaW5zZXJ0Q2VsbHModGhpcy5fYWN0aXZlQnVmZmVyLngsci1tLHRoaXMuX2FjdGl2ZUJ1ZmZlci5nZXROdWxsQ2VsbCh1KSksMj09PWYuZ2V0V2lkdGgoYS0xKSYmZi5zZXRDZWxsRnJvbUNvZGVwb2ludChhLTEsXy5OVUxMX0NFTExfQ09ERSxfLk5VTExfQ0VMTF9XSURUSCx1KSksZi5zZXRDZWxsRnJvbUNvZGVwb2ludCh0aGlzLl9hY3RpdmVCdWZmZXIueCsrLHMscix1KSxyPjApZm9yKDstLXI7KWYuc2V0Q2VsbEZyb21Db2RlcG9pbnQodGhpcy5fYWN0aXZlQnVmZmVyLngrKywwLDAsdSl9dGhpcy5fcGFyc2VyLnByZWNlZGluZ0pvaW5TdGF0ZT12LHRoaXMuX2FjdGl2ZUJ1ZmZlci54PGEmJmktdD4wJiYwPT09Zi5nZXRXaWR0aCh0aGlzLl9hY3RpdmVCdWZmZXIueCkmJiFmLmhhc0NvbnRlbnQodGhpcy5fYWN0aXZlQnVmZmVyLngpJiZmLnNldENlbGxGcm9tQ29kZXBvaW50KHRoaXMuX2FjdGl2ZUJ1ZmZlci54LDAsMSx1KSx0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci55KX1yZWdpc3RlckNzaUhhbmRsZXIoZSx0KXtyZXR1cm5cInRcIiE9PWUuZmluYWx8fGUucHJlZml4fHxlLmludGVybWVkaWF0ZXM/dGhpcy5fcGFyc2VyLnJlZ2lzdGVyQ3NpSGFuZGxlcihlLHQpOnRoaXMuX3BhcnNlci5yZWdpc3RlckNzaUhhbmRsZXIoZSwoZT0+IXcoZS5wYXJhbXNbMF0sdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy53aW5kb3dPcHRpb25zKXx8dChlKSkpfXJlZ2lzdGVyRGNzSGFuZGxlcihlLHQpe3JldHVybiB0aGlzLl9wYXJzZXIucmVnaXN0ZXJEY3NIYW5kbGVyKGUsbmV3IG0uRGNzSGFuZGxlcih0KSl9cmVnaXN0ZXJFc2NIYW5kbGVyKGUsdCl7cmV0dXJuIHRoaXMuX3BhcnNlci5yZWdpc3RlckVzY0hhbmRsZXIoZSx0KX1yZWdpc3Rlck9zY0hhbmRsZXIoZSx0KXtyZXR1cm4gdGhpcy5fcGFyc2VyLnJlZ2lzdGVyT3NjSGFuZGxlcihlLG5ldyBnLk9zY0hhbmRsZXIodCkpfWJlbGwoKXtyZXR1cm4gdGhpcy5fb25SZXF1ZXN0QmVsbC5maXJlKCksITB9bGluZUZlZWQoKXtyZXR1cm4gdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eSh0aGlzLl9hY3RpdmVCdWZmZXIueSksdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5jb252ZXJ0RW9sJiYodGhpcy5fYWN0aXZlQnVmZmVyLng9MCksdGhpcy5fYWN0aXZlQnVmZmVyLnkrKyx0aGlzLl9hY3RpdmVCdWZmZXIueT09PXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b20rMT8odGhpcy5fYWN0aXZlQnVmZmVyLnktLSx0aGlzLl9idWZmZXJTZXJ2aWNlLnNjcm9sbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpKTp0aGlzLl9hY3RpdmVCdWZmZXIueT49dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzP3RoaXMuX2FjdGl2ZUJ1ZmZlci55PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xOnRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5nZXQodGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci55KS5pc1dyYXBwZWQ9ITEsdGhpcy5fYWN0aXZlQnVmZmVyLng+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyYmdGhpcy5fYWN0aXZlQnVmZmVyLngtLSx0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci55KSx0aGlzLl9vbkxpbmVGZWVkLmZpcmUoKSwhMH1jYXJyaWFnZVJldHVybigpe3JldHVybiB0aGlzLl9hY3RpdmVCdWZmZXIueD0wLCEwfWJhY2tzcGFjZSgpe2lmKCF0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMucmV2ZXJzZVdyYXBhcm91bmQpcmV0dXJuIHRoaXMuX3Jlc3RyaWN0Q3Vyc29yKCksdGhpcy5fYWN0aXZlQnVmZmVyLng+MCYmdGhpcy5fYWN0aXZlQnVmZmVyLngtLSwhMDtpZih0aGlzLl9yZXN0cmljdEN1cnNvcih0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpLHRoaXMuX2FjdGl2ZUJ1ZmZlci54PjApdGhpcy5fYWN0aXZlQnVmZmVyLngtLTtlbHNlIGlmKDA9PT10aGlzLl9hY3RpdmVCdWZmZXIueCYmdGhpcy5fYWN0aXZlQnVmZmVyLnk+dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcCYmdGhpcy5fYWN0aXZlQnVmZmVyLnk8PXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b20mJnRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5nZXQodGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci55KT8uaXNXcmFwcGVkKXt0aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSkuaXNXcmFwcGVkPSExLHRoaXMuX2FjdGl2ZUJ1ZmZlci55LS0sdGhpcy5fYWN0aXZlQnVmZmVyLng9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLTE7Y29uc3QgZT10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSk7ZS5oYXNXaWR0aCh0aGlzLl9hY3RpdmVCdWZmZXIueCkmJiFlLmhhc0NvbnRlbnQodGhpcy5fYWN0aXZlQnVmZmVyLngpJiZ0aGlzLl9hY3RpdmVCdWZmZXIueC0tfXJldHVybiB0aGlzLl9yZXN0cmljdEN1cnNvcigpLCEwfXRhYigpe2lmKHRoaXMuX2FjdGl2ZUJ1ZmZlci54Pj10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpcmV0dXJuITA7Y29uc3QgZT10aGlzLl9hY3RpdmVCdWZmZXIueDtyZXR1cm4gdGhpcy5fYWN0aXZlQnVmZmVyLng9dGhpcy5fYWN0aXZlQnVmZmVyLm5leHRTdG9wKCksdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5zY3JlZW5SZWFkZXJNb2RlJiZ0aGlzLl9vbkExMXlUYWIuZmlyZSh0aGlzLl9hY3RpdmVCdWZmZXIueC1lKSwhMH1zaGlmdE91dCgpe3JldHVybiB0aGlzLl9jaGFyc2V0U2VydmljZS5zZXRnTGV2ZWwoMSksITB9c2hpZnRJbigpe3JldHVybiB0aGlzLl9jaGFyc2V0U2VydmljZS5zZXRnTGV2ZWwoMCksITB9X3Jlc3RyaWN0Q3Vyc29yKGU9dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLTEpe3RoaXMuX2FjdGl2ZUJ1ZmZlci54PU1hdGgubWluKGUsTWF0aC5tYXgoMCx0aGlzLl9hY3RpdmVCdWZmZXIueCkpLHRoaXMuX2FjdGl2ZUJ1ZmZlci55PXRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW4/TWF0aC5taW4odGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbSxNYXRoLm1heCh0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wLHRoaXMuX2FjdGl2ZUJ1ZmZlci55KSk6TWF0aC5taW4odGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEsTWF0aC5tYXgoMCx0aGlzLl9hY3RpdmVCdWZmZXIueSkpLHRoaXMuX2RpcnR5Um93VHJhY2tlci5tYXJrRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnkpfV9zZXRDdXJzb3IoZSx0KXt0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci55KSx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMub3JpZ2luPyh0aGlzLl9hY3RpdmVCdWZmZXIueD1lLHRoaXMuX2FjdGl2ZUJ1ZmZlci55PXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3ArdCk6KHRoaXMuX2FjdGl2ZUJ1ZmZlci54PWUsdGhpcy5fYWN0aXZlQnVmZmVyLnk9dCksdGhpcy5fcmVzdHJpY3RDdXJzb3IoKSx0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci55KX1fbW92ZUN1cnNvcihlLHQpe3RoaXMuX3Jlc3RyaWN0Q3Vyc29yKCksdGhpcy5fc2V0Q3Vyc29yKHRoaXMuX2FjdGl2ZUJ1ZmZlci54K2UsdGhpcy5fYWN0aXZlQnVmZmVyLnkrdCl9Y3Vyc29yVXAoZSl7Y29uc3QgdD10aGlzLl9hY3RpdmVCdWZmZXIueS10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wO3JldHVybiB0Pj0wP3RoaXMuX21vdmVDdXJzb3IoMCwtTWF0aC5taW4odCxlLnBhcmFtc1swXXx8MSkpOnRoaXMuX21vdmVDdXJzb3IoMCwtKGUucGFyYW1zWzBdfHwxKSksITB9Y3Vyc29yRG93bihlKXtjb25zdCB0PXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b20tdGhpcy5fYWN0aXZlQnVmZmVyLnk7cmV0dXJuIHQ+PTA/dGhpcy5fbW92ZUN1cnNvcigwLE1hdGgubWluKHQsZS5wYXJhbXNbMF18fDEpKTp0aGlzLl9tb3ZlQ3Vyc29yKDAsZS5wYXJhbXNbMF18fDEpLCEwfWN1cnNvckZvcndhcmQoZSl7cmV0dXJuIHRoaXMuX21vdmVDdXJzb3IoZS5wYXJhbXNbMF18fDEsMCksITB9Y3Vyc29yQmFja3dhcmQoZSl7cmV0dXJuIHRoaXMuX21vdmVDdXJzb3IoLShlLnBhcmFtc1swXXx8MSksMCksITB9Y3Vyc29yTmV4dExpbmUoZSl7cmV0dXJuIHRoaXMuY3Vyc29yRG93bihlKSx0aGlzLl9hY3RpdmVCdWZmZXIueD0wLCEwfWN1cnNvclByZWNlZGluZ0xpbmUoZSl7cmV0dXJuIHRoaXMuY3Vyc29yVXAoZSksdGhpcy5fYWN0aXZlQnVmZmVyLng9MCwhMH1jdXJzb3JDaGFyQWJzb2x1dGUoZSl7cmV0dXJuIHRoaXMuX3NldEN1cnNvcigoZS5wYXJhbXNbMF18fDEpLTEsdGhpcy5fYWN0aXZlQnVmZmVyLnkpLCEwfWN1cnNvclBvc2l0aW9uKGUpe3JldHVybiB0aGlzLl9zZXRDdXJzb3IoZS5sZW5ndGg+PTI/KGUucGFyYW1zWzFdfHwxKS0xOjAsKGUucGFyYW1zWzBdfHwxKS0xKSwhMH1jaGFyUG9zQWJzb2x1dGUoZSl7cmV0dXJuIHRoaXMuX3NldEN1cnNvcigoZS5wYXJhbXNbMF18fDEpLTEsdGhpcy5fYWN0aXZlQnVmZmVyLnkpLCEwfWhQb3NpdGlvblJlbGF0aXZlKGUpe3JldHVybiB0aGlzLl9tb3ZlQ3Vyc29yKGUucGFyYW1zWzBdfHwxLDApLCEwfWxpbmVQb3NBYnNvbHV0ZShlKXtyZXR1cm4gdGhpcy5fc2V0Q3Vyc29yKHRoaXMuX2FjdGl2ZUJ1ZmZlci54LChlLnBhcmFtc1swXXx8MSktMSksITB9dlBvc2l0aW9uUmVsYXRpdmUoZSl7cmV0dXJuIHRoaXMuX21vdmVDdXJzb3IoMCxlLnBhcmFtc1swXXx8MSksITB9aFZQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5jdXJzb3JQb3NpdGlvbihlKSwhMH10YWJDbGVhcihlKXtjb25zdCB0PWUucGFyYW1zWzBdO3JldHVybiAwPT09dD9kZWxldGUgdGhpcy5fYWN0aXZlQnVmZmVyLnRhYnNbdGhpcy5fYWN0aXZlQnVmZmVyLnhdOjM9PT10JiYodGhpcy5fYWN0aXZlQnVmZmVyLnRhYnM9e30pLCEwfWN1cnNvckZvcndhcmRUYWIoZSl7aWYodGhpcy5fYWN0aXZlQnVmZmVyLng+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scylyZXR1cm4hMDtsZXQgdD1lLnBhcmFtc1swXXx8MTtmb3IoO3QtLTspdGhpcy5fYWN0aXZlQnVmZmVyLng9dGhpcy5fYWN0aXZlQnVmZmVyLm5leHRTdG9wKCk7cmV0dXJuITB9Y3Vyc29yQmFja3dhcmRUYWIoZSl7aWYodGhpcy5fYWN0aXZlQnVmZmVyLng+PXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scylyZXR1cm4hMDtsZXQgdD1lLnBhcmFtc1swXXx8MTtmb3IoO3QtLTspdGhpcy5fYWN0aXZlQnVmZmVyLng9dGhpcy5fYWN0aXZlQnVmZmVyLnByZXZTdG9wKCk7cmV0dXJuITB9c2VsZWN0UHJvdGVjdGVkKGUpe2NvbnN0IHQ9ZS5wYXJhbXNbMF07cmV0dXJuIDE9PT10JiYodGhpcy5fY3VyQXR0ckRhdGEuYmd8PTUzNjg3MDkxMiksMiE9PXQmJjAhPT10fHwodGhpcy5fY3VyQXR0ckRhdGEuYmcmPS01MzY4NzA5MTMpLCEwfV9lcmFzZUluQnVmZmVyTGluZShlLHQsaSxzPSExLHI9ITEpe2NvbnN0IG49dGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrZSk7bi5yZXBsYWNlQ2VsbHModCxpLHRoaXMuX2FjdGl2ZUJ1ZmZlci5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpLHIpLHMmJihuLmlzV3JhcHBlZD0hMSl9X3Jlc2V0QnVmZmVyTGluZShlLHQ9ITEpe2NvbnN0IGk9dGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrZSk7aSYmKGkuZmlsbCh0aGlzLl9hY3RpdmVCdWZmZXIuZ2V0TnVsbENlbGwodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSx0KSx0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5jbGVhck1hcmtlcnModGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK2UpLGkuaXNXcmFwcGVkPSExKX1lcmFzZUluRGlzcGxheShlLHQ9ITEpe2xldCBpO3N3aXRjaCh0aGlzLl9yZXN0cmljdEN1cnNvcih0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpLGUucGFyYW1zWzBdKXtjYXNlIDA6Zm9yKGk9dGhpcy5fYWN0aXZlQnVmZmVyLnksdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eShpKSx0aGlzLl9lcmFzZUluQnVmZmVyTGluZShpKyssdGhpcy5fYWN0aXZlQnVmZmVyLngsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLDA9PT10aGlzLl9hY3RpdmVCdWZmZXIueCx0KTtpPHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cztpKyspdGhpcy5fcmVzZXRCdWZmZXJMaW5lKGksdCk7dGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eShpKTticmVhaztjYXNlIDE6Zm9yKGk9dGhpcy5fYWN0aXZlQnVmZmVyLnksdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eShpKSx0aGlzLl9lcmFzZUluQnVmZmVyTGluZShpLDAsdGhpcy5fYWN0aXZlQnVmZmVyLngrMSwhMCx0KSx0aGlzLl9hY3RpdmVCdWZmZXIueCsxPj10aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMmJih0aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KGkrMSkuaXNXcmFwcGVkPSExKTtpLS07KXRoaXMuX3Jlc2V0QnVmZmVyTGluZShpLHQpO3RoaXMuX2RpcnR5Um93VHJhY2tlci5tYXJrRGlydHkoMCk7YnJlYWs7Y2FzZSAyOmZvcihpPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyx0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KGktMSk7aS0tOyl0aGlzLl9yZXNldEJ1ZmZlckxpbmUoaSx0KTt0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KDApO2JyZWFrO2Nhc2UgMzpjb25zdCBlPXRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5sZW5ndGgtdGhpcy5fYnVmZmVyU2VydmljZS5yb3dzO2U+MCYmKHRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy50cmltU3RhcnQoZSksdGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlPU1hdGgubWF4KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZS1lLDApLHRoaXMuX2FjdGl2ZUJ1ZmZlci55ZGlzcD1NYXRoLm1heCh0aGlzLl9hY3RpdmVCdWZmZXIueWRpc3AtZSwwKSx0aGlzLl9vblNjcm9sbC5maXJlKDApKX1yZXR1cm4hMH1lcmFzZUluTGluZShlLHQ9ITEpe3N3aXRjaCh0aGlzLl9yZXN0cmljdEN1cnNvcih0aGlzLl9idWZmZXJTZXJ2aWNlLmNvbHMpLGUucGFyYW1zWzBdKXtjYXNlIDA6dGhpcy5fZXJhc2VJbkJ1ZmZlckxpbmUodGhpcy5fYWN0aXZlQnVmZmVyLnksdGhpcy5fYWN0aXZlQnVmZmVyLngsdGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLDA9PT10aGlzLl9hY3RpdmVCdWZmZXIueCx0KTticmVhaztjYXNlIDE6dGhpcy5fZXJhc2VJbkJ1ZmZlckxpbmUodGhpcy5fYWN0aXZlQnVmZmVyLnksMCx0aGlzLl9hY3RpdmVCdWZmZXIueCsxLCExLHQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9lcmFzZUluQnVmZmVyTGluZSh0aGlzLl9hY3RpdmVCdWZmZXIueSwwLHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scywhMCx0KX1yZXR1cm4gdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eSh0aGlzLl9hY3RpdmVCdWZmZXIueSksITB9aW5zZXJ0TGluZXMoZSl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKTtsZXQgdD1lLnBhcmFtc1swXXx8MTtpZih0aGlzLl9hY3RpdmVCdWZmZXIueT50aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tfHx0aGlzLl9hY3RpdmVCdWZmZXIueTx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wKXJldHVybiEwO2NvbnN0IGk9dGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci55LHM9dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEtdGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbSxyPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xK3RoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZS1zKzE7Zm9yKDt0LS07KXRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5zcGxpY2Uoci0xLDEpLHRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5zcGxpY2UoaSwwLHRoaXMuX2FjdGl2ZUJ1ZmZlci5nZXRCbGFua0xpbmUodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSk7cmV0dXJuIHRoaXMuX2RpcnR5Um93VHJhY2tlci5tYXJrUmFuZ2VEaXJ0eSh0aGlzLl9hY3RpdmVCdWZmZXIueSx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKSx0aGlzLl9hY3RpdmVCdWZmZXIueD0wLCEwfWRlbGV0ZUxpbmVzKGUpe3RoaXMuX3Jlc3RyaWN0Q3Vyc29yKCk7bGV0IHQ9ZS5wYXJhbXNbMF18fDE7aWYodGhpcy5fYWN0aXZlQnVmZmVyLnk+dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbXx8dGhpcy5fYWN0aXZlQnVmZmVyLnk8dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcClyZXR1cm4hMDtjb25zdCBpPXRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueTtsZXQgcztmb3Iocz10aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMS10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tLHM9dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTErdGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlLXM7dC0tOyl0aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuc3BsaWNlKGksMSksdGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLnNwbGljZShzLDAsdGhpcy5fYWN0aXZlQnVmZmVyLmdldEJsYW5rTGluZSh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpKTtyZXR1cm4gdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtSYW5nZURpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci55LHRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b20pLHRoaXMuX2FjdGl2ZUJ1ZmZlci54PTAsITB9aW5zZXJ0Q2hhcnMoZSl7dGhpcy5fcmVzdHJpY3RDdXJzb3IoKTtjb25zdCB0PXRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5nZXQodGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci55KTtyZXR1cm4gdCYmKHQuaW5zZXJ0Q2VsbHModGhpcy5fYWN0aXZlQnVmZmVyLngsZS5wYXJhbXNbMF18fDEsdGhpcy5fYWN0aXZlQnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLHRoaXMuX2RpcnR5Um93VHJhY2tlci5tYXJrRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnkpKSwhMH1kZWxldGVDaGFycyhlKXt0aGlzLl9yZXN0cmljdEN1cnNvcigpO2NvbnN0IHQ9dGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrdGhpcy5fYWN0aXZlQnVmZmVyLnkpO3JldHVybiB0JiYodC5kZWxldGVDZWxscyh0aGlzLl9hY3RpdmVCdWZmZXIueCxlLnBhcmFtc1swXXx8MSx0aGlzLl9hY3RpdmVCdWZmZXIuZ2V0TnVsbENlbGwodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSksdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtEaXJ0eSh0aGlzLl9hY3RpdmVCdWZmZXIueSkpLCEwfXNjcm9sbFVwKGUpe2xldCB0PWUucGFyYW1zWzBdfHwxO2Zvcig7dC0tOyl0aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuc3BsaWNlKHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wLDEpLHRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5zcGxpY2UodGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b20sMCx0aGlzLl9hY3RpdmVCdWZmZXIuZ2V0QmxhbmtMaW5lKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpO3JldHVybiB0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya1JhbmdlRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcCx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKSwhMH1zY3JvbGxEb3duKGUpe2xldCB0PWUucGFyYW1zWzBdfHwxO2Zvcig7dC0tOyl0aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuc3BsaWNlKHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tLDEpLHRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5zcGxpY2UodGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3AsMCx0aGlzLl9hY3RpdmVCdWZmZXIuZ2V0QmxhbmtMaW5lKGwuREVGQVVMVF9BVFRSX0RBVEEpKTtyZXR1cm4gdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtSYW5nZURpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3AsdGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbSksITB9c2Nyb2xsTGVmdChlKXtpZih0aGlzLl9hY3RpdmVCdWZmZXIueT50aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tfHx0aGlzLl9hY3RpdmVCdWZmZXIueTx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wKXJldHVybiEwO2NvbnN0IHQ9ZS5wYXJhbXNbMF18fDE7Zm9yKGxldCBlPXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3A7ZTw9dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbTsrK2Upe2NvbnN0IGk9dGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrZSk7aS5kZWxldGVDZWxscygwLHQsdGhpcy5fYWN0aXZlQnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLGkuaXNXcmFwcGVkPSExfXJldHVybiB0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya1JhbmdlRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcCx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKSwhMH1zY3JvbGxSaWdodChlKXtpZih0aGlzLl9hY3RpdmVCdWZmZXIueT50aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tfHx0aGlzLl9hY3RpdmVCdWZmZXIueTx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wKXJldHVybiEwO2NvbnN0IHQ9ZS5wYXJhbXNbMF18fDE7Zm9yKGxldCBlPXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3A7ZTw9dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbTsrK2Upe2NvbnN0IGk9dGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrZSk7aS5pbnNlcnRDZWxscygwLHQsdGhpcy5fYWN0aXZlQnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLGkuaXNXcmFwcGVkPSExfXJldHVybiB0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya1JhbmdlRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcCx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKSwhMH1pbnNlcnRDb2x1bW5zKGUpe2lmKHRoaXMuX2FjdGl2ZUJ1ZmZlci55PnRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b218fHRoaXMuX2FjdGl2ZUJ1ZmZlci55PHRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3ApcmV0dXJuITA7Y29uc3QgdD1lLnBhcmFtc1swXXx8MTtmb3IobGV0IGU9dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcDtlPD10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tOysrZSl7Y29uc3QgaT10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZStlKTtpLmluc2VydENlbGxzKHRoaXMuX2FjdGl2ZUJ1ZmZlci54LHQsdGhpcy5fYWN0aXZlQnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLGkuaXNXcmFwcGVkPSExfXJldHVybiB0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya1JhbmdlRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcCx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKSwhMH1kZWxldGVDb2x1bW5zKGUpe2lmKHRoaXMuX2FjdGl2ZUJ1ZmZlci55PnRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b218fHRoaXMuX2FjdGl2ZUJ1ZmZlci55PHRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3ApcmV0dXJuITA7Y29uc3QgdD1lLnBhcmFtc1swXXx8MTtmb3IobGV0IGU9dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcDtlPD10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tOysrZSl7Y29uc3QgaT10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZStlKTtpLmRlbGV0ZUNlbGxzKHRoaXMuX2FjdGl2ZUJ1ZmZlci54LHQsdGhpcy5fYWN0aXZlQnVmZmVyLmdldE51bGxDZWxsKHRoaXMuX2VyYXNlQXR0ckRhdGEoKSkpLGkuaXNXcmFwcGVkPSExfXJldHVybiB0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya1JhbmdlRGlydHkodGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcCx0aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKSwhMH1lcmFzZUNoYXJzKGUpe3RoaXMuX3Jlc3RyaWN0Q3Vyc29yKCk7Y29uc3QgdD10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSk7cmV0dXJuIHQmJih0LnJlcGxhY2VDZWxscyh0aGlzLl9hY3RpdmVCdWZmZXIueCx0aGlzLl9hY3RpdmVCdWZmZXIueCsoZS5wYXJhbXNbMF18fDEpLHRoaXMuX2FjdGl2ZUJ1ZmZlci5nZXROdWxsQ2VsbCh0aGlzLl9lcmFzZUF0dHJEYXRhKCkpKSx0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0RpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci55KSksITB9cmVwZWF0UHJlY2VkaW5nQ2hhcmFjdGVyKGUpe2NvbnN0IHQ9dGhpcy5fcGFyc2VyLnByZWNlZGluZ0pvaW5TdGF0ZTtpZighdClyZXR1cm4hMDtjb25zdCBpPWUucGFyYW1zWzBdfHwxLHM9cC5Vbmljb2RlU2VydmljZS5leHRyYWN0V2lkdGgodCkscj10aGlzLl9hY3RpdmVCdWZmZXIueC1zLG49dGhpcy5fYWN0aXZlQnVmZmVyLmxpbmVzLmdldCh0aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UrdGhpcy5fYWN0aXZlQnVmZmVyLnkpLmdldFN0cmluZyhyKSxvPW5ldyBVaW50MzJBcnJheShuLmxlbmd0aCppKTtsZXQgYT0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7KXtjb25zdCB0PW4uY29kZVBvaW50QXQoZSl8fDA7b1thKytdPXQsZSs9dD42NTUzNT8yOjF9bGV0IGg9YTtmb3IobGV0IGU9MTtlPGk7KytlKW8uY29weVdpdGhpbihoLDAsYSksaCs9YTtyZXR1cm4gdGhpcy5wcmludChvLDAsaCksITB9c2VuZERldmljZUF0dHJpYnV0ZXNQcmltYXJ5KGUpe3JldHVybiBlLnBhcmFtc1swXT4wfHwodGhpcy5faXMoXCJ4dGVybVwiKXx8dGhpcy5faXMoXCJyeHZ0LXVuaWNvZGVcIil8fHRoaXMuX2lzKFwic2NyZWVuXCIpP3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQobi5DMC5FU0MrXCJbPzE7MmNcIik6dGhpcy5faXMoXCJsaW51eFwiKSYmdGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChuLkMwLkVTQytcIls/NmNcIikpLCEwfXNlbmREZXZpY2VBdHRyaWJ1dGVzU2Vjb25kYXJ5KGUpe3JldHVybiBlLnBhcmFtc1swXT4wfHwodGhpcy5faXMoXCJ4dGVybVwiKT90aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KG4uQzAuRVNDK1wiWz4wOzI3NjswY1wiKTp0aGlzLl9pcyhcInJ4dnQtdW5pY29kZVwiKT90aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KG4uQzAuRVNDK1wiWz44NTs5NTswY1wiKTp0aGlzLl9pcyhcImxpbnV4XCIpP3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoZS5wYXJhbXNbMF0rXCJjXCIpOnRoaXMuX2lzKFwic2NyZWVuXCIpJiZ0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KG4uQzAuRVNDK1wiWz44Mzs0MDAwMzswY1wiKSksITB9X2lzKGUpe3JldHVybiAwPT09KHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMudGVybU5hbWUrXCJcIikuaW5kZXhPZihlKX1zZXRNb2RlKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXN3aXRjaChlLnBhcmFtc1t0XSl7Y2FzZSA0OnRoaXMuX2NvcmVTZXJ2aWNlLm1vZGVzLmluc2VydE1vZGU9ITA7YnJlYWs7Y2FzZSAyMDp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmNvbnZlcnRFb2w9ITB9cmV0dXJuITB9c2V0TW9kZVByaXZhdGUoZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspc3dpdGNoKGUucGFyYW1zW3RdKXtjYXNlIDE6dGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLmFwcGxpY2F0aW9uQ3Vyc29yS2V5cz0hMDticmVhaztjYXNlIDI6dGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMCxvLkRFRkFVTFRfQ0hBUlNFVCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMSxvLkRFRkFVTFRfQ0hBUlNFVCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMixvLkRFRkFVTFRfQ0hBUlNFVCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMyxvLkRFRkFVTFRfQ0hBUlNFVCk7YnJlYWs7Y2FzZSAzOnRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMud2luZG93T3B0aW9ucy5zZXRXaW5MaW5lcyYmKHRoaXMuX2J1ZmZlclNlcnZpY2UucmVzaXplKDEzMix0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHRoaXMuX29uUmVxdWVzdFJlc2V0LmZpcmUoKSk7YnJlYWs7Y2FzZSA2OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW49ITAsdGhpcy5fc2V0Q3Vyc29yKDAsMCk7YnJlYWs7Y2FzZSA3OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy53cmFwYXJvdW5kPSEwO2JyZWFrO2Nhc2UgMTI6dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JCbGluaz0hMDticmVhaztjYXNlIDQ1OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5yZXZlcnNlV3JhcGFyb3VuZD0hMDticmVhaztjYXNlIDY2OnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJTZXJpYWwgcG9ydCByZXF1ZXN0ZWQgYXBwbGljYXRpb24ga2V5cGFkLlwiKSx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25LZXlwYWQ9ITAsdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCk7YnJlYWs7Y2FzZSA5OnRoaXMuX2NvcmVNb3VzZVNlcnZpY2UuYWN0aXZlUHJvdG9jb2w9XCJYMTBcIjticmVhaztjYXNlIDFlMzp0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZVByb3RvY29sPVwiVlQyMDBcIjticmVhaztjYXNlIDEwMDI6dGhpcy5fY29yZU1vdXNlU2VydmljZS5hY3RpdmVQcm90b2NvbD1cIkRSQUdcIjticmVhaztjYXNlIDEwMDM6dGhpcy5fY29yZU1vdXNlU2VydmljZS5hY3RpdmVQcm90b2NvbD1cIkFOWVwiO2JyZWFrO2Nhc2UgMTAwNDp0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuc2VuZEZvY3VzPSEwLHRoaXMuX29uUmVxdWVzdFNlbmRGb2N1cy5maXJlKCk7YnJlYWs7Y2FzZSAxMDA1OnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJERUNTRVQgMTAwNSBub3Qgc3VwcG9ydGVkIChzZWUgIzI1MDcpXCIpO2JyZWFrO2Nhc2UgMTAwNjp0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZUVuY29kaW5nPVwiU0dSXCI7YnJlYWs7Y2FzZSAxMDE1OnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJERUNTRVQgMTAxNSBub3Qgc3VwcG9ydGVkIChzZWUgIzI1MDcpXCIpO2JyZWFrO2Nhc2UgMTAxNjp0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZUVuY29kaW5nPVwiU0dSX1BJWEVMU1wiO2JyZWFrO2Nhc2UgMjU6dGhpcy5fY29yZVNlcnZpY2UuaXNDdXJzb3JIaWRkZW49ITE7YnJlYWs7Y2FzZSAxMDQ4OnRoaXMuc2F2ZUN1cnNvcigpO2JyZWFrO2Nhc2UgMTA0OTp0aGlzLnNhdmVDdXJzb3IoKTtjYXNlIDQ3OmNhc2UgMTA0Nzp0aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcnMuYWN0aXZhdGVBbHRCdWZmZXIodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSx0aGlzLl9jb3JlU2VydmljZS5pc0N1cnNvckluaXRpYWxpemVkPSEwLHRoaXMuX29uUmVxdWVzdFJlZnJlc2hSb3dzLmZpcmUoMCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMSksdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCk7YnJlYWs7Y2FzZSAyMDA0OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5icmFja2V0ZWRQYXN0ZU1vZGU9ITB9cmV0dXJuITB9cmVzZXRNb2RlKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXN3aXRjaChlLnBhcmFtc1t0XSl7Y2FzZSA0OnRoaXMuX2NvcmVTZXJ2aWNlLm1vZGVzLmluc2VydE1vZGU9ITE7YnJlYWs7Y2FzZSAyMDp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmNvbnZlcnRFb2w9ITF9cmV0dXJuITB9cmVzZXRNb2RlUHJpdmF0ZShlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylzd2l0Y2goZS5wYXJhbXNbdF0pe2Nhc2UgMTp0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25DdXJzb3JLZXlzPSExO2JyZWFrO2Nhc2UgMzp0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLndpbmRvd09wdGlvbnMuc2V0V2luTGluZXMmJih0aGlzLl9idWZmZXJTZXJ2aWNlLnJlc2l6ZSg4MCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MpLHRoaXMuX29uUmVxdWVzdFJlc2V0LmZpcmUoKSk7YnJlYWs7Y2FzZSA2OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW49ITEsdGhpcy5fc2V0Q3Vyc29yKDAsMCk7YnJlYWs7Y2FzZSA3OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy53cmFwYXJvdW5kPSExO2JyZWFrO2Nhc2UgMTI6dGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JCbGluaz0hMTticmVhaztjYXNlIDQ1OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5yZXZlcnNlV3JhcGFyb3VuZD0hMTticmVhaztjYXNlIDY2OnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJTd2l0Y2hpbmcgYmFjayB0byBub3JtYWwga2V5cGFkLlwiKSx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25LZXlwYWQ9ITEsdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCk7YnJlYWs7Y2FzZSA5OmNhc2UgMWUzOmNhc2UgMTAwMjpjYXNlIDEwMDM6dGhpcy5fY29yZU1vdXNlU2VydmljZS5hY3RpdmVQcm90b2NvbD1cIk5PTkVcIjticmVhaztjYXNlIDEwMDQ6dGhpcy5fY29yZVNlcnZpY2UuZGVjUHJpdmF0ZU1vZGVzLnNlbmRGb2N1cz0hMTticmVhaztjYXNlIDEwMDU6dGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIkRFQ1JTVCAxMDA1IG5vdCBzdXBwb3J0ZWQgKHNlZSAjMjUwNylcIik7YnJlYWs7Y2FzZSAxMDA2OmNhc2UgMTAxNjp0aGlzLl9jb3JlTW91c2VTZXJ2aWNlLmFjdGl2ZUVuY29kaW5nPVwiREVGQVVMVFwiO2JyZWFrO2Nhc2UgMTAxNTp0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKFwiREVDUlNUIDEwMTUgbm90IHN1cHBvcnRlZCAoc2VlICMyNTA3KVwiKTticmVhaztjYXNlIDI1OnRoaXMuX2NvcmVTZXJ2aWNlLmlzQ3Vyc29ySGlkZGVuPSEwO2JyZWFrO2Nhc2UgMTA0ODp0aGlzLnJlc3RvcmVDdXJzb3IoKTticmVhaztjYXNlIDEwNDk6Y2FzZSA0NzpjYXNlIDEwNDc6dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXJzLmFjdGl2YXRlTm9ybWFsQnVmZmVyKCksMTA0OT09PWUucGFyYW1zW3RdJiZ0aGlzLnJlc3RvcmVDdXJzb3IoKSx0aGlzLl9jb3JlU2VydmljZS5pc0N1cnNvckluaXRpYWxpemVkPSEwLHRoaXMuX29uUmVxdWVzdFJlZnJlc2hSb3dzLmZpcmUoMCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMSksdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCk7YnJlYWs7Y2FzZSAyMDA0OnRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5icmFja2V0ZWRQYXN0ZU1vZGU9ITF9cmV0dXJuITB9cmVxdWVzdE1vZGUoZSx0KXtjb25zdCBpPXRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcyx7YWN0aXZlUHJvdG9jb2w6cyxhY3RpdmVFbmNvZGluZzpyfT10aGlzLl9jb3JlTW91c2VTZXJ2aWNlLG89dGhpcy5fY29yZVNlcnZpY2Use2J1ZmZlcnM6YSxjb2xzOmh9PXRoaXMuX2J1ZmZlclNlcnZpY2Use2FjdGl2ZTpjLGFsdDpsfT1hLGQ9dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucyxfPWU9PmU/MToyLHU9ZS5wYXJhbXNbMF07cmV0dXJuIGY9dSx2PXQ/Mj09PXU/NDo0PT09dT9fKG8ubW9kZXMuaW5zZXJ0TW9kZSk6MTI9PT11PzM6MjA9PT11P18oZC5jb252ZXJ0RW9sKTowOjE9PT11P18oaS5hcHBsaWNhdGlvbkN1cnNvcktleXMpOjM9PT11P2Qud2luZG93T3B0aW9ucy5zZXRXaW5MaW5lcz84MD09PWg/MjoxMzI9PT1oPzE6MDowOjY9PT11P18oaS5vcmlnaW4pOjc9PT11P18oaS53cmFwYXJvdW5kKTo4PT09dT8zOjk9PT11P18oXCJYMTBcIj09PXMpOjEyPT09dT9fKGQuY3Vyc29yQmxpbmspOjI1PT09dT9fKCFvLmlzQ3Vyc29ySGlkZGVuKTo0NT09PXU/XyhpLnJldmVyc2VXcmFwYXJvdW5kKTo2Nj09PXU/XyhpLmFwcGxpY2F0aW9uS2V5cGFkKTo2Nz09PXU/NDoxZTM9PT11P18oXCJWVDIwMFwiPT09cyk6MTAwMj09PXU/XyhcIkRSQUdcIj09PXMpOjEwMDM9PT11P18oXCJBTllcIj09PXMpOjEwMDQ9PT11P18oaS5zZW5kRm9jdXMpOjEwMDU9PT11PzQ6MTAwNj09PXU/XyhcIlNHUlwiPT09cik6MTAxNT09PXU/NDoxMDE2PT09dT9fKFwiU0dSX1BJWEVMU1wiPT09cik6MTA0OD09PXU/MTo0Nz09PXV8fDEwNDc9PT11fHwxMDQ5PT09dT9fKGM9PT1sKToyMDA0PT09dT9fKGkuYnJhY2tldGVkUGFzdGVNb2RlKTowLG8udHJpZ2dlckRhdGFFdmVudChgJHtuLkMwLkVTQ31bJHt0P1wiXCI6XCI/XCJ9JHtmfTske3Z9JHlgKSwhMDt2YXIgZix2fV91cGRhdGVBdHRyQ29sb3IoZSx0LGkscyxyKXtyZXR1cm4gMj09PXQ/KGV8PTUwMzMxNjQ4LGUmPS0xNjc3NzIxNixlfD1mLkF0dHJpYnV0ZURhdGEuZnJvbUNvbG9yUkdCKFtpLHMscl0pKTo1PT09dCYmKGUmPS01MDMzMTkwNCxlfD0zMzU1NDQzMnwyNTUmaSksZX1fZXh0cmFjdENvbG9yKGUsdCxpKXtjb25zdCBzPVswLDAsLTEsMCwwLDBdO2xldCByPTAsbj0wO2Rve2lmKHNbbityXT1lLnBhcmFtc1t0K25dLGUuaGFzU3ViUGFyYW1zKHQrbikpe2NvbnN0IGk9ZS5nZXRTdWJQYXJhbXModCtuKTtsZXQgbz0wO2RvezU9PT1zWzFdJiYocj0xKSxzW24rbysxK3JdPWlbb119d2hpbGUoKytvPGkubGVuZ3RoJiZvK24rMStyPHMubGVuZ3RoKTticmVha31pZig1PT09c1sxXSYmbityPj0yfHwyPT09c1sxXSYmbityPj01KWJyZWFrO3NbMV0mJihyPTEpfXdoaWxlKCsrbit0PGUubGVuZ3RoJiZuK3I8cy5sZW5ndGgpO2ZvcihsZXQgZT0yO2U8cy5sZW5ndGg7KytlKS0xPT09c1tlXSYmKHNbZV09MCk7c3dpdGNoKHNbMF0pe2Nhc2UgMzg6aS5mZz10aGlzLl91cGRhdGVBdHRyQ29sb3IoaS5mZyxzWzFdLHNbM10sc1s0XSxzWzVdKTticmVhaztjYXNlIDQ4OmkuYmc9dGhpcy5fdXBkYXRlQXR0ckNvbG9yKGkuYmcsc1sxXSxzWzNdLHNbNF0sc1s1XSk7YnJlYWs7Y2FzZSA1ODppLmV4dGVuZGVkPWkuZXh0ZW5kZWQuY2xvbmUoKSxpLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yPXRoaXMuX3VwZGF0ZUF0dHJDb2xvcihpLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yLHNbMV0sc1szXSxzWzRdLHNbNV0pfXJldHVybiBufV9wcm9jZXNzVW5kZXJsaW5lKGUsdCl7dC5leHRlbmRlZD10LmV4dGVuZGVkLmNsb25lKCksKCF+ZXx8ZT41KSYmKGU9MSksdC5leHRlbmRlZC51bmRlcmxpbmVTdHlsZT1lLHQuZmd8PTI2ODQzNTQ1NiwwPT09ZSYmKHQuZmcmPS0yNjg0MzU0NTcpLHQudXBkYXRlRXh0ZW5kZWQoKX1fcHJvY2Vzc1NHUjAoZSl7ZS5mZz1sLkRFRkFVTFRfQVRUUl9EQVRBLmZnLGUuYmc9bC5ERUZBVUxUX0FUVFJfREFUQS5iZyxlLmV4dGVuZGVkPWUuZXh0ZW5kZWQuY2xvbmUoKSxlLmV4dGVuZGVkLnVuZGVybGluZVN0eWxlPTAsZS5leHRlbmRlZC51bmRlcmxpbmVDb2xvciY9LTY3MTA4ODY0LGUudXBkYXRlRXh0ZW5kZWQoKX1jaGFyQXR0cmlidXRlcyhlKXtpZigxPT09ZS5sZW5ndGgmJjA9PT1lLnBhcmFtc1swXSlyZXR1cm4gdGhpcy5fcHJvY2Vzc1NHUjAodGhpcy5fY3VyQXR0ckRhdGEpLCEwO2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGk7Y29uc3Qgcz10aGlzLl9jdXJBdHRyRGF0YTtmb3IobGV0IHI9MDtyPHQ7cisrKWk9ZS5wYXJhbXNbcl0saT49MzAmJmk8PTM3PyhzLmZnJj0tNTAzMzE5MDQscy5mZ3w9MTY3NzcyMTZ8aS0zMCk6aT49NDAmJmk8PTQ3PyhzLmJnJj0tNTAzMzE5MDQscy5iZ3w9MTY3NzcyMTZ8aS00MCk6aT49OTAmJmk8PTk3PyhzLmZnJj0tNTAzMzE5MDQscy5mZ3w9MTY3NzcyMjR8aS05MCk6aT49MTAwJiZpPD0xMDc/KHMuYmcmPS01MDMzMTkwNCxzLmJnfD0xNjc3NzIyNHxpLTEwMCk6MD09PWk/dGhpcy5fcHJvY2Vzc1NHUjAocyk6MT09PWk/cy5mZ3w9MTM0MjE3NzI4OjM9PT1pP3MuYmd8PTY3MTA4ODY0OjQ9PT1pPyhzLmZnfD0yNjg0MzU0NTYsdGhpcy5fcHJvY2Vzc1VuZGVybGluZShlLmhhc1N1YlBhcmFtcyhyKT9lLmdldFN1YlBhcmFtcyhyKVswXToxLHMpKTo1PT09aT9zLmZnfD01MzY4NzA5MTI6Nz09PWk/cy5mZ3w9NjcxMDg4NjQ6OD09PWk/cy5mZ3w9MTA3Mzc0MTgyNDo5PT09aT9zLmZnfD0yMTQ3NDgzNjQ4OjI9PT1pP3MuYmd8PTEzNDIxNzcyODoyMT09PWk/dGhpcy5fcHJvY2Vzc1VuZGVybGluZSgyLHMpOjIyPT09aT8ocy5mZyY9LTEzNDIxNzcyOSxzLmJnJj0tMTM0MjE3NzI5KToyMz09PWk/cy5iZyY9LTY3MTA4ODY1OjI0PT09aT8ocy5mZyY9LTI2ODQzNTQ1Nyx0aGlzLl9wcm9jZXNzVW5kZXJsaW5lKDAscykpOjI1PT09aT9zLmZnJj0tNTM2ODcwOTEzOjI3PT09aT9zLmZnJj0tNjcxMDg4NjU6Mjg9PT1pP3MuZmcmPS0xMDczNzQxODI1OjI5PT09aT9zLmZnJj0yMTQ3NDgzNjQ3OjM5PT09aT8ocy5mZyY9LTY3MTA4ODY0LHMuZmd8PTE2Nzc3MjE1JmwuREVGQVVMVF9BVFRSX0RBVEEuZmcpOjQ5PT09aT8ocy5iZyY9LTY3MTA4ODY0LHMuYmd8PTE2Nzc3MjE1JmwuREVGQVVMVF9BVFRSX0RBVEEuYmcpOjM4PT09aXx8NDg9PT1pfHw1OD09PWk/cis9dGhpcy5fZXh0cmFjdENvbG9yKGUscixzKTo1Mz09PWk/cy5iZ3w9MTA3Mzc0MTgyNDo1NT09PWk/cy5iZyY9LTEwNzM3NDE4MjU6NTk9PT1pPyhzLmV4dGVuZGVkPXMuZXh0ZW5kZWQuY2xvbmUoKSxzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yPS0xLHMudXBkYXRlRXh0ZW5kZWQoKSk6MTAwPT09aT8ocy5mZyY9LTY3MTA4ODY0LHMuZmd8PTE2Nzc3MjE1JmwuREVGQVVMVF9BVFRSX0RBVEEuZmcscy5iZyY9LTY3MTA4ODY0LHMuYmd8PTE2Nzc3MjE1JmwuREVGQVVMVF9BVFRSX0RBVEEuYmcpOnRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJVbmtub3duIFNHUiBhdHRyaWJ1dGU6ICVkLlwiLGkpO3JldHVybiEwfWRldmljZVN0YXR1cyhlKXtzd2l0Y2goZS5wYXJhbXNbMF0pe2Nhc2UgNTp0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGAke24uQzAuRVNDfVswbmApO2JyZWFrO2Nhc2UgNjpjb25zdCBlPXRoaXMuX2FjdGl2ZUJ1ZmZlci55KzEsdD10aGlzLl9hY3RpdmVCdWZmZXIueCsxO3RoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQoYCR7bi5DMC5FU0N9WyR7ZX07JHt0fVJgKX1yZXR1cm4hMH1kZXZpY2VTdGF0dXNQcml2YXRlKGUpe2lmKDY9PT1lLnBhcmFtc1swXSl7Y29uc3QgZT10aGlzLl9hY3RpdmVCdWZmZXIueSsxLHQ9dGhpcy5fYWN0aXZlQnVmZmVyLngrMTt0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGAke24uQzAuRVNDfVs/JHtlfTske3R9UmApfXJldHVybiEwfXNvZnRSZXNldChlKXtyZXR1cm4gdGhpcy5fY29yZVNlcnZpY2UuaXNDdXJzb3JIaWRkZW49ITEsdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCksdGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcD0wLHRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxCb3R0b209dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzLTEsdGhpcy5fY3VyQXR0ckRhdGE9bC5ERUZBVUxUX0FUVFJfREFUQS5jbG9uZSgpLHRoaXMuX2NvcmVTZXJ2aWNlLnJlc2V0KCksdGhpcy5fY2hhcnNldFNlcnZpY2UucmVzZXQoKSx0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRYPTAsdGhpcy5fYWN0aXZlQnVmZmVyLnNhdmVkWT10aGlzLl9hY3RpdmVCdWZmZXIueWJhc2UsdGhpcy5fYWN0aXZlQnVmZmVyLnNhdmVkQ3VyQXR0ckRhdGEuZmc9dGhpcy5fY3VyQXR0ckRhdGEuZmcsdGhpcy5fYWN0aXZlQnVmZmVyLnNhdmVkQ3VyQXR0ckRhdGEuYmc9dGhpcy5fY3VyQXR0ckRhdGEuYmcsdGhpcy5fYWN0aXZlQnVmZmVyLnNhdmVkQ2hhcnNldD10aGlzLl9jaGFyc2V0U2VydmljZS5jaGFyc2V0LHRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5vcmlnaW49ITEsITB9c2V0Q3Vyc29yU3R5bGUoZSl7Y29uc3QgdD1lLnBhcmFtc1swXXx8MTtzd2l0Y2godCl7Y2FzZSAxOmNhc2UgMjp0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmN1cnNvclN0eWxlPVwiYmxvY2tcIjticmVhaztjYXNlIDM6Y2FzZSA0OnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuY3Vyc29yU3R5bGU9XCJ1bmRlcmxpbmVcIjticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMuY3Vyc29yU3R5bGU9XCJiYXJcIn1jb25zdCBpPXQlMj09MTtyZXR1cm4gdGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5jdXJzb3JCbGluaz1pLCEwfXNldFNjcm9sbFJlZ2lvbihlKXtjb25zdCB0PWUucGFyYW1zWzBdfHwxO2xldCBpO3JldHVybihlLmxlbmd0aDwyfHwoaT1lLnBhcmFtc1sxXSk+dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzfHwwPT09aSkmJihpPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyksaT50JiYodGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbFRvcD10LTEsdGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbT1pLTEsdGhpcy5fc2V0Q3Vyc29yKDAsMCkpLCEwfXdpbmRvd09wdGlvbnMoZSl7aWYoIXcoZS5wYXJhbXNbMF0sdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy53aW5kb3dPcHRpb25zKSlyZXR1cm4hMDtjb25zdCB0PWUubGVuZ3RoPjE/ZS5wYXJhbXNbMV06MDtzd2l0Y2goZS5wYXJhbXNbMF0pe2Nhc2UgMTQ6MiE9PXQmJnRoaXMuX29uUmVxdWVzdFdpbmRvd3NPcHRpb25zUmVwb3J0LmZpcmUoeS5HRVRfV0lOX1NJWkVfUElYRUxTKTticmVhaztjYXNlIDE2OnRoaXMuX29uUmVxdWVzdFdpbmRvd3NPcHRpb25zUmVwb3J0LmZpcmUoeS5HRVRfQ0VMTF9TSVpFX1BJWEVMUyk7YnJlYWs7Y2FzZSAxODp0aGlzLl9idWZmZXJTZXJ2aWNlJiZ0aGlzLl9jb3JlU2VydmljZS50cmlnZ2VyRGF0YUV2ZW50KGAke24uQzAuRVNDfVs4OyR7dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzfTske3RoaXMuX2J1ZmZlclNlcnZpY2UuY29sc310YCk7YnJlYWs7Y2FzZSAyMjowIT09dCYmMiE9PXR8fCh0aGlzLl93aW5kb3dUaXRsZVN0YWNrLnB1c2godGhpcy5fd2luZG93VGl0bGUpLHRoaXMuX3dpbmRvd1RpdGxlU3RhY2subGVuZ3RoPjEwJiZ0aGlzLl93aW5kb3dUaXRsZVN0YWNrLnNoaWZ0KCkpLDAhPT10JiYxIT09dHx8KHRoaXMuX2ljb25OYW1lU3RhY2sucHVzaCh0aGlzLl9pY29uTmFtZSksdGhpcy5faWNvbk5hbWVTdGFjay5sZW5ndGg+MTAmJnRoaXMuX2ljb25OYW1lU3RhY2suc2hpZnQoKSk7YnJlYWs7Y2FzZSAyMzowIT09dCYmMiE9PXR8fHRoaXMuX3dpbmRvd1RpdGxlU3RhY2subGVuZ3RoJiZ0aGlzLnNldFRpdGxlKHRoaXMuX3dpbmRvd1RpdGxlU3RhY2sucG9wKCkpLDAhPT10JiYxIT09dHx8dGhpcy5faWNvbk5hbWVTdGFjay5sZW5ndGgmJnRoaXMuc2V0SWNvbk5hbWUodGhpcy5faWNvbk5hbWVTdGFjay5wb3AoKSl9cmV0dXJuITB9c2F2ZUN1cnNvcihlKXtyZXR1cm4gdGhpcy5fYWN0aXZlQnVmZmVyLnNhdmVkWD10aGlzLl9hY3RpdmVCdWZmZXIueCx0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRZPXRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSx0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5mZz10aGlzLl9jdXJBdHRyRGF0YS5mZyx0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5iZz10aGlzLl9jdXJBdHRyRGF0YS5iZyx0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDaGFyc2V0PXRoaXMuX2NoYXJzZXRTZXJ2aWNlLmNoYXJzZXQsITB9cmVzdG9yZUN1cnNvcihlKXtyZXR1cm4gdGhpcy5fYWN0aXZlQnVmZmVyLng9dGhpcy5fYWN0aXZlQnVmZmVyLnNhdmVkWHx8MCx0aGlzLl9hY3RpdmVCdWZmZXIueT1NYXRoLm1heCh0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRZLXRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSwwKSx0aGlzLl9jdXJBdHRyRGF0YS5mZz10aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5mZyx0aGlzLl9jdXJBdHRyRGF0YS5iZz10aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDdXJBdHRyRGF0YS5iZyx0aGlzLl9jaGFyc2V0U2VydmljZS5jaGFyc2V0PXRoaXMuX3NhdmVkQ2hhcnNldCx0aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDaGFyc2V0JiYodGhpcy5fY2hhcnNldFNlcnZpY2UuY2hhcnNldD10aGlzLl9hY3RpdmVCdWZmZXIuc2F2ZWRDaGFyc2V0KSx0aGlzLl9yZXN0cmljdEN1cnNvcigpLCEwfXNldFRpdGxlKGUpe3JldHVybiB0aGlzLl93aW5kb3dUaXRsZT1lLHRoaXMuX29uVGl0bGVDaGFuZ2UuZmlyZShlKSwhMH1zZXRJY29uTmFtZShlKXtyZXR1cm4gdGhpcy5faWNvbk5hbWU9ZSwhMH1zZXRPclJlcG9ydEluZGV4ZWRDb2xvcihlKXtjb25zdCB0PVtdLGk9ZS5zcGxpdChcIjtcIik7Zm9yKDtpLmxlbmd0aD4xOyl7Y29uc3QgZT1pLnNoaWZ0KCkscz1pLnNoaWZ0KCk7aWYoL15cXGQrJC8uZXhlYyhlKSl7Y29uc3QgaT1wYXJzZUludChlKTtpZihEKGkpKWlmKFwiP1wiPT09cyl0LnB1c2goe3R5cGU6MCxpbmRleDppfSk7ZWxzZXtjb25zdCBlPSgwLFMucGFyc2VDb2xvcikocyk7ZSYmdC5wdXNoKHt0eXBlOjEsaW5kZXg6aSxjb2xvcjplfSl9fX1yZXR1cm4gdC5sZW5ndGgmJnRoaXMuX29uQ29sb3IuZmlyZSh0KSwhMH1zZXRIeXBlcmxpbmsoZSl7Y29uc3QgdD1lLnNwbGl0KFwiO1wiKTtyZXR1cm4hKHQubGVuZ3RoPDIpJiYodFsxXT90aGlzLl9jcmVhdGVIeXBlcmxpbmsodFswXSx0WzFdKTohdFswXSYmdGhpcy5fZmluaXNoSHlwZXJsaW5rKCkpfV9jcmVhdGVIeXBlcmxpbmsoZSx0KXt0aGlzLl9nZXRDdXJyZW50TGlua0lkKCkmJnRoaXMuX2ZpbmlzaEh5cGVybGluaygpO2NvbnN0IGk9ZS5zcGxpdChcIjpcIik7bGV0IHM7Y29uc3Qgcj1pLmZpbmRJbmRleCgoZT0+ZS5zdGFydHNXaXRoKFwiaWQ9XCIpKSk7cmV0dXJuLTEhPT1yJiYocz1pW3JdLnNsaWNlKDMpfHx2b2lkIDApLHRoaXMuX2N1ckF0dHJEYXRhLmV4dGVuZGVkPXRoaXMuX2N1ckF0dHJEYXRhLmV4dGVuZGVkLmNsb25lKCksdGhpcy5fY3VyQXR0ckRhdGEuZXh0ZW5kZWQudXJsSWQ9dGhpcy5fb3NjTGlua1NlcnZpY2UucmVnaXN0ZXJMaW5rKHtpZDpzLHVyaTp0fSksdGhpcy5fY3VyQXR0ckRhdGEudXBkYXRlRXh0ZW5kZWQoKSwhMH1fZmluaXNoSHlwZXJsaW5rKCl7cmV0dXJuIHRoaXMuX2N1ckF0dHJEYXRhLmV4dGVuZGVkPXRoaXMuX2N1ckF0dHJEYXRhLmV4dGVuZGVkLmNsb25lKCksdGhpcy5fY3VyQXR0ckRhdGEuZXh0ZW5kZWQudXJsSWQ9MCx0aGlzLl9jdXJBdHRyRGF0YS51cGRhdGVFeHRlbmRlZCgpLCEwfV9zZXRPclJlcG9ydFNwZWNpYWxDb2xvcihlLHQpe2NvbnN0IGk9ZS5zcGxpdChcIjtcIik7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aCYmISh0Pj10aGlzLl9zcGVjaWFsQ29sb3JzLmxlbmd0aCk7KytlLCsrdClpZihcIj9cIj09PWlbZV0pdGhpcy5fb25Db2xvci5maXJlKFt7dHlwZTowLGluZGV4OnRoaXMuX3NwZWNpYWxDb2xvcnNbdF19XSk7ZWxzZXtjb25zdCBzPSgwLFMucGFyc2VDb2xvcikoaVtlXSk7cyYmdGhpcy5fb25Db2xvci5maXJlKFt7dHlwZToxLGluZGV4OnRoaXMuX3NwZWNpYWxDb2xvcnNbdF0sY29sb3I6c31dKX1yZXR1cm4hMH1zZXRPclJlcG9ydEZnQ29sb3IoZSl7cmV0dXJuIHRoaXMuX3NldE9yUmVwb3J0U3BlY2lhbENvbG9yKGUsMCl9c2V0T3JSZXBvcnRCZ0NvbG9yKGUpe3JldHVybiB0aGlzLl9zZXRPclJlcG9ydFNwZWNpYWxDb2xvcihlLDEpfXNldE9yUmVwb3J0Q3Vyc29yQ29sb3IoZSl7cmV0dXJuIHRoaXMuX3NldE9yUmVwb3J0U3BlY2lhbENvbG9yKGUsMil9cmVzdG9yZUluZGV4ZWRDb2xvcihlKXtpZighZSlyZXR1cm4gdGhpcy5fb25Db2xvci5maXJlKFt7dHlwZToyfV0pLCEwO2NvbnN0IHQ9W10saT1lLnNwbGl0KFwiO1wiKTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoOysrZSlpZigvXlxcZCskLy5leGVjKGlbZV0pKXtjb25zdCBzPXBhcnNlSW50KGlbZV0pO0QocykmJnQucHVzaCh7dHlwZToyLGluZGV4OnN9KX1yZXR1cm4gdC5sZW5ndGgmJnRoaXMuX29uQ29sb3IuZmlyZSh0KSwhMH1yZXN0b3JlRmdDb2xvcihlKXtyZXR1cm4gdGhpcy5fb25Db2xvci5maXJlKFt7dHlwZToyLGluZGV4OjI1Nn1dKSwhMH1yZXN0b3JlQmdDb2xvcihlKXtyZXR1cm4gdGhpcy5fb25Db2xvci5maXJlKFt7dHlwZToyLGluZGV4OjI1N31dKSwhMH1yZXN0b3JlQ3Vyc29yQ29sb3IoZSl7cmV0dXJuIHRoaXMuX29uQ29sb3IuZmlyZShbe3R5cGU6MixpbmRleDoyNTh9XSksITB9bmV4dExpbmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlQnVmZmVyLng9MCx0aGlzLmluZGV4KCksITB9a2V5cGFkQXBwbGljYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoXCJTZXJpYWwgcG9ydCByZXF1ZXN0ZWQgYXBwbGljYXRpb24ga2V5cGFkLlwiKSx0aGlzLl9jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXMuYXBwbGljYXRpb25LZXlwYWQ9ITAsdGhpcy5fb25SZXF1ZXN0U3luY1Njcm9sbEJhci5maXJlKCksITB9a2V5cGFkTnVtZXJpY01vZGUoKXtyZXR1cm4gdGhpcy5fbG9nU2VydmljZS5kZWJ1ZyhcIlN3aXRjaGluZyBiYWNrIHRvIG5vcm1hbCBrZXlwYWQuXCIpLHRoaXMuX2NvcmVTZXJ2aWNlLmRlY1ByaXZhdGVNb2Rlcy5hcHBsaWNhdGlvbktleXBhZD0hMSx0aGlzLl9vblJlcXVlc3RTeW5jU2Nyb2xsQmFyLmZpcmUoKSwhMH1zZWxlY3REZWZhdWx0Q2hhcnNldCgpe3JldHVybiB0aGlzLl9jaGFyc2V0U2VydmljZS5zZXRnTGV2ZWwoMCksdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0NoYXJzZXQoMCxvLkRFRkFVTFRfQ0hBUlNFVCksITB9c2VsZWN0Q2hhcnNldChlKXtyZXR1cm4gMiE9PWUubGVuZ3RoPyh0aGlzLnNlbGVjdERlZmF1bHRDaGFyc2V0KCksITApOihcIi9cIj09PWVbMF18fHRoaXMuX2NoYXJzZXRTZXJ2aWNlLnNldGdDaGFyc2V0KENbZVswXV0sby5DSEFSU0VUU1tlWzFdXXx8by5ERUZBVUxUX0NIQVJTRVQpLCEwKX1pbmRleCgpe3JldHVybiB0aGlzLl9yZXN0cmljdEN1cnNvcigpLHRoaXMuX2FjdGl2ZUJ1ZmZlci55KyssdGhpcy5fYWN0aXZlQnVmZmVyLnk9PT10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsQm90dG9tKzE/KHRoaXMuX2FjdGl2ZUJ1ZmZlci55LS0sdGhpcy5fYnVmZmVyU2VydmljZS5zY3JvbGwodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSk6dGhpcy5fYWN0aXZlQnVmZmVyLnk+PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyYmKHRoaXMuX2FjdGl2ZUJ1ZmZlci55PXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cy0xKSx0aGlzLl9yZXN0cmljdEN1cnNvcigpLCEwfXRhYlNldCgpe3JldHVybiB0aGlzLl9hY3RpdmVCdWZmZXIudGFic1t0aGlzLl9hY3RpdmVCdWZmZXIueF09ITAsITB9cmV2ZXJzZUluZGV4KCl7aWYodGhpcy5fcmVzdHJpY3RDdXJzb3IoKSx0aGlzLl9hY3RpdmVCdWZmZXIueT09PXRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3Ape2NvbnN0IGU9dGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbS10aGlzLl9hY3RpdmVCdWZmZXIuc2Nyb2xsVG9wO3RoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5zaGlmdEVsZW1lbnRzKHRoaXMuX2FjdGl2ZUJ1ZmZlci55YmFzZSt0aGlzLl9hY3RpdmVCdWZmZXIueSxlLDEpLHRoaXMuX2FjdGl2ZUJ1ZmZlci5saW5lcy5zZXQodGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci55LHRoaXMuX2FjdGl2ZUJ1ZmZlci5nZXRCbGFua0xpbmUodGhpcy5fZXJhc2VBdHRyRGF0YSgpKSksdGhpcy5fZGlydHlSb3dUcmFja2VyLm1hcmtSYW5nZURpcnR5KHRoaXMuX2FjdGl2ZUJ1ZmZlci5zY3JvbGxUb3AsdGhpcy5fYWN0aXZlQnVmZmVyLnNjcm9sbEJvdHRvbSl9ZWxzZSB0aGlzLl9hY3RpdmVCdWZmZXIueS0tLHRoaXMuX3Jlc3RyaWN0Q3Vyc29yKCk7cmV0dXJuITB9ZnVsbFJlc2V0KCl7cmV0dXJuIHRoaXMuX3BhcnNlci5yZXNldCgpLHRoaXMuX29uUmVxdWVzdFJlc2V0LmZpcmUoKSwhMH1yZXNldCgpe3RoaXMuX2N1ckF0dHJEYXRhPWwuREVGQVVMVF9BVFRSX0RBVEEuY2xvbmUoKSx0aGlzLl9lcmFzZUF0dHJEYXRhSW50ZXJuYWw9bC5ERUZBVUxUX0FUVFJfREFUQS5jbG9uZSgpfV9lcmFzZUF0dHJEYXRhKCl7cmV0dXJuIHRoaXMuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbC5iZyY9LTY3MTA4ODY0LHRoaXMuX2VyYXNlQXR0ckRhdGFJbnRlcm5hbC5iZ3w9NjcxMDg4NjMmdGhpcy5fY3VyQXR0ckRhdGEuYmcsdGhpcy5fZXJhc2VBdHRyRGF0YUludGVybmFsfXNldGdMZXZlbChlKXtyZXR1cm4gdGhpcy5fY2hhcnNldFNlcnZpY2Uuc2V0Z0xldmVsKGUpLCEwfXNjcmVlbkFsaWdubWVudFBhdHRlcm4oKXtjb25zdCBlPW5ldyB1LkNlbGxEYXRhO2UuY29udGVudD0xPDwyMnxcIkVcIi5jaGFyQ29kZUF0KDApLGUuZmc9dGhpcy5fY3VyQXR0ckRhdGEuZmcsZS5iZz10aGlzLl9jdXJBdHRyRGF0YS5iZyx0aGlzLl9zZXRDdXJzb3IoMCwwKTtmb3IobGV0IHQ9MDt0PHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93czsrK3Qpe2NvbnN0IGk9dGhpcy5fYWN0aXZlQnVmZmVyLnliYXNlK3RoaXMuX2FjdGl2ZUJ1ZmZlci55K3Qscz10aGlzLl9hY3RpdmVCdWZmZXIubGluZXMuZ2V0KGkpO3MmJihzLmZpbGwoZSkscy5pc1dyYXBwZWQ9ITEpfXJldHVybiB0aGlzLl9kaXJ0eVJvd1RyYWNrZXIubWFya0FsbERpcnR5KCksdGhpcy5fc2V0Q3Vyc29yKDAsMCksITB9cmVxdWVzdFN0YXR1c1N0cmluZyhlLHQpe2NvbnN0IGk9dGhpcy5fYnVmZmVyU2VydmljZS5idWZmZXIscz10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zO3JldHVybihlPT4odGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckRhdGFFdmVudChgJHtuLkMwLkVTQ30ke2V9JHtuLkMwLkVTQ31cXFxcYCksITApKSgnXCJxJz09PWU/YFAxJHIke3RoaXMuX2N1ckF0dHJEYXRhLmlzUHJvdGVjdGVkKCk/MTowfVwicWA6J1wicCc9PT1lPydQMSRyNjE7MVwicCc6XCJyXCI9PT1lP2BQMSRyJHtpLnNjcm9sbFRvcCsxfTske2kuc2Nyb2xsQm90dG9tKzF9cmA6XCJtXCI9PT1lP1wiUDEkcjBtXCI6XCIgcVwiPT09ZT9gUDEkciR7e2Jsb2NrOjIsdW5kZXJsaW5lOjQsYmFyOjZ9W3MuY3Vyc29yU3R5bGVdLShzLmN1cnNvckJsaW5rPzE6MCl9IHFgOlwiUDAkclwiKX1tYXJrUmFuZ2VEaXJ0eShlLHQpe3RoaXMuX2RpcnR5Um93VHJhY2tlci5tYXJrUmFuZ2VEaXJ0eShlLHQpfX10LklucHV0SGFuZGxlcj1rO2xldCBMPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLmNsZWFyUmFuZ2UoKX1jbGVhclJhbmdlKCl7dGhpcy5zdGFydD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci55LHRoaXMuZW5kPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyLnl9bWFya0RpcnR5KGUpe2U8dGhpcy5zdGFydD90aGlzLnN0YXJ0PWU6ZT50aGlzLmVuZCYmKHRoaXMuZW5kPWUpfW1hcmtSYW5nZURpcnR5KGUsdCl7ZT50JiYoRT1lLGU9dCx0PUUpLGU8dGhpcy5zdGFydCYmKHRoaXMuc3RhcnQ9ZSksdD50aGlzLmVuZCYmKHRoaXMuZW5kPXQpfW1hcmtBbGxEaXJ0eSgpe3RoaXMubWFya1JhbmdlRGlydHkoMCx0aGlzLl9idWZmZXJTZXJ2aWNlLnJvd3MtMSl9fTtmdW5jdGlvbiBEKGUpe3JldHVybiAwPD1lJiZlPDI1Nn1MPXMoW3IoMCx2LklCdWZmZXJTZXJ2aWNlKV0sTCl9LDg0NDooZSx0KT0+e2Z1bmN0aW9uIGkoZSl7Zm9yKGNvbnN0IHQgb2YgZSl0LmRpc3Bvc2UoKTtlLmxlbmd0aD0wfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZ2V0RGlzcG9zZUFycmF5RGlzcG9zYWJsZT10LmRpc3Bvc2VBcnJheT10LnRvRGlzcG9zYWJsZT10Lk11dGFibGVEaXNwb3NhYmxlPXQuRGlzcG9zYWJsZT12b2lkIDAsdC5EaXNwb3NhYmxlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fZGlzcG9zYWJsZXM9W10sdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMDtmb3IoY29uc3QgZSBvZiB0aGlzLl9kaXNwb3NhYmxlcyllLmRpc3Bvc2UoKTt0aGlzLl9kaXNwb3NhYmxlcy5sZW5ndGg9MH1yZWdpc3RlcihlKXtyZXR1cm4gdGhpcy5fZGlzcG9zYWJsZXMucHVzaChlKSxlfXVucmVnaXN0ZXIoZSl7Y29uc3QgdD10aGlzLl9kaXNwb3NhYmxlcy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fZGlzcG9zYWJsZXMuc3BsaWNlKHQsMSl9fSx0Lk11dGFibGVEaXNwb3NhYmxlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faXNEaXNwb3NlZD0hMX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZD92b2lkIDA6dGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMuX2lzRGlzcG9zZWR8fGU9PT10aGlzLl92YWx1ZXx8KHRoaXMuX3ZhbHVlPy5kaXNwb3NlKCksdGhpcy5fdmFsdWU9ZSl9Y2xlYXIoKXt0aGlzLnZhbHVlPXZvaWQgMH1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLl92YWx1ZT8uZGlzcG9zZSgpLHRoaXMuX3ZhbHVlPXZvaWQgMH19LHQudG9EaXNwb3NhYmxlPWZ1bmN0aW9uKGUpe3JldHVybntkaXNwb3NlOmV9fSx0LmRpc3Bvc2VBcnJheT1pLHQuZ2V0RGlzcG9zZUFycmF5RGlzcG9zYWJsZT1mdW5jdGlvbihlKXtyZXR1cm57ZGlzcG9zZTooKT0+aShlKX19fSwxNTA1OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Gb3VyS2V5TWFwPXQuVHdvS2V5TWFwPXZvaWQgMDtjbGFzcyBpe2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT17fX1zZXQoZSx0LGkpe3RoaXMuX2RhdGFbZV18fCh0aGlzLl9kYXRhW2VdPXt9KSx0aGlzLl9kYXRhW2VdW3RdPWl9Z2V0KGUsdCl7cmV0dXJuIHRoaXMuX2RhdGFbZV0/dGhpcy5fZGF0YVtlXVt0XTp2b2lkIDB9Y2xlYXIoKXt0aGlzLl9kYXRhPXt9fX10LlR3b0tleU1hcD1pLHQuRm91cktleU1hcD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IGl9c2V0KGUsdCxzLHIsbil7dGhpcy5fZGF0YS5nZXQoZSx0KXx8dGhpcy5fZGF0YS5zZXQoZSx0LG5ldyBpKSx0aGlzLl9kYXRhLmdldChlLHQpLnNldChzLHIsbil9Z2V0KGUsdCxpLHMpe3JldHVybiB0aGlzLl9kYXRhLmdldChlLHQpPy5nZXQoaSxzKX1jbGVhcigpe3RoaXMuX2RhdGEuY2xlYXIoKX19fSw2MTE0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5pc0Nocm9tZU9TPXQuaXNMaW51eD10LmlzV2luZG93cz10LmlzSXBob25lPXQuaXNJcGFkPXQuaXNNYWM9dC5nZXRTYWZhcmlWZXJzaW9uPXQuaXNTYWZhcmk9dC5pc0xlZ2FjeUVkZ2U9dC5pc0ZpcmVmb3g9dC5pc05vZGU9dm9pZCAwLHQuaXNOb2RlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzJiZcInRpdGxlXCJpbiBwcm9jZXNzO2NvbnN0IGk9dC5pc05vZGU/XCJub2RlXCI6bmF2aWdhdG9yLnVzZXJBZ2VudCxzPXQuaXNOb2RlP1wibm9kZVwiOm5hdmlnYXRvci5wbGF0Zm9ybTt0LmlzRmlyZWZveD1pLmluY2x1ZGVzKFwiRmlyZWZveFwiKSx0LmlzTGVnYWN5RWRnZT1pLmluY2x1ZGVzKFwiRWRnZVwiKSx0LmlzU2FmYXJpPS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoaSksdC5nZXRTYWZhcmlWZXJzaW9uPWZ1bmN0aW9uKCl7aWYoIXQuaXNTYWZhcmkpcmV0dXJuIDA7Y29uc3QgZT1pLm1hdGNoKC9WZXJzaW9uXFwvKFxcZCspLyk7cmV0dXJuIG51bGw9PT1lfHxlLmxlbmd0aDwyPzA6cGFyc2VJbnQoZVsxXSl9LHQuaXNNYWM9W1wiTWFjaW50b3NoXCIsXCJNYWNJbnRlbFwiLFwiTWFjUFBDXCIsXCJNYWM2OEtcIl0uaW5jbHVkZXMocyksdC5pc0lwYWQ9XCJpUGFkXCI9PT1zLHQuaXNJcGhvbmU9XCJpUGhvbmVcIj09PXMsdC5pc1dpbmRvd3M9W1wiV2luZG93c1wiLFwiV2luMTZcIixcIldpbjMyXCIsXCJXaW5DRVwiXS5pbmNsdWRlcyhzKSx0LmlzTGludXg9cy5pbmRleE9mKFwiTGludXhcIik+PTAsdC5pc0Nocm9tZU9TPS9cXGJDck9TXFxiLy50ZXN0KGkpfSw2MTA2OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Tb3J0ZWRMaXN0PXZvaWQgMDtsZXQgaT0wO3QuU29ydGVkTGlzdD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9nZXRLZXk9ZSx0aGlzLl9hcnJheT1bXX1jbGVhcigpe3RoaXMuX2FycmF5Lmxlbmd0aD0wfWluc2VydChlKXswIT09dGhpcy5fYXJyYXkubGVuZ3RoPyhpPXRoaXMuX3NlYXJjaCh0aGlzLl9nZXRLZXkoZSkpLHRoaXMuX2FycmF5LnNwbGljZShpLDAsZSkpOnRoaXMuX2FycmF5LnB1c2goZSl9ZGVsZXRlKGUpe2lmKDA9PT10aGlzLl9hcnJheS5sZW5ndGgpcmV0dXJuITE7Y29uc3QgdD10aGlzLl9nZXRLZXkoZSk7aWYodm9pZCAwPT09dClyZXR1cm4hMTtpZihpPXRoaXMuX3NlYXJjaCh0KSwtMT09PWkpcmV0dXJuITE7aWYodGhpcy5fZ2V0S2V5KHRoaXMuX2FycmF5W2ldKSE9PXQpcmV0dXJuITE7ZG97aWYodGhpcy5fYXJyYXlbaV09PT1lKXJldHVybiB0aGlzLl9hcnJheS5zcGxpY2UoaSwxKSwhMH13aGlsZSgrK2k8dGhpcy5fYXJyYXkubGVuZ3RoJiZ0aGlzLl9nZXRLZXkodGhpcy5fYXJyYXlbaV0pPT09dCk7cmV0dXJuITF9KmdldEtleUl0ZXJhdG9yKGUpe2lmKDAhPT10aGlzLl9hcnJheS5sZW5ndGgmJihpPXRoaXMuX3NlYXJjaChlKSwhKGk8MHx8aT49dGhpcy5fYXJyYXkubGVuZ3RoKSYmdGhpcy5fZ2V0S2V5KHRoaXMuX2FycmF5W2ldKT09PWUpKWRve3lpZWxkIHRoaXMuX2FycmF5W2ldfXdoaWxlKCsraTx0aGlzLl9hcnJheS5sZW5ndGgmJnRoaXMuX2dldEtleSh0aGlzLl9hcnJheVtpXSk9PT1lKX1mb3JFYWNoQnlLZXkoZSx0KXtpZigwIT09dGhpcy5fYXJyYXkubGVuZ3RoJiYoaT10aGlzLl9zZWFyY2goZSksIShpPDB8fGk+PXRoaXMuX2FycmF5Lmxlbmd0aCkmJnRoaXMuX2dldEtleSh0aGlzLl9hcnJheVtpXSk9PT1lKSlkb3t0KHRoaXMuX2FycmF5W2ldKX13aGlsZSgrK2k8dGhpcy5fYXJyYXkubGVuZ3RoJiZ0aGlzLl9nZXRLZXkodGhpcy5fYXJyYXlbaV0pPT09ZSl9dmFsdWVzKCl7cmV0dXJuWy4uLnRoaXMuX2FycmF5XS52YWx1ZXMoKX1fc2VhcmNoKGUpe2xldCB0PTAsaT10aGlzLl9hcnJheS5sZW5ndGgtMTtmb3IoO2k+PXQ7KXtsZXQgcz10K2k+PjE7Y29uc3Qgcj10aGlzLl9nZXRLZXkodGhpcy5fYXJyYXlbc10pO2lmKHI+ZSlpPXMtMTtlbHNle2lmKCEocjxlKSl7Zm9yKDtzPjAmJnRoaXMuX2dldEtleSh0aGlzLl9hcnJheVtzLTFdKT09PWU7KXMtLTtyZXR1cm4gc310PXMrMX19cmV0dXJuIHR9fX0sNzIyNjooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EZWJvdW5jZWRJZGxlVGFzaz10LklkbGVUYXNrUXVldWU9dC5Qcmlvcml0eVRhc2tRdWV1ZT12b2lkIDA7Y29uc3Qgcz1pKDYxMTQpO2NsYXNzIHJ7Y29uc3RydWN0b3IoKXt0aGlzLl90YXNrcz1bXSx0aGlzLl9pPTB9ZW5xdWV1ZShlKXt0aGlzLl90YXNrcy5wdXNoKGUpLHRoaXMuX3N0YXJ0KCl9Zmx1c2goKXtmb3IoO3RoaXMuX2k8dGhpcy5fdGFza3MubGVuZ3RoOyl0aGlzLl90YXNrc1t0aGlzLl9pXSgpfHx0aGlzLl9pKys7dGhpcy5jbGVhcigpfWNsZWFyKCl7dGhpcy5faWRsZUNhbGxiYWNrJiYodGhpcy5fY2FuY2VsQ2FsbGJhY2sodGhpcy5faWRsZUNhbGxiYWNrKSx0aGlzLl9pZGxlQ2FsbGJhY2s9dm9pZCAwKSx0aGlzLl9pPTAsdGhpcy5fdGFza3MubGVuZ3RoPTB9X3N0YXJ0KCl7dGhpcy5faWRsZUNhbGxiYWNrfHwodGhpcy5faWRsZUNhbGxiYWNrPXRoaXMuX3JlcXVlc3RDYWxsYmFjayh0aGlzLl9wcm9jZXNzLmJpbmQodGhpcykpKX1fcHJvY2VzcyhlKXt0aGlzLl9pZGxlQ2FsbGJhY2s9dm9pZCAwO2xldCB0PTAsaT0wLHM9ZS50aW1lUmVtYWluaW5nKCkscj0wO2Zvcig7dGhpcy5faTx0aGlzLl90YXNrcy5sZW5ndGg7KXtpZih0PURhdGUubm93KCksdGhpcy5fdGFza3NbdGhpcy5faV0oKXx8dGhpcy5faSsrLHQ9TWF0aC5tYXgoMSxEYXRlLm5vdygpLXQpLGk9TWF0aC5tYXgodCxpKSxyPWUudGltZVJlbWFpbmluZygpLDEuNSppPnIpcmV0dXJuIHMtdDwtMjAmJmNvbnNvbGUud2FybihgdGFzayBxdWV1ZSBleGNlZWRlZCBhbGxvdHRlZCBkZWFkbGluZSBieSAke01hdGguYWJzKE1hdGgucm91bmQocy10KSl9bXNgKSx2b2lkIHRoaXMuX3N0YXJ0KCk7cz1yfXRoaXMuY2xlYXIoKX19Y2xhc3MgbiBleHRlbmRzIHJ7X3JlcXVlc3RDYWxsYmFjayhlKXtyZXR1cm4gc2V0VGltZW91dCgoKCk9PmUodGhpcy5fY3JlYXRlRGVhZGxpbmUoMTYpKSkpfV9jYW5jZWxDYWxsYmFjayhlKXtjbGVhclRpbWVvdXQoZSl9X2NyZWF0ZURlYWRsaW5lKGUpe2NvbnN0IHQ9RGF0ZS5ub3coKStlO3JldHVybnt0aW1lUmVtYWluaW5nOigpPT5NYXRoLm1heCgwLHQtRGF0ZS5ub3coKSl9fX10LlByaW9yaXR5VGFza1F1ZXVlPW4sdC5JZGxlVGFza1F1ZXVlPSFzLmlzTm9kZSYmXCJyZXF1ZXN0SWRsZUNhbGxiYWNrXCJpbiB3aW5kb3c/Y2xhc3MgZXh0ZW5kcyBye19yZXF1ZXN0Q2FsbGJhY2soZSl7cmV0dXJuIHJlcXVlc3RJZGxlQ2FsbGJhY2soZSl9X2NhbmNlbENhbGxiYWNrKGUpe2NhbmNlbElkbGVDYWxsYmFjayhlKX19Om4sdC5EZWJvdW5jZWRJZGxlVGFzaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3F1ZXVlPW5ldyB0LklkbGVUYXNrUXVldWV9c2V0KGUpe3RoaXMuX3F1ZXVlLmNsZWFyKCksdGhpcy5fcXVldWUuZW5xdWV1ZShlKX1mbHVzaCgpe3RoaXMuX3F1ZXVlLmZsdXNoKCl9fX0sOTI4MjooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51cGRhdGVXaW5kb3dzTW9kZVdyYXBwZWRTdGF0ZT12b2lkIDA7Y29uc3Qgcz1pKDY0Myk7dC51cGRhdGVXaW5kb3dzTW9kZVdyYXBwZWRTdGF0ZT1mdW5jdGlvbihlKXtjb25zdCB0PWUuYnVmZmVyLmxpbmVzLmdldChlLmJ1ZmZlci55YmFzZStlLmJ1ZmZlci55LTEpLGk9dD8uZ2V0KGUuY29scy0xKSxyPWUuYnVmZmVyLmxpbmVzLmdldChlLmJ1ZmZlci55YmFzZStlLmJ1ZmZlci55KTtyJiZpJiYoci5pc1dyYXBwZWQ9aVtzLkNIQVJfREFUQV9DT0RFX0lOREVYXSE9PXMuTlVMTF9DRUxMX0NPREUmJmlbcy5DSEFSX0RBVEFfQ09ERV9JTkRFWF0hPT1zLldISVRFU1BBQ0VfQ0VMTF9DT0RFKX19LDM3MzQ6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkV4dGVuZGVkQXR0cnM9dC5BdHRyaWJ1dGVEYXRhPXZvaWQgMDtjbGFzcyBpe2NvbnN0cnVjdG9yKCl7dGhpcy5mZz0wLHRoaXMuYmc9MCx0aGlzLmV4dGVuZGVkPW5ldyBzfXN0YXRpYyB0b0NvbG9yUkdCKGUpe3JldHVybltlPj4+MTYmMjU1LGU+Pj44JjI1NSwyNTUmZV19c3RhdGljIGZyb21Db2xvclJHQihlKXtyZXR1cm4oMjU1JmVbMF0pPDwxNnwoMjU1JmVbMV0pPDw4fDI1NSZlWzJdfWNsb25lKCl7Y29uc3QgZT1uZXcgaTtyZXR1cm4gZS5mZz10aGlzLmZnLGUuYmc9dGhpcy5iZyxlLmV4dGVuZGVkPXRoaXMuZXh0ZW5kZWQuY2xvbmUoKSxlfWlzSW52ZXJzZSgpe3JldHVybiA2NzEwODg2NCZ0aGlzLmZnfWlzQm9sZCgpe3JldHVybiAxMzQyMTc3MjgmdGhpcy5mZ31pc1VuZGVybGluZSgpe3JldHVybiB0aGlzLmhhc0V4dGVuZGVkQXR0cnMoKSYmMCE9PXRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lU3R5bGU/MToyNjg0MzU0NTYmdGhpcy5mZ31pc0JsaW5rKCl7cmV0dXJuIDUzNjg3MDkxMiZ0aGlzLmZnfWlzSW52aXNpYmxlKCl7cmV0dXJuIDEwNzM3NDE4MjQmdGhpcy5mZ31pc0l0YWxpYygpe3JldHVybiA2NzEwODg2NCZ0aGlzLmJnfWlzRGltKCl7cmV0dXJuIDEzNDIxNzcyOCZ0aGlzLmJnfWlzU3RyaWtldGhyb3VnaCgpe3JldHVybiAyMTQ3NDgzNjQ4JnRoaXMuZmd9aXNQcm90ZWN0ZWQoKXtyZXR1cm4gNTM2ODcwOTEyJnRoaXMuYmd9aXNPdmVybGluZSgpe3JldHVybiAxMDczNzQxODI0JnRoaXMuYmd9Z2V0RmdDb2xvck1vZGUoKXtyZXR1cm4gNTAzMzE2NDgmdGhpcy5mZ31nZXRCZ0NvbG9yTW9kZSgpe3JldHVybiA1MDMzMTY0OCZ0aGlzLmJnfWlzRmdSR0IoKXtyZXR1cm4gNTAzMzE2NDg9PSg1MDMzMTY0OCZ0aGlzLmZnKX1pc0JnUkdCKCl7cmV0dXJuIDUwMzMxNjQ4PT0oNTAzMzE2NDgmdGhpcy5iZyl9aXNGZ1BhbGV0dGUoKXtyZXR1cm4gMTY3NzcyMTY9PSg1MDMzMTY0OCZ0aGlzLmZnKXx8MzM1NTQ0MzI9PSg1MDMzMTY0OCZ0aGlzLmZnKX1pc0JnUGFsZXR0ZSgpe3JldHVybiAxNjc3NzIxNj09KDUwMzMxNjQ4JnRoaXMuYmcpfHwzMzU1NDQzMj09KDUwMzMxNjQ4JnRoaXMuYmcpfWlzRmdEZWZhdWx0KCl7cmV0dXJuIDA9PSg1MDMzMTY0OCZ0aGlzLmZnKX1pc0JnRGVmYXVsdCgpe3JldHVybiAwPT0oNTAzMzE2NDgmdGhpcy5iZyl9aXNBdHRyaWJ1dGVEZWZhdWx0KCl7cmV0dXJuIDA9PT10aGlzLmZnJiYwPT09dGhpcy5iZ31nZXRGZ0NvbG9yKCl7c3dpdGNoKDUwMzMxNjQ4JnRoaXMuZmcpe2Nhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpyZXR1cm4gMjU1JnRoaXMuZmc7Y2FzZSA1MDMzMTY0ODpyZXR1cm4gMTY3NzcyMTUmdGhpcy5mZztkZWZhdWx0OnJldHVybi0xfX1nZXRCZ0NvbG9yKCl7c3dpdGNoKDUwMzMxNjQ4JnRoaXMuYmcpe2Nhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpyZXR1cm4gMjU1JnRoaXMuYmc7Y2FzZSA1MDMzMTY0ODpyZXR1cm4gMTY3NzcyMTUmdGhpcy5iZztkZWZhdWx0OnJldHVybi0xfX1oYXNFeHRlbmRlZEF0dHJzKCl7cmV0dXJuIDI2ODQzNTQ1NiZ0aGlzLmJnfXVwZGF0ZUV4dGVuZGVkKCl7dGhpcy5leHRlbmRlZC5pc0VtcHR5KCk/dGhpcy5iZyY9LTI2ODQzNTQ1Nzp0aGlzLmJnfD0yNjg0MzU0NTZ9Z2V0VW5kZXJsaW5lQ29sb3IoKXtpZigyNjg0MzU0NTYmdGhpcy5iZyYmfnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3Ipc3dpdGNoKDUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3Ipe2Nhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpyZXR1cm4gMjU1JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3I7Y2FzZSA1MDMzMTY0ODpyZXR1cm4gMTY3NzcyMTUmdGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcjtkZWZhdWx0OnJldHVybiB0aGlzLmdldEZnQ29sb3IoKX1yZXR1cm4gdGhpcy5nZXRGZ0NvbG9yKCl9Z2V0VW5kZXJsaW5lQ29sb3JNb2RlKCl7cmV0dXJuIDI2ODQzNTQ1NiZ0aGlzLmJnJiZ+dGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcj81MDMzMTY0OCZ0aGlzLmV4dGVuZGVkLnVuZGVybGluZUNvbG9yOnRoaXMuZ2V0RmdDb2xvck1vZGUoKX1pc1VuZGVybGluZUNvbG9yUkdCKCl7cmV0dXJuIDI2ODQzNTQ1NiZ0aGlzLmJnJiZ+dGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcj81MDMzMTY0OD09KDUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3IpOnRoaXMuaXNGZ1JHQigpfWlzVW5kZXJsaW5lQ29sb3JQYWxldHRlKCl7cmV0dXJuIDI2ODQzNTQ1NiZ0aGlzLmJnJiZ+dGhpcy5leHRlbmRlZC51bmRlcmxpbmVDb2xvcj8xNjc3NzIxNj09KDUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3IpfHwzMzU1NDQzMj09KDUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3IpOnRoaXMuaXNGZ1BhbGV0dGUoKX1pc1VuZGVybGluZUNvbG9yRGVmYXVsdCgpe3JldHVybiAyNjg0MzU0NTYmdGhpcy5iZyYmfnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3I/MD09KDUwMzMxNjQ4JnRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lQ29sb3IpOnRoaXMuaXNGZ0RlZmF1bHQoKX1nZXRVbmRlcmxpbmVTdHlsZSgpe3JldHVybiAyNjg0MzU0NTYmdGhpcy5mZz8yNjg0MzU0NTYmdGhpcy5iZz90aGlzLmV4dGVuZGVkLnVuZGVybGluZVN0eWxlOjE6MH1nZXRVbmRlcmxpbmVWYXJpYW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMuZXh0ZW5kZWQudW5kZXJsaW5lVmFyaWFudE9mZnNldH19dC5BdHRyaWJ1dGVEYXRhPWk7Y2xhc3Mgc3tnZXQgZXh0KCl7cmV0dXJuIHRoaXMuX3VybElkPy00Njk3NjIwNDkmdGhpcy5fZXh0fHRoaXMudW5kZXJsaW5lU3R5bGU8PDI2OnRoaXMuX2V4dH1zZXQgZXh0KGUpe3RoaXMuX2V4dD1lfWdldCB1bmRlcmxpbmVTdHlsZSgpe3JldHVybiB0aGlzLl91cmxJZD81Oig0Njk3NjIwNDgmdGhpcy5fZXh0KT4+MjZ9c2V0IHVuZGVybGluZVN0eWxlKGUpe3RoaXMuX2V4dCY9LTQ2OTc2MjA0OSx0aGlzLl9leHR8PWU8PDI2JjQ2OTc2MjA0OH1nZXQgdW5kZXJsaW5lQ29sb3IoKXtyZXR1cm4gNjcxMDg4NjMmdGhpcy5fZXh0fXNldCB1bmRlcmxpbmVDb2xvcihlKXt0aGlzLl9leHQmPS02NzEwODg2NCx0aGlzLl9leHR8PTY3MTA4ODYzJmV9Z2V0IHVybElkKCl7cmV0dXJuIHRoaXMuX3VybElkfXNldCB1cmxJZChlKXt0aGlzLl91cmxJZD1lfWdldCB1bmRlcmxpbmVWYXJpYW50T2Zmc2V0KCl7Y29uc3QgZT0oMzc1ODA5NjM4NCZ0aGlzLl9leHQpPj4yOTtyZXR1cm4gZTwwPzQyOTQ5NjcyODheZTplfXNldCB1bmRlcmxpbmVWYXJpYW50T2Zmc2V0KGUpe3RoaXMuX2V4dCY9NTM2ODcwOTExLHRoaXMuX2V4dHw9ZTw8MjkmMzc1ODA5NjM4NH1jb25zdHJ1Y3RvcihlPTAsdD0wKXt0aGlzLl9leHQ9MCx0aGlzLl91cmxJZD0wLHRoaXMuX2V4dD1lLHRoaXMuX3VybElkPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IHModGhpcy5fZXh0LHRoaXMuX3VybElkKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLnVuZGVybGluZVN0eWxlJiYwPT09dGhpcy5fdXJsSWR9fXQuRXh0ZW5kZWRBdHRycz1zfSw5MDkyOihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1ZmZlcj10Lk1BWF9CVUZGRVJfU0laRT12b2lkIDA7Y29uc3Qgcz1pKDYzNDkpLHI9aSg3MjI2KSxuPWkoMzczNCksbz1pKDg0MzcpLGE9aSg0NjM0KSxoPWkoNTExKSxjPWkoNjQzKSxsPWkoNDg2MyksZD1pKDcxMTYpO3QuTUFYX0JVRkZFUl9TSVpFPTQyOTQ5NjcyOTUsdC5CdWZmZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuX2hhc1Njcm9sbGJhY2s9ZSx0aGlzLl9vcHRpb25zU2VydmljZT10LHRoaXMuX2J1ZmZlclNlcnZpY2U9aSx0aGlzLnlkaXNwPTAsdGhpcy55YmFzZT0wLHRoaXMueT0wLHRoaXMueD0wLHRoaXMudGFicz17fSx0aGlzLnNhdmVkWT0wLHRoaXMuc2F2ZWRYPTAsdGhpcy5zYXZlZEN1ckF0dHJEYXRhPW8uREVGQVVMVF9BVFRSX0RBVEEuY2xvbmUoKSx0aGlzLnNhdmVkQ2hhcnNldD1kLkRFRkFVTFRfQ0hBUlNFVCx0aGlzLm1hcmtlcnM9W10sdGhpcy5fbnVsbENlbGw9aC5DZWxsRGF0YS5mcm9tQ2hhckRhdGEoWzAsYy5OVUxMX0NFTExfQ0hBUixjLk5VTExfQ0VMTF9XSURUSCxjLk5VTExfQ0VMTF9DT0RFXSksdGhpcy5fd2hpdGVzcGFjZUNlbGw9aC5DZWxsRGF0YS5mcm9tQ2hhckRhdGEoWzAsYy5XSElURVNQQUNFX0NFTExfQ0hBUixjLldISVRFU1BBQ0VfQ0VMTF9XSURUSCxjLldISVRFU1BBQ0VfQ0VMTF9DT0RFXSksdGhpcy5faXNDbGVhcmluZz0hMSx0aGlzLl9tZW1vcnlDbGVhbnVwUXVldWU9bmV3IHIuSWRsZVRhc2tRdWV1ZSx0aGlzLl9tZW1vcnlDbGVhbnVwUG9zaXRpb249MCx0aGlzLl9jb2xzPXRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLl9yb3dzPXRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cyx0aGlzLmxpbmVzPW5ldyBzLkNpcmN1bGFyTGlzdCh0aGlzLl9nZXRDb3JyZWN0QnVmZmVyTGVuZ3RoKHRoaXMuX3Jvd3MpKSx0aGlzLnNjcm9sbFRvcD0wLHRoaXMuc2Nyb2xsQm90dG9tPXRoaXMuX3Jvd3MtMSx0aGlzLnNldHVwVGFiU3RvcHMoKX1nZXROdWxsQ2VsbChlKXtyZXR1cm4gZT8odGhpcy5fbnVsbENlbGwuZmc9ZS5mZyx0aGlzLl9udWxsQ2VsbC5iZz1lLmJnLHRoaXMuX251bGxDZWxsLmV4dGVuZGVkPWUuZXh0ZW5kZWQpOih0aGlzLl9udWxsQ2VsbC5mZz0wLHRoaXMuX251bGxDZWxsLmJnPTAsdGhpcy5fbnVsbENlbGwuZXh0ZW5kZWQ9bmV3IG4uRXh0ZW5kZWRBdHRycyksdGhpcy5fbnVsbENlbGx9Z2V0V2hpdGVzcGFjZUNlbGwoZSl7cmV0dXJuIGU/KHRoaXMuX3doaXRlc3BhY2VDZWxsLmZnPWUuZmcsdGhpcy5fd2hpdGVzcGFjZUNlbGwuYmc9ZS5iZyx0aGlzLl93aGl0ZXNwYWNlQ2VsbC5leHRlbmRlZD1lLmV4dGVuZGVkKToodGhpcy5fd2hpdGVzcGFjZUNlbGwuZmc9MCx0aGlzLl93aGl0ZXNwYWNlQ2VsbC5iZz0wLHRoaXMuX3doaXRlc3BhY2VDZWxsLmV4dGVuZGVkPW5ldyBuLkV4dGVuZGVkQXR0cnMpLHRoaXMuX3doaXRlc3BhY2VDZWxsfWdldEJsYW5rTGluZShlLHQpe3JldHVybiBuZXcgby5CdWZmZXJMaW5lKHRoaXMuX2J1ZmZlclNlcnZpY2UuY29scyx0aGlzLmdldE51bGxDZWxsKGUpLHQpfWdldCBoYXNTY3JvbGxiYWNrKCl7cmV0dXJuIHRoaXMuX2hhc1Njcm9sbGJhY2smJnRoaXMubGluZXMubWF4TGVuZ3RoPnRoaXMuX3Jvd3N9Z2V0IGlzQ3Vyc29ySW5WaWV3cG9ydCgpe2NvbnN0IGU9dGhpcy55YmFzZSt0aGlzLnktdGhpcy55ZGlzcDtyZXR1cm4gZT49MCYmZTx0aGlzLl9yb3dzfV9nZXRDb3JyZWN0QnVmZmVyTGVuZ3RoKGUpe2lmKCF0aGlzLl9oYXNTY3JvbGxiYWNrKXJldHVybiBlO2NvbnN0IGk9ZSt0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnNjcm9sbGJhY2s7cmV0dXJuIGk+dC5NQVhfQlVGRkVSX1NJWkU/dC5NQVhfQlVGRkVSX1NJWkU6aX1maWxsVmlld3BvcnRSb3dzKGUpe2lmKDA9PT10aGlzLmxpbmVzLmxlbmd0aCl7dm9pZCAwPT09ZSYmKGU9by5ERUZBVUxUX0FUVFJfREFUQSk7bGV0IHQ9dGhpcy5fcm93cztmb3IoO3QtLTspdGhpcy5saW5lcy5wdXNoKHRoaXMuZ2V0QmxhbmtMaW5lKGUpKX19Y2xlYXIoKXt0aGlzLnlkaXNwPTAsdGhpcy55YmFzZT0wLHRoaXMueT0wLHRoaXMueD0wLHRoaXMubGluZXM9bmV3IHMuQ2lyY3VsYXJMaXN0KHRoaXMuX2dldENvcnJlY3RCdWZmZXJMZW5ndGgodGhpcy5fcm93cykpLHRoaXMuc2Nyb2xsVG9wPTAsdGhpcy5zY3JvbGxCb3R0b209dGhpcy5fcm93cy0xLHRoaXMuc2V0dXBUYWJTdG9wcygpfXJlc2l6ZShlLHQpe2NvbnN0IGk9dGhpcy5nZXROdWxsQ2VsbChvLkRFRkFVTFRfQVRUUl9EQVRBKTtsZXQgcz0wO2NvbnN0IHI9dGhpcy5fZ2V0Q29ycmVjdEJ1ZmZlckxlbmd0aCh0KTtpZihyPnRoaXMubGluZXMubWF4TGVuZ3RoJiYodGhpcy5saW5lcy5tYXhMZW5ndGg9ciksdGhpcy5saW5lcy5sZW5ndGg+MCl7aWYodGhpcy5fY29sczxlKWZvcihsZXQgdD0wO3Q8dGhpcy5saW5lcy5sZW5ndGg7dCsrKXMrPSt0aGlzLmxpbmVzLmdldCh0KS5yZXNpemUoZSxpKTtsZXQgbj0wO2lmKHRoaXMuX3Jvd3M8dClmb3IobGV0IHM9dGhpcy5fcm93cztzPHQ7cysrKXRoaXMubGluZXMubGVuZ3RoPHQrdGhpcy55YmFzZSYmKHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMud2luZG93c01vZGV8fHZvaWQgMCE9PXRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMud2luZG93c1B0eS5iYWNrZW5kfHx2b2lkIDAhPT10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLndpbmRvd3NQdHkuYnVpbGROdW1iZXI/dGhpcy5saW5lcy5wdXNoKG5ldyBvLkJ1ZmZlckxpbmUoZSxpKSk6dGhpcy55YmFzZT4wJiZ0aGlzLmxpbmVzLmxlbmd0aDw9dGhpcy55YmFzZSt0aGlzLnkrbisxPyh0aGlzLnliYXNlLS0sbisrLHRoaXMueWRpc3A+MCYmdGhpcy55ZGlzcC0tKTp0aGlzLmxpbmVzLnB1c2gobmV3IG8uQnVmZmVyTGluZShlLGkpKSk7ZWxzZSBmb3IobGV0IGU9dGhpcy5fcm93cztlPnQ7ZS0tKXRoaXMubGluZXMubGVuZ3RoPnQrdGhpcy55YmFzZSYmKHRoaXMubGluZXMubGVuZ3RoPnRoaXMueWJhc2UrdGhpcy55KzE/dGhpcy5saW5lcy5wb3AoKToodGhpcy55YmFzZSsrLHRoaXMueWRpc3ArKykpO2lmKHI8dGhpcy5saW5lcy5tYXhMZW5ndGgpe2NvbnN0IGU9dGhpcy5saW5lcy5sZW5ndGgtcjtlPjAmJih0aGlzLmxpbmVzLnRyaW1TdGFydChlKSx0aGlzLnliYXNlPU1hdGgubWF4KHRoaXMueWJhc2UtZSwwKSx0aGlzLnlkaXNwPU1hdGgubWF4KHRoaXMueWRpc3AtZSwwKSx0aGlzLnNhdmVkWT1NYXRoLm1heCh0aGlzLnNhdmVkWS1lLDApKSx0aGlzLmxpbmVzLm1heExlbmd0aD1yfXRoaXMueD1NYXRoLm1pbih0aGlzLngsZS0xKSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQtMSksbiYmKHRoaXMueSs9biksdGhpcy5zYXZlZFg9TWF0aC5taW4odGhpcy5zYXZlZFgsZS0xKSx0aGlzLnNjcm9sbFRvcD0wfWlmKHRoaXMuc2Nyb2xsQm90dG9tPXQtMSx0aGlzLl9pc1JlZmxvd0VuYWJsZWQmJih0aGlzLl9yZWZsb3coZSx0KSx0aGlzLl9jb2xzPmUpKWZvcihsZXQgdD0wO3Q8dGhpcy5saW5lcy5sZW5ndGg7dCsrKXMrPSt0aGlzLmxpbmVzLmdldCh0KS5yZXNpemUoZSxpKTt0aGlzLl9jb2xzPWUsdGhpcy5fcm93cz10LHRoaXMuX21lbW9yeUNsZWFudXBRdWV1ZS5jbGVhcigpLHM+LjEqdGhpcy5saW5lcy5sZW5ndGgmJih0aGlzLl9tZW1vcnlDbGVhbnVwUG9zaXRpb249MCx0aGlzLl9tZW1vcnlDbGVhbnVwUXVldWUuZW5xdWV1ZSgoKCk9PnRoaXMuX2JhdGNoZWRNZW1vcnlDbGVhbnVwKCkpKSl9X2JhdGNoZWRNZW1vcnlDbGVhbnVwKCl7bGV0IGU9ITA7dGhpcy5fbWVtb3J5Q2xlYW51cFBvc2l0aW9uPj10aGlzLmxpbmVzLmxlbmd0aCYmKHRoaXMuX21lbW9yeUNsZWFudXBQb3NpdGlvbj0wLGU9ITEpO2xldCB0PTA7Zm9yKDt0aGlzLl9tZW1vcnlDbGVhbnVwUG9zaXRpb248dGhpcy5saW5lcy5sZW5ndGg7KWlmKHQrPXRoaXMubGluZXMuZ2V0KHRoaXMuX21lbW9yeUNsZWFudXBQb3NpdGlvbisrKS5jbGVhbnVwTWVtb3J5KCksdD4xMDApcmV0dXJuITA7cmV0dXJuIGV9Z2V0IF9pc1JlZmxvd0VuYWJsZWQoKXtjb25zdCBlPXRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMud2luZG93c1B0eTtyZXR1cm4gZSYmZS5idWlsZE51bWJlcj90aGlzLl9oYXNTY3JvbGxiYWNrJiZcImNvbnB0eVwiPT09ZS5iYWNrZW5kJiZlLmJ1aWxkTnVtYmVyPj0yMTM3Njp0aGlzLl9oYXNTY3JvbGxiYWNrJiYhdGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy53aW5kb3dzTW9kZX1fcmVmbG93KGUsdCl7dGhpcy5fY29scyE9PWUmJihlPnRoaXMuX2NvbHM/dGhpcy5fcmVmbG93TGFyZ2VyKGUsdCk6dGhpcy5fcmVmbG93U21hbGxlcihlLHQpKX1fcmVmbG93TGFyZ2VyKGUsdCl7Y29uc3QgaT0oMCxhLnJlZmxvd0xhcmdlckdldExpbmVzVG9SZW1vdmUpKHRoaXMubGluZXMsdGhpcy5fY29scyxlLHRoaXMueWJhc2UrdGhpcy55LHRoaXMuZ2V0TnVsbENlbGwoby5ERUZBVUxUX0FUVFJfREFUQSkpO2lmKGkubGVuZ3RoPjApe2NvbnN0IHM9KDAsYS5yZWZsb3dMYXJnZXJDcmVhdGVOZXdMYXlvdXQpKHRoaXMubGluZXMsaSk7KDAsYS5yZWZsb3dMYXJnZXJBcHBseU5ld0xheW91dCkodGhpcy5saW5lcyxzLmxheW91dCksdGhpcy5fcmVmbG93TGFyZ2VyQWRqdXN0Vmlld3BvcnQoZSx0LHMuY291bnRSZW1vdmVkKX19X3JlZmxvd0xhcmdlckFkanVzdFZpZXdwb3J0KGUsdCxpKXtjb25zdCBzPXRoaXMuZ2V0TnVsbENlbGwoby5ERUZBVUxUX0FUVFJfREFUQSk7bGV0IHI9aTtmb3IoO3ItLSA+MDspMD09PXRoaXMueWJhc2U/KHRoaXMueT4wJiZ0aGlzLnktLSx0aGlzLmxpbmVzLmxlbmd0aDx0JiZ0aGlzLmxpbmVzLnB1c2gobmV3IG8uQnVmZmVyTGluZShlLHMpKSk6KHRoaXMueWRpc3A9PT10aGlzLnliYXNlJiZ0aGlzLnlkaXNwLS0sdGhpcy55YmFzZS0tKTt0aGlzLnNhdmVkWT1NYXRoLm1heCh0aGlzLnNhdmVkWS1pLDApfV9yZWZsb3dTbWFsbGVyKGUsdCl7Y29uc3QgaT10aGlzLmdldE51bGxDZWxsKG8uREVGQVVMVF9BVFRSX0RBVEEpLHM9W107bGV0IHI9MDtmb3IobGV0IG49dGhpcy5saW5lcy5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGg9dGhpcy5saW5lcy5nZXQobik7aWYoIWh8fCFoLmlzV3JhcHBlZCYmaC5nZXRUcmltbWVkTGVuZ3RoKCk8PWUpY29udGludWU7Y29uc3QgYz1baF07Zm9yKDtoLmlzV3JhcHBlZCYmbj4wOyloPXRoaXMubGluZXMuZ2V0KC0tbiksYy51bnNoaWZ0KGgpO2NvbnN0IGw9dGhpcy55YmFzZSt0aGlzLnk7aWYobD49biYmbDxuK2MubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IGQ9Y1tjLmxlbmd0aC0xXS5nZXRUcmltbWVkTGVuZ3RoKCksXz0oMCxhLnJlZmxvd1NtYWxsZXJHZXROZXdMaW5lTGVuZ3RocykoYyx0aGlzLl9jb2xzLGUpLHU9Xy5sZW5ndGgtYy5sZW5ndGg7bGV0IGY7Zj0wPT09dGhpcy55YmFzZSYmdGhpcy55IT09dGhpcy5saW5lcy5sZW5ndGgtMT9NYXRoLm1heCgwLHRoaXMueS10aGlzLmxpbmVzLm1heExlbmd0aCt1KTpNYXRoLm1heCgwLHRoaXMubGluZXMubGVuZ3RoLXRoaXMubGluZXMubWF4TGVuZ3RoK3UpO2NvbnN0IHY9W107Zm9yKGxldCBlPTA7ZTx1O2UrKyl7Y29uc3QgZT10aGlzLmdldEJsYW5rTGluZShvLkRFRkFVTFRfQVRUUl9EQVRBLCEwKTt2LnB1c2goZSl9di5sZW5ndGg+MCYmKHMucHVzaCh7c3RhcnQ6bitjLmxlbmd0aCtyLG5ld0xpbmVzOnZ9KSxyKz12Lmxlbmd0aCksYy5wdXNoKC4uLnYpO2xldCBwPV8ubGVuZ3RoLTEsZz1fW3BdOzA9PT1nJiYocC0tLGc9X1twXSk7bGV0IG09Yy5sZW5ndGgtdS0xLFM9ZDtmb3IoO20+PTA7KXtjb25zdCBlPU1hdGgubWluKFMsZyk7aWYodm9pZCAwPT09Y1twXSlicmVhaztpZihjW3BdLmNvcHlDZWxsc0Zyb20oY1ttXSxTLWUsZy1lLGUsITApLGctPWUsMD09PWcmJihwLS0sZz1fW3BdKSxTLT1lLDA9PT1TKXttLS07Y29uc3QgZT1NYXRoLm1heChtLDApO1M9KDAsYS5nZXRXcmFwcGVkTGluZVRyaW1tZWRMZW5ndGgpKGMsZSx0aGlzLl9jb2xzKX19Zm9yKGxldCB0PTA7dDxjLmxlbmd0aDt0KyspX1t0XTxlJiZjW3RdLnNldENlbGwoX1t0XSxpKTtsZXQgQz11LWY7Zm9yKDtDLS0gPjA7KTA9PT10aGlzLnliYXNlP3RoaXMueTx0LTE/KHRoaXMueSsrLHRoaXMubGluZXMucG9wKCkpOih0aGlzLnliYXNlKyssdGhpcy55ZGlzcCsrKTp0aGlzLnliYXNlPE1hdGgubWluKHRoaXMubGluZXMubWF4TGVuZ3RoLHRoaXMubGluZXMubGVuZ3RoK3IpLXQmJih0aGlzLnliYXNlPT09dGhpcy55ZGlzcCYmdGhpcy55ZGlzcCsrLHRoaXMueWJhc2UrKyk7dGhpcy5zYXZlZFk9TWF0aC5taW4odGhpcy5zYXZlZFkrdSx0aGlzLnliYXNlK3QtMSl9aWYocy5sZW5ndGg+MCl7Y29uc3QgZT1bXSx0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5saW5lcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLmxpbmVzLmdldChlKSk7Y29uc3QgaT10aGlzLmxpbmVzLmxlbmd0aDtsZXQgbj1pLTEsbz0wLGE9c1tvXTt0aGlzLmxpbmVzLmxlbmd0aD1NYXRoLm1pbih0aGlzLmxpbmVzLm1heExlbmd0aCx0aGlzLmxpbmVzLmxlbmd0aCtyKTtsZXQgaD0wO2ZvcihsZXQgYz1NYXRoLm1pbih0aGlzLmxpbmVzLm1heExlbmd0aC0xLGkrci0xKTtjPj0wO2MtLSlpZihhJiZhLnN0YXJ0Pm4raCl7Zm9yKGxldCBlPWEubmV3TGluZXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5saW5lcy5zZXQoYy0tLGEubmV3TGluZXNbZV0pO2MrKyxlLnB1c2goe2luZGV4Om4rMSxhbW91bnQ6YS5uZXdMaW5lcy5sZW5ndGh9KSxoKz1hLm5ld0xpbmVzLmxlbmd0aCxhPXNbKytvXX1lbHNlIHRoaXMubGluZXMuc2V0KGMsdFtuLS1dKTtsZXQgYz0wO2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKWVbdF0uaW5kZXgrPWMsdGhpcy5saW5lcy5vbkluc2VydEVtaXR0ZXIuZmlyZShlW3RdKSxjKz1lW3RdLmFtb3VudDtjb25zdCBsPU1hdGgubWF4KDAsaStyLXRoaXMubGluZXMubWF4TGVuZ3RoKTtsPjAmJnRoaXMubGluZXMub25UcmltRW1pdHRlci5maXJlKGwpfX10cmFuc2xhdGVCdWZmZXJMaW5lVG9TdHJpbmcoZSx0LGk9MCxzKXtjb25zdCByPXRoaXMubGluZXMuZ2V0KGUpO3JldHVybiByP3IudHJhbnNsYXRlVG9TdHJpbmcodCxpLHMpOlwiXCJ9Z2V0V3JhcHBlZFJhbmdlRm9yTGluZShlKXtsZXQgdD1lLGk9ZTtmb3IoO3Q+MCYmdGhpcy5saW5lcy5nZXQodCkuaXNXcmFwcGVkOyl0LS07Zm9yKDtpKzE8dGhpcy5saW5lcy5sZW5ndGgmJnRoaXMubGluZXMuZ2V0KGkrMSkuaXNXcmFwcGVkOylpKys7cmV0dXJue2ZpcnN0OnQsbGFzdDppfX1zZXR1cFRhYlN0b3BzKGUpe2ZvcihudWxsIT1lP3RoaXMudGFic1tlXXx8KGU9dGhpcy5wcmV2U3RvcChlKSk6KHRoaXMudGFicz17fSxlPTApO2U8dGhpcy5fY29scztlKz10aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLnRhYlN0b3BXaWR0aCl0aGlzLnRhYnNbZV09ITB9cHJldlN0b3AoZSl7Zm9yKG51bGw9PWUmJihlPXRoaXMueCk7IXRoaXMudGFic1stLWVdJiZlPjA7KTtyZXR1cm4gZT49dGhpcy5fY29scz90aGlzLl9jb2xzLTE6ZTwwPzA6ZX1uZXh0U3RvcChlKXtmb3IobnVsbD09ZSYmKGU9dGhpcy54KTshdGhpcy50YWJzWysrZV0mJmU8dGhpcy5fY29sczspO3JldHVybiBlPj10aGlzLl9jb2xzP3RoaXMuX2NvbHMtMTplPDA/MDplfWNsZWFyTWFya2VycyhlKXt0aGlzLl9pc0NsZWFyaW5nPSEwO2ZvcihsZXQgdD0wO3Q8dGhpcy5tYXJrZXJzLmxlbmd0aDt0KyspdGhpcy5tYXJrZXJzW3RdLmxpbmU9PT1lJiYodGhpcy5tYXJrZXJzW3RdLmRpc3Bvc2UoKSx0aGlzLm1hcmtlcnMuc3BsaWNlKHQtLSwxKSk7dGhpcy5faXNDbGVhcmluZz0hMX1jbGVhckFsbE1hcmtlcnMoKXt0aGlzLl9pc0NsZWFyaW5nPSEwO2ZvcihsZXQgZT0wO2U8dGhpcy5tYXJrZXJzLmxlbmd0aDtlKyspdGhpcy5tYXJrZXJzW2VdLmRpc3Bvc2UoKSx0aGlzLm1hcmtlcnMuc3BsaWNlKGUtLSwxKTt0aGlzLl9pc0NsZWFyaW5nPSExfWFkZE1hcmtlcihlKXtjb25zdCB0PW5ldyBsLk1hcmtlcihlKTtyZXR1cm4gdGhpcy5tYXJrZXJzLnB1c2godCksdC5yZWdpc3Rlcih0aGlzLmxpbmVzLm9uVHJpbSgoZT0+e3QubGluZS09ZSx0LmxpbmU8MCYmdC5kaXNwb3NlKCl9KSkpLHQucmVnaXN0ZXIodGhpcy5saW5lcy5vbkluc2VydCgoZT0+e3QubGluZT49ZS5pbmRleCYmKHQubGluZSs9ZS5hbW91bnQpfSkpKSx0LnJlZ2lzdGVyKHRoaXMubGluZXMub25EZWxldGUoKGU9Pnt0LmxpbmU+PWUuaW5kZXgmJnQubGluZTxlLmluZGV4K2UuYW1vdW50JiZ0LmRpc3Bvc2UoKSx0LmxpbmU+ZS5pbmRleCYmKHQubGluZS09ZS5hbW91bnQpfSkpKSx0LnJlZ2lzdGVyKHQub25EaXNwb3NlKCgoKT0+dGhpcy5fcmVtb3ZlTWFya2VyKHQpKSkpLHR9X3JlbW92ZU1hcmtlcihlKXt0aGlzLl9pc0NsZWFyaW5nfHx0aGlzLm1hcmtlcnMuc3BsaWNlKHRoaXMubWFya2Vycy5pbmRleE9mKGUpLDEpfX19LDg0Mzc6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnVmZmVyTGluZT10LkRFRkFVTFRfQVRUUl9EQVRBPXZvaWQgMDtjb25zdCBzPWkoMzczNCkscj1pKDUxMSksbj1pKDY0Myksbz1pKDQ4Mik7dC5ERUZBVUxUX0FUVFJfREFUQT1PYmplY3QuZnJlZXplKG5ldyBzLkF0dHJpYnV0ZURhdGEpO2xldCBhPTA7Y2xhc3MgaHtjb25zdHJ1Y3RvcihlLHQsaT0hMSl7dGhpcy5pc1dyYXBwZWQ9aSx0aGlzLl9jb21iaW5lZD17fSx0aGlzLl9leHRlbmRlZEF0dHJzPXt9LHRoaXMuX2RhdGE9bmV3IFVpbnQzMkFycmF5KDMqZSk7Y29uc3Qgcz10fHxyLkNlbGxEYXRhLmZyb21DaGFyRGF0YShbMCxuLk5VTExfQ0VMTF9DSEFSLG4uTlVMTF9DRUxMX1dJRFRILG4uTlVMTF9DRUxMX0NPREVdKTtmb3IobGV0IHQ9MDt0PGU7Kyt0KXRoaXMuc2V0Q2VsbCh0LHMpO3RoaXMubGVuZ3RoPWV9Z2V0KGUpe2NvbnN0IHQ9dGhpcy5fZGF0YVszKmUrMF0saT0yMDk3MTUxJnQ7cmV0dXJuW3RoaXMuX2RhdGFbMyplKzFdLDIwOTcxNTImdD90aGlzLl9jb21iaW5lZFtlXTppPygwLG8uc3RyaW5nRnJvbUNvZGVQb2ludCkoaSk6XCJcIix0Pj4yMiwyMDk3MTUyJnQ/dGhpcy5fY29tYmluZWRbZV0uY2hhckNvZGVBdCh0aGlzLl9jb21iaW5lZFtlXS5sZW5ndGgtMSk6aV19c2V0KGUsdCl7dGhpcy5fZGF0YVszKmUrMV09dFtuLkNIQVJfREFUQV9BVFRSX0lOREVYXSx0W24uQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLmxlbmd0aD4xPyh0aGlzLl9jb21iaW5lZFtlXT10WzFdLHRoaXMuX2RhdGFbMyplKzBdPTIwOTcxNTJ8ZXx0W24uQ0hBUl9EQVRBX1dJRFRIX0lOREVYXTw8MjIpOnRoaXMuX2RhdGFbMyplKzBdPXRbbi5DSEFSX0RBVEFfQ0hBUl9JTkRFWF0uY2hhckNvZGVBdCgwKXx0W24uQ0hBUl9EQVRBX1dJRFRIX0lOREVYXTw8MjJ9Z2V0V2lkdGgoZSl7cmV0dXJuIHRoaXMuX2RhdGFbMyplKzBdPj4yMn1oYXNXaWR0aChlKXtyZXR1cm4gMTI1ODI5MTImdGhpcy5fZGF0YVszKmUrMF19Z2V0RmcoZSl7cmV0dXJuIHRoaXMuX2RhdGFbMyplKzFdfWdldEJnKGUpe3JldHVybiB0aGlzLl9kYXRhWzMqZSsyXX1oYXNDb250ZW50KGUpe3JldHVybiA0MTk0MzAzJnRoaXMuX2RhdGFbMyplKzBdfWdldENvZGVQb2ludChlKXtjb25zdCB0PXRoaXMuX2RhdGFbMyplKzBdO3JldHVybiAyMDk3MTUyJnQ/dGhpcy5fY29tYmluZWRbZV0uY2hhckNvZGVBdCh0aGlzLl9jb21iaW5lZFtlXS5sZW5ndGgtMSk6MjA5NzE1MSZ0fWlzQ29tYmluZWQoZSl7cmV0dXJuIDIwOTcxNTImdGhpcy5fZGF0YVszKmUrMF19Z2V0U3RyaW5nKGUpe2NvbnN0IHQ9dGhpcy5fZGF0YVszKmUrMF07cmV0dXJuIDIwOTcxNTImdD90aGlzLl9jb21iaW5lZFtlXToyMDk3MTUxJnQ/KDAsby5zdHJpbmdGcm9tQ29kZVBvaW50KSgyMDk3MTUxJnQpOlwiXCJ9aXNQcm90ZWN0ZWQoZSl7cmV0dXJuIDUzNjg3MDkxMiZ0aGlzLl9kYXRhWzMqZSsyXX1sb2FkQ2VsbChlLHQpe3JldHVybiBhPTMqZSx0LmNvbnRlbnQ9dGhpcy5fZGF0YVthKzBdLHQuZmc9dGhpcy5fZGF0YVthKzFdLHQuYmc9dGhpcy5fZGF0YVthKzJdLDIwOTcxNTImdC5jb250ZW50JiYodC5jb21iaW5lZERhdGE9dGhpcy5fY29tYmluZWRbZV0pLDI2ODQzNTQ1NiZ0LmJnJiYodC5leHRlbmRlZD10aGlzLl9leHRlbmRlZEF0dHJzW2VdKSx0fXNldENlbGwoZSx0KXsyMDk3MTUyJnQuY29udGVudCYmKHRoaXMuX2NvbWJpbmVkW2VdPXQuY29tYmluZWREYXRhKSwyNjg0MzU0NTYmdC5iZyYmKHRoaXMuX2V4dGVuZGVkQXR0cnNbZV09dC5leHRlbmRlZCksdGhpcy5fZGF0YVszKmUrMF09dC5jb250ZW50LHRoaXMuX2RhdGFbMyplKzFdPXQuZmcsdGhpcy5fZGF0YVszKmUrMl09dC5iZ31zZXRDZWxsRnJvbUNvZGVwb2ludChlLHQsaSxzKXsyNjg0MzU0NTYmcy5iZyYmKHRoaXMuX2V4dGVuZGVkQXR0cnNbZV09cy5leHRlbmRlZCksdGhpcy5fZGF0YVszKmUrMF09dHxpPDwyMix0aGlzLl9kYXRhWzMqZSsxXT1zLmZnLHRoaXMuX2RhdGFbMyplKzJdPXMuYmd9YWRkQ29kZXBvaW50VG9DZWxsKGUsdCxpKXtsZXQgcz10aGlzLl9kYXRhWzMqZSswXTsyMDk3MTUyJnM/dGhpcy5fY29tYmluZWRbZV0rPSgwLG8uc3RyaW5nRnJvbUNvZGVQb2ludCkodCk6MjA5NzE1MSZzPyh0aGlzLl9jb21iaW5lZFtlXT0oMCxvLnN0cmluZ0Zyb21Db2RlUG9pbnQpKDIwOTcxNTEmcykrKDAsby5zdHJpbmdGcm9tQ29kZVBvaW50KSh0KSxzJj0tMjA5NzE1MixzfD0yMDk3MTUyKTpzPXR8MTw8MjIsaSYmKHMmPS0xMjU4MjkxMyxzfD1pPDwyMiksdGhpcy5fZGF0YVszKmUrMF09c31pbnNlcnRDZWxscyhlLHQsaSl7aWYoKGUlPXRoaXMubGVuZ3RoKSYmMj09PXRoaXMuZ2V0V2lkdGgoZS0xKSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVwb2ludChlLTEsMCwxLGkpLHQ8dGhpcy5sZW5ndGgtZSl7Y29uc3Qgcz1uZXcgci5DZWxsRGF0YTtmb3IobGV0IGk9dGhpcy5sZW5ndGgtZS10LTE7aT49MDstLWkpdGhpcy5zZXRDZWxsKGUrdCtpLHRoaXMubG9hZENlbGwoZStpLHMpKTtmb3IobGV0IHM9MDtzPHQ7KytzKXRoaXMuc2V0Q2VsbChlK3MsaSl9ZWxzZSBmb3IobGV0IHQ9ZTt0PHRoaXMubGVuZ3RoOysrdCl0aGlzLnNldENlbGwodCxpKTsyPT09dGhpcy5nZXRXaWR0aCh0aGlzLmxlbmd0aC0xKSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVwb2ludCh0aGlzLmxlbmd0aC0xLDAsMSxpKX1kZWxldGVDZWxscyhlLHQsaSl7aWYoZSU9dGhpcy5sZW5ndGgsdDx0aGlzLmxlbmd0aC1lKXtjb25zdCBzPW5ldyByLkNlbGxEYXRhO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGgtZS10OysraSl0aGlzLnNldENlbGwoZStpLHRoaXMubG9hZENlbGwoZSt0K2kscykpO2ZvcihsZXQgZT10aGlzLmxlbmd0aC10O2U8dGhpcy5sZW5ndGg7KytlKXRoaXMuc2V0Q2VsbChlLGkpfWVsc2UgZm9yKGxldCB0PWU7dDx0aGlzLmxlbmd0aDsrK3QpdGhpcy5zZXRDZWxsKHQsaSk7ZSYmMj09PXRoaXMuZ2V0V2lkdGgoZS0xKSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVwb2ludChlLTEsMCwxLGkpLDAhPT10aGlzLmdldFdpZHRoKGUpfHx0aGlzLmhhc0NvbnRlbnQoZSl8fHRoaXMuc2V0Q2VsbEZyb21Db2RlcG9pbnQoZSwwLDEsaSl9cmVwbGFjZUNlbGxzKGUsdCxpLHM9ITEpe2lmKHMpZm9yKGUmJjI9PT10aGlzLmdldFdpZHRoKGUtMSkmJiF0aGlzLmlzUHJvdGVjdGVkKGUtMSkmJnRoaXMuc2V0Q2VsbEZyb21Db2RlcG9pbnQoZS0xLDAsMSxpKSx0PHRoaXMubGVuZ3RoJiYyPT09dGhpcy5nZXRXaWR0aCh0LTEpJiYhdGhpcy5pc1Byb3RlY3RlZCh0KSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVwb2ludCh0LDAsMSxpKTtlPHQmJmU8dGhpcy5sZW5ndGg7KXRoaXMuaXNQcm90ZWN0ZWQoZSl8fHRoaXMuc2V0Q2VsbChlLGkpLGUrKztlbHNlIGZvcihlJiYyPT09dGhpcy5nZXRXaWR0aChlLTEpJiZ0aGlzLnNldENlbGxGcm9tQ29kZXBvaW50KGUtMSwwLDEsaSksdDx0aGlzLmxlbmd0aCYmMj09PXRoaXMuZ2V0V2lkdGgodC0xKSYmdGhpcy5zZXRDZWxsRnJvbUNvZGVwb2ludCh0LDAsMSxpKTtlPHQmJmU8dGhpcy5sZW5ndGg7KXRoaXMuc2V0Q2VsbChlKyssaSl9cmVzaXplKGUsdCl7aWYoZT09PXRoaXMubGVuZ3RoKXJldHVybiA0KnRoaXMuX2RhdGEubGVuZ3RoKjI8dGhpcy5fZGF0YS5idWZmZXIuYnl0ZUxlbmd0aDtjb25zdCBpPTMqZTtpZihlPnRoaXMubGVuZ3RoKXtpZih0aGlzLl9kYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoPj00KmkpdGhpcy5fZGF0YT1uZXcgVWludDMyQXJyYXkodGhpcy5fZGF0YS5idWZmZXIsMCxpKTtlbHNle2NvbnN0IGU9bmV3IFVpbnQzMkFycmF5KGkpO2Uuc2V0KHRoaXMuX2RhdGEpLHRoaXMuX2RhdGE9ZX1mb3IobGV0IGk9dGhpcy5sZW5ndGg7aTxlOysraSl0aGlzLnNldENlbGwoaSx0KX1lbHNle3RoaXMuX2RhdGE9dGhpcy5fZGF0YS5zdWJhcnJheSgwLGkpO2NvbnN0IHQ9T2JqZWN0LmtleXModGhpcy5fY29tYmluZWQpO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtjb25zdCBzPXBhcnNlSW50KHRbaV0sMTApO3M+PWUmJmRlbGV0ZSB0aGlzLl9jb21iaW5lZFtzXX1jb25zdCBzPU9iamVjdC5rZXlzKHRoaXMuX2V4dGVuZGVkQXR0cnMpO2ZvcihsZXQgdD0wO3Q8cy5sZW5ndGg7dCsrKXtjb25zdCBpPXBhcnNlSW50KHNbdF0sMTApO2k+PWUmJmRlbGV0ZSB0aGlzLl9leHRlbmRlZEF0dHJzW2ldfX1yZXR1cm4gdGhpcy5sZW5ndGg9ZSw0KmkqMjx0aGlzLl9kYXRhLmJ1ZmZlci5ieXRlTGVuZ3RofWNsZWFudXBNZW1vcnkoKXtpZig0KnRoaXMuX2RhdGEubGVuZ3RoKjI8dGhpcy5fZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDMyQXJyYXkodGhpcy5fZGF0YS5sZW5ndGgpO3JldHVybiBlLnNldCh0aGlzLl9kYXRhKSx0aGlzLl9kYXRhPWUsMX1yZXR1cm4gMH1maWxsKGUsdD0hMSl7aWYodClmb3IobGV0IHQ9MDt0PHRoaXMubGVuZ3RoOysrdCl0aGlzLmlzUHJvdGVjdGVkKHQpfHx0aGlzLnNldENlbGwodCxlKTtlbHNle3RoaXMuX2NvbWJpbmVkPXt9LHRoaXMuX2V4dGVuZGVkQXR0cnM9e307Zm9yKGxldCB0PTA7dDx0aGlzLmxlbmd0aDsrK3QpdGhpcy5zZXRDZWxsKHQsZSl9fWNvcHlGcm9tKGUpe3RoaXMubGVuZ3RoIT09ZS5sZW5ndGg/dGhpcy5fZGF0YT1uZXcgVWludDMyQXJyYXkoZS5fZGF0YSk6dGhpcy5fZGF0YS5zZXQoZS5fZGF0YSksdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fY29tYmluZWQ9e307Zm9yKGNvbnN0IHQgaW4gZS5fY29tYmluZWQpdGhpcy5fY29tYmluZWRbdF09ZS5fY29tYmluZWRbdF07dGhpcy5fZXh0ZW5kZWRBdHRycz17fTtmb3IoY29uc3QgdCBpbiBlLl9leHRlbmRlZEF0dHJzKXRoaXMuX2V4dGVuZGVkQXR0cnNbdF09ZS5fZXh0ZW5kZWRBdHRyc1t0XTt0aGlzLmlzV3JhcHBlZD1lLmlzV3JhcHBlZH1jbG9uZSgpe2NvbnN0IGU9bmV3IGgoMCk7ZS5fZGF0YT1uZXcgVWludDMyQXJyYXkodGhpcy5fZGF0YSksZS5sZW5ndGg9dGhpcy5sZW5ndGg7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fY29tYmluZWQpZS5fY29tYmluZWRbdF09dGhpcy5fY29tYmluZWRbdF07Zm9yKGNvbnN0IHQgaW4gdGhpcy5fZXh0ZW5kZWRBdHRycyllLl9leHRlbmRlZEF0dHJzW3RdPXRoaXMuX2V4dGVuZGVkQXR0cnNbdF07cmV0dXJuIGUuaXNXcmFwcGVkPXRoaXMuaXNXcmFwcGVkLGV9Z2V0VHJpbW1lZExlbmd0aCgpe2ZvcihsZXQgZT10aGlzLmxlbmd0aC0xO2U+PTA7LS1lKWlmKDQxOTQzMDMmdGhpcy5fZGF0YVszKmUrMF0pcmV0dXJuIGUrKHRoaXMuX2RhdGFbMyplKzBdPj4yMik7cmV0dXJuIDB9Z2V0Tm9CZ1RyaW1tZWRMZW5ndGgoKXtmb3IobGV0IGU9dGhpcy5sZW5ndGgtMTtlPj0wOy0tZSlpZig0MTk0MzAzJnRoaXMuX2RhdGFbMyplKzBdfHw1MDMzMTY0OCZ0aGlzLl9kYXRhWzMqZSsyXSlyZXR1cm4gZSsodGhpcy5fZGF0YVszKmUrMF0+PjIyKTtyZXR1cm4gMH1jb3B5Q2VsbHNGcm9tKGUsdCxpLHMscil7Y29uc3Qgbj1lLl9kYXRhO2lmKHIpZm9yKGxldCByPXMtMTtyPj0wO3ItLSl7Zm9yKGxldCBlPTA7ZTwzO2UrKyl0aGlzLl9kYXRhWzMqKGkrcikrZV09blszKih0K3IpK2VdOzI2ODQzNTQ1NiZuWzMqKHQrcikrMl0mJih0aGlzLl9leHRlbmRlZEF0dHJzW2krcl09ZS5fZXh0ZW5kZWRBdHRyc1t0K3JdKX1lbHNlIGZvcihsZXQgcj0wO3I8cztyKyspe2ZvcihsZXQgZT0wO2U8MztlKyspdGhpcy5fZGF0YVszKihpK3IpK2VdPW5bMyoodCtyKStlXTsyNjg0MzU0NTYmblszKih0K3IpKzJdJiYodGhpcy5fZXh0ZW5kZWRBdHRyc1tpK3JdPWUuX2V4dGVuZGVkQXR0cnNbdCtyXSl9Y29uc3Qgbz1PYmplY3Qua2V5cyhlLl9jb21iaW5lZCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2NvbnN0IHI9cGFyc2VJbnQob1tzXSwxMCk7cj49dCYmKHRoaXMuX2NvbWJpbmVkW3ItdCtpXT1lLl9jb21iaW5lZFtyXSl9fXRyYW5zbGF0ZVRvU3RyaW5nKGUsdCxpLHMpe3Q9dD8/MCxpPWk/P3RoaXMubGVuZ3RoLGUmJihpPU1hdGgubWluKGksdGhpcy5nZXRUcmltbWVkTGVuZ3RoKCkpKSxzJiYocy5sZW5ndGg9MCk7bGV0IHI9XCJcIjtmb3IoO3Q8aTspe2NvbnN0IGU9dGhpcy5fZGF0YVszKnQrMF0saT0yMDk3MTUxJmUsYT0yMDk3MTUyJmU/dGhpcy5fY29tYmluZWRbdF06aT8oMCxvLnN0cmluZ0Zyb21Db2RlUG9pbnQpKGkpOm4uV0hJVEVTUEFDRV9DRUxMX0NIQVI7aWYocis9YSxzKWZvcihsZXQgZT0wO2U8YS5sZW5ndGg7KytlKXMucHVzaCh0KTt0Kz1lPj4yMnx8MX1yZXR1cm4gcyYmcy5wdXNoKHQpLHJ9fXQuQnVmZmVyTGluZT1ofSw0ODQxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5nZXRSYW5nZUxlbmd0aD12b2lkIDAsdC5nZXRSYW5nZUxlbmd0aD1mdW5jdGlvbihlLHQpe2lmKGUuc3RhcnQueT5lLmVuZC55KXRocm93IG5ldyBFcnJvcihgQnVmZmVyIHJhbmdlIGVuZCAoJHtlLmVuZC54fSwgJHtlLmVuZC55fSkgY2Fubm90IGJlIGJlZm9yZSBzdGFydCAoJHtlLnN0YXJ0Lnh9LCAke2Uuc3RhcnQueX0pYCk7cmV0dXJuIHQqKGUuZW5kLnktZS5zdGFydC55KSsoZS5lbmQueC1lLnN0YXJ0LngrMSl9fSw0NjM0OihlLHQpPT57ZnVuY3Rpb24gaShlLHQsaSl7aWYodD09PWUubGVuZ3RoLTEpcmV0dXJuIGVbdF0uZ2V0VHJpbW1lZExlbmd0aCgpO2NvbnN0IHM9IWVbdF0uaGFzQ29udGVudChpLTEpJiYxPT09ZVt0XS5nZXRXaWR0aChpLTEpLHI9Mj09PWVbdCsxXS5nZXRXaWR0aCgwKTtyZXR1cm4gcyYmcj9pLTE6aX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldFdyYXBwZWRMaW5lVHJpbW1lZExlbmd0aD10LnJlZmxvd1NtYWxsZXJHZXROZXdMaW5lTGVuZ3Rocz10LnJlZmxvd0xhcmdlckFwcGx5TmV3TGF5b3V0PXQucmVmbG93TGFyZ2VyQ3JlYXRlTmV3TGF5b3V0PXQucmVmbG93TGFyZ2VyR2V0TGluZXNUb1JlbW92ZT12b2lkIDAsdC5yZWZsb3dMYXJnZXJHZXRMaW5lc1RvUmVtb3ZlPWZ1bmN0aW9uKGUsdCxzLHIsbil7Y29uc3Qgbz1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoLTE7YSsrKXtsZXQgaD1hLGM9ZS5nZXQoKytoKTtpZighYy5pc1dyYXBwZWQpY29udGludWU7Y29uc3QgbD1bZS5nZXQoYSldO2Zvcig7aDxlLmxlbmd0aCYmYy5pc1dyYXBwZWQ7KWwucHVzaChjKSxjPWUuZ2V0KCsraCk7aWYocj49YSYmcjxoKXthKz1sLmxlbmd0aC0xO2NvbnRpbnVlfWxldCBkPTAsXz1pKGwsZCx0KSx1PTEsZj0wO2Zvcig7dTxsLmxlbmd0aDspe2NvbnN0IGU9aShsLHUsdCkscj1lLWYsbz1zLV8sYT1NYXRoLm1pbihyLG8pO2xbZF0uY29weUNlbGxzRnJvbShsW3VdLGYsXyxhLCExKSxfKz1hLF89PT1zJiYoZCsrLF89MCksZis9YSxmPT09ZSYmKHUrKyxmPTApLDA9PT1fJiYwIT09ZCYmMj09PWxbZC0xXS5nZXRXaWR0aChzLTEpJiYobFtkXS5jb3B5Q2VsbHNGcm9tKGxbZC0xXSxzLTEsXysrLDEsITEpLGxbZC0xXS5zZXRDZWxsKHMtMSxuKSl9bFtkXS5yZXBsYWNlQ2VsbHMoXyxzLG4pO2xldCB2PTA7Zm9yKGxldCBlPWwubGVuZ3RoLTE7ZT4wJiYoZT5kfHwwPT09bFtlXS5nZXRUcmltbWVkTGVuZ3RoKCkpO2UtLSl2Kys7dj4wJiYoby5wdXNoKGErbC5sZW5ndGgtdiksby5wdXNoKHYpKSxhKz1sLmxlbmd0aC0xfXJldHVybiBvfSx0LnJlZmxvd0xhcmdlckNyZWF0ZU5ld0xheW91dD1mdW5jdGlvbihlLHQpe2NvbnN0IGk9W107bGV0IHM9MCxyPXRbc10sbj0wO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKWlmKHI9PT1vKXtjb25zdCBpPXRbKytzXTtlLm9uRGVsZXRlRW1pdHRlci5maXJlKHtpbmRleDpvLW4sYW1vdW50Oml9KSxvKz1pLTEsbis9aSxyPXRbKytzXX1lbHNlIGkucHVzaChvKTtyZXR1cm57bGF5b3V0OmksY291bnRSZW1vdmVkOm59fSx0LnJlZmxvd0xhcmdlckFwcGx5TmV3TGF5b3V0PWZ1bmN0aW9uKGUsdCl7Y29uc3QgaT1bXTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKylpLnB1c2goZS5nZXQodFtzXSkpO2ZvcihsZXQgdD0wO3Q8aS5sZW5ndGg7dCsrKWUuc2V0KHQsaVt0XSk7ZS5sZW5ndGg9dC5sZW5ndGh9LHQucmVmbG93U21hbGxlckdldE5ld0xpbmVMZW5ndGhzPWZ1bmN0aW9uKGUsdCxzKXtjb25zdCByPVtdLG49ZS5tYXAoKChzLHIpPT5pKGUscix0KSkpLnJlZHVjZSgoKGUsdCk9PmUrdCkpO2xldCBvPTAsYT0wLGg9MDtmb3IoO2g8bjspe2lmKG4taDxzKXtyLnB1c2gobi1oKTticmVha31vKz1zO2NvbnN0IGM9aShlLGEsdCk7bz5jJiYoby09YyxhKyspO2NvbnN0IGw9Mj09PWVbYV0uZ2V0V2lkdGgoby0xKTtsJiZvLS07Y29uc3QgZD1sP3MtMTpzO3IucHVzaChkKSxoKz1kfXJldHVybiByfSx0LmdldFdyYXBwZWRMaW5lVHJpbW1lZExlbmd0aD1pfSw1Mjk1OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1ZmZlclNldD12b2lkIDA7Y29uc3Qgcz1pKDg0NjApLHI9aSg4NDQpLG49aSg5MDkyKTtjbGFzcyBvIGV4dGVuZHMgci5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLl9vcHRpb25zU2VydmljZT1lLHRoaXMuX2J1ZmZlclNlcnZpY2U9dCx0aGlzLl9vbkJ1ZmZlckFjdGl2YXRlPXRoaXMucmVnaXN0ZXIobmV3IHMuRXZlbnRFbWl0dGVyKSx0aGlzLm9uQnVmZmVyQWN0aXZhdGU9dGhpcy5fb25CdWZmZXJBY3RpdmF0ZS5ldmVudCx0aGlzLnJlc2V0KCksdGhpcy5yZWdpc3Rlcih0aGlzLl9vcHRpb25zU2VydmljZS5vblNwZWNpZmljT3B0aW9uQ2hhbmdlKFwic2Nyb2xsYmFja1wiLCgoKT0+dGhpcy5yZXNpemUodGhpcy5fYnVmZmVyU2VydmljZS5jb2xzLHRoaXMuX2J1ZmZlclNlcnZpY2Uucm93cykpKSksdGhpcy5yZWdpc3Rlcih0aGlzLl9vcHRpb25zU2VydmljZS5vblNwZWNpZmljT3B0aW9uQ2hhbmdlKFwidGFiU3RvcFdpZHRoXCIsKCgpPT50aGlzLnNldHVwVGFiU3RvcHMoKSkpKX1yZXNldCgpe3RoaXMuX25vcm1hbD1uZXcgbi5CdWZmZXIoITAsdGhpcy5fb3B0aW9uc1NlcnZpY2UsdGhpcy5fYnVmZmVyU2VydmljZSksdGhpcy5fbm9ybWFsLmZpbGxWaWV3cG9ydFJvd3MoKSx0aGlzLl9hbHQ9bmV3IG4uQnVmZmVyKCExLHRoaXMuX29wdGlvbnNTZXJ2aWNlLHRoaXMuX2J1ZmZlclNlcnZpY2UpLHRoaXMuX2FjdGl2ZUJ1ZmZlcj10aGlzLl9ub3JtYWwsdGhpcy5fb25CdWZmZXJBY3RpdmF0ZS5maXJlKHthY3RpdmVCdWZmZXI6dGhpcy5fbm9ybWFsLGluYWN0aXZlQnVmZmVyOnRoaXMuX2FsdH0pLHRoaXMuc2V0dXBUYWJTdG9wcygpfWdldCBhbHQoKXtyZXR1cm4gdGhpcy5fYWx0fWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlQnVmZmVyfWdldCBub3JtYWwoKXtyZXR1cm4gdGhpcy5fbm9ybWFsfWFjdGl2YXRlTm9ybWFsQnVmZmVyKCl7dGhpcy5fYWN0aXZlQnVmZmVyIT09dGhpcy5fbm9ybWFsJiYodGhpcy5fbm9ybWFsLng9dGhpcy5fYWx0LngsdGhpcy5fbm9ybWFsLnk9dGhpcy5fYWx0LnksdGhpcy5fYWx0LmNsZWFyQWxsTWFya2VycygpLHRoaXMuX2FsdC5jbGVhcigpLHRoaXMuX2FjdGl2ZUJ1ZmZlcj10aGlzLl9ub3JtYWwsdGhpcy5fb25CdWZmZXJBY3RpdmF0ZS5maXJlKHthY3RpdmVCdWZmZXI6dGhpcy5fbm9ybWFsLGluYWN0aXZlQnVmZmVyOnRoaXMuX2FsdH0pKX1hY3RpdmF0ZUFsdEJ1ZmZlcihlKXt0aGlzLl9hY3RpdmVCdWZmZXIhPT10aGlzLl9hbHQmJih0aGlzLl9hbHQuZmlsbFZpZXdwb3J0Um93cyhlKSx0aGlzLl9hbHQueD10aGlzLl9ub3JtYWwueCx0aGlzLl9hbHQueT10aGlzLl9ub3JtYWwueSx0aGlzLl9hY3RpdmVCdWZmZXI9dGhpcy5fYWx0LHRoaXMuX29uQnVmZmVyQWN0aXZhdGUuZmlyZSh7YWN0aXZlQnVmZmVyOnRoaXMuX2FsdCxpbmFjdGl2ZUJ1ZmZlcjp0aGlzLl9ub3JtYWx9KSl9cmVzaXplKGUsdCl7dGhpcy5fbm9ybWFsLnJlc2l6ZShlLHQpLHRoaXMuX2FsdC5yZXNpemUoZSx0KSx0aGlzLnNldHVwVGFiU3RvcHMoZSl9c2V0dXBUYWJTdG9wcyhlKXt0aGlzLl9ub3JtYWwuc2V0dXBUYWJTdG9wcyhlKSx0aGlzLl9hbHQuc2V0dXBUYWJTdG9wcyhlKX19dC5CdWZmZXJTZXQ9b30sNTExOihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNlbGxEYXRhPXZvaWQgMDtjb25zdCBzPWkoNDgyKSxyPWkoNjQzKSxuPWkoMzczNCk7Y2xhc3MgbyBleHRlbmRzIG4uQXR0cmlidXRlRGF0YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb250ZW50PTAsdGhpcy5mZz0wLHRoaXMuYmc9MCx0aGlzLmV4dGVuZGVkPW5ldyBuLkV4dGVuZGVkQXR0cnMsdGhpcy5jb21iaW5lZERhdGE9XCJcIn1zdGF0aWMgZnJvbUNoYXJEYXRhKGUpe2NvbnN0IHQ9bmV3IG87cmV0dXJuIHQuc2V0RnJvbUNoYXJEYXRhKGUpLHR9aXNDb21iaW5lZCgpe3JldHVybiAyMDk3MTUyJnRoaXMuY29udGVudH1nZXRXaWR0aCgpe3JldHVybiB0aGlzLmNvbnRlbnQ+PjIyfWdldENoYXJzKCl7cmV0dXJuIDIwOTcxNTImdGhpcy5jb250ZW50P3RoaXMuY29tYmluZWREYXRhOjIwOTcxNTEmdGhpcy5jb250ZW50PygwLHMuc3RyaW5nRnJvbUNvZGVQb2ludCkoMjA5NzE1MSZ0aGlzLmNvbnRlbnQpOlwiXCJ9Z2V0Q29kZSgpe3JldHVybiB0aGlzLmlzQ29tYmluZWQoKT90aGlzLmNvbWJpbmVkRGF0YS5jaGFyQ29kZUF0KHRoaXMuY29tYmluZWREYXRhLmxlbmd0aC0xKToyMDk3MTUxJnRoaXMuY29udGVudH1zZXRGcm9tQ2hhckRhdGEoZSl7dGhpcy5mZz1lW3IuQ0hBUl9EQVRBX0FUVFJfSU5ERVhdLHRoaXMuYmc9MDtsZXQgdD0hMTtpZihlW3IuQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLmxlbmd0aD4yKXQ9ITA7ZWxzZSBpZigyPT09ZVtyLkNIQVJfREFUQV9DSEFSX0lOREVYXS5sZW5ndGgpe2NvbnN0IGk9ZVtyLkNIQVJfREFUQV9DSEFSX0lOREVYXS5jaGFyQ29kZUF0KDApO2lmKDU1Mjk2PD1pJiZpPD01NjMxOSl7Y29uc3Qgcz1lW3IuQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLmNoYXJDb2RlQXQoMSk7NTYzMjA8PXMmJnM8PTU3MzQzP3RoaXMuY29udGVudD0xMDI0KihpLTU1Mjk2KStzLTU2MzIwKzY1NTM2fGVbci5DSEFSX0RBVEFfV0lEVEhfSU5ERVhdPDwyMjp0PSEwfWVsc2UgdD0hMH1lbHNlIHRoaXMuY29udGVudD1lW3IuQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLmNoYXJDb2RlQXQoMCl8ZVtyLkNIQVJfREFUQV9XSURUSF9JTkRFWF08PDIyO3QmJih0aGlzLmNvbWJpbmVkRGF0YT1lW3IuQ0hBUl9EQVRBX0NIQVJfSU5ERVhdLHRoaXMuY29udGVudD0yMDk3MTUyfGVbci5DSEFSX0RBVEFfV0lEVEhfSU5ERVhdPDwyMil9Z2V0QXNDaGFyRGF0YSgpe3JldHVyblt0aGlzLmZnLHRoaXMuZ2V0Q2hhcnMoKSx0aGlzLmdldFdpZHRoKCksdGhpcy5nZXRDb2RlKCldfX10LkNlbGxEYXRhPW99LDY0MzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuV0hJVEVTUEFDRV9DRUxMX0NPREU9dC5XSElURVNQQUNFX0NFTExfV0lEVEg9dC5XSElURVNQQUNFX0NFTExfQ0hBUj10Lk5VTExfQ0VMTF9DT0RFPXQuTlVMTF9DRUxMX1dJRFRIPXQuTlVMTF9DRUxMX0NIQVI9dC5DSEFSX0RBVEFfQ09ERV9JTkRFWD10LkNIQVJfREFUQV9XSURUSF9JTkRFWD10LkNIQVJfREFUQV9DSEFSX0lOREVYPXQuQ0hBUl9EQVRBX0FUVFJfSU5ERVg9dC5ERUZBVUxUX0VYVD10LkRFRkFVTFRfQVRUUj10LkRFRkFVTFRfQ09MT1I9dm9pZCAwLHQuREVGQVVMVF9DT0xPUj0wLHQuREVGQVVMVF9BVFRSPTI1Nnx0LkRFRkFVTFRfQ09MT1I8PDksdC5ERUZBVUxUX0VYVD0wLHQuQ0hBUl9EQVRBX0FUVFJfSU5ERVg9MCx0LkNIQVJfREFUQV9DSEFSX0lOREVYPTEsdC5DSEFSX0RBVEFfV0lEVEhfSU5ERVg9Mix0LkNIQVJfREFUQV9DT0RFX0lOREVYPTMsdC5OVUxMX0NFTExfQ0hBUj1cIlwiLHQuTlVMTF9DRUxMX1dJRFRIPTEsdC5OVUxMX0NFTExfQ09ERT0wLHQuV0hJVEVTUEFDRV9DRUxMX0NIQVI9XCIgXCIsdC5XSElURVNQQUNFX0NFTExfV0lEVEg9MSx0LldISVRFU1BBQ0VfQ0VMTF9DT0RFPTMyfSw0ODYzOihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk1hcmtlcj12b2lkIDA7Y29uc3Qgcz1pKDg0NjApLHI9aSg4NDQpO2NsYXNzIG57Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfWNvbnN0cnVjdG9yKGUpe3RoaXMubGluZT1lLHRoaXMuaXNEaXNwb3NlZD0hMSx0aGlzLl9kaXNwb3NhYmxlcz1bXSx0aGlzLl9pZD1uLl9uZXh0SWQrKyx0aGlzLl9vbkRpc3Bvc2U9dGhpcy5yZWdpc3RlcihuZXcgcy5FdmVudEVtaXR0ZXIpLHRoaXMub25EaXNwb3NlPXRoaXMuX29uRGlzcG9zZS5ldmVudH1kaXNwb3NlKCl7dGhpcy5pc0Rpc3Bvc2VkfHwodGhpcy5pc0Rpc3Bvc2VkPSEwLHRoaXMubGluZT0tMSx0aGlzLl9vbkRpc3Bvc2UuZmlyZSgpLCgwLHIuZGlzcG9zZUFycmF5KSh0aGlzLl9kaXNwb3NhYmxlcyksdGhpcy5fZGlzcG9zYWJsZXMubGVuZ3RoPTApfXJlZ2lzdGVyKGUpe3JldHVybiB0aGlzLl9kaXNwb3NhYmxlcy5wdXNoKGUpLGV9fXQuTWFya2VyPW4sbi5fbmV4dElkPTF9LDcxMTY6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRFRkFVTFRfQ0hBUlNFVD10LkNIQVJTRVRTPXZvaWQgMCx0LkNIQVJTRVRTPXt9LHQuREVGQVVMVF9DSEFSU0VUPXQuQ0hBUlNFVFMuQix0LkNIQVJTRVRTWzBdPXtcImBcIjpcIuKXhlwiLGE6XCLilpJcIixiOlwi4pCJXCIsYzpcIuKQjFwiLGQ6XCLikI1cIixlOlwi4pCKXCIsZjpcIsKwXCIsZzpcIsKxXCIsaDpcIuKQpFwiLGk6XCLikItcIixqOlwi4pSYXCIsazpcIuKUkFwiLGw6XCLilIxcIixtOlwi4pSUXCIsbjpcIuKUvFwiLG86XCLijrpcIixwOlwi4o67XCIscTpcIuKUgFwiLHI6XCLijrxcIixzOlwi4o69XCIsdDpcIuKUnFwiLHU6XCLilKRcIix2Olwi4pS0XCIsdzpcIuKUrFwiLHg6XCLilIJcIix5Olwi4omkXCIsejpcIuKJpVwiLFwie1wiOlwiz4BcIixcInxcIjpcIuKJoFwiLFwifVwiOlwiwqNcIixcIn5cIjpcIsK3XCJ9LHQuQ0hBUlNFVFMuQT17XCIjXCI6XCLCo1wifSx0LkNIQVJTRVRTLkI9dm9pZCAwLHQuQ0hBUlNFVFNbNF09e1wiI1wiOlwiwqNcIixcIkBcIjpcIsK+XCIsXCJbXCI6XCJpalwiLFwiXFxcXFwiOlwiwr1cIixcIl1cIjpcInxcIixcIntcIjpcIsKoXCIsXCJ8XCI6XCJmXCIsXCJ9XCI6XCLCvFwiLFwiflwiOlwiwrRcIn0sdC5DSEFSU0VUUy5DPXQuQ0hBUlNFVFNbNV09e1wiW1wiOlwiw4RcIixcIlxcXFxcIjpcIsOWXCIsXCJdXCI6XCLDhVwiLFwiXlwiOlwiw5xcIixcImBcIjpcIsOpXCIsXCJ7XCI6XCLDpFwiLFwifFwiOlwiw7ZcIixcIn1cIjpcIsOlXCIsXCJ+XCI6XCLDvFwifSx0LkNIQVJTRVRTLlI9e1wiI1wiOlwiwqNcIixcIkBcIjpcIsOgXCIsXCJbXCI6XCLCsFwiLFwiXFxcXFwiOlwiw6dcIixcIl1cIjpcIsKnXCIsXCJ7XCI6XCLDqVwiLFwifFwiOlwiw7lcIixcIn1cIjpcIsOoXCIsXCJ+XCI6XCLCqFwifSx0LkNIQVJTRVRTLlE9e1wiQFwiOlwiw6BcIixcIltcIjpcIsOiXCIsXCJcXFxcXCI6XCLDp1wiLFwiXVwiOlwiw6pcIixcIl5cIjpcIsOuXCIsXCJgXCI6XCLDtFwiLFwie1wiOlwiw6lcIixcInxcIjpcIsO5XCIsXCJ9XCI6XCLDqFwiLFwiflwiOlwiw7tcIn0sdC5DSEFSU0VUUy5LPXtcIkBcIjpcIsKnXCIsXCJbXCI6XCLDhFwiLFwiXFxcXFwiOlwiw5ZcIixcIl1cIjpcIsOcXCIsXCJ7XCI6XCLDpFwiLFwifFwiOlwiw7ZcIixcIn1cIjpcIsO8XCIsXCJ+XCI6XCLDn1wifSx0LkNIQVJTRVRTLlk9e1wiI1wiOlwiwqNcIixcIkBcIjpcIsKnXCIsXCJbXCI6XCLCsFwiLFwiXFxcXFwiOlwiw6dcIixcIl1cIjpcIsOpXCIsXCJgXCI6XCLDuVwiLFwie1wiOlwiw6BcIixcInxcIjpcIsOyXCIsXCJ9XCI6XCLDqFwiLFwiflwiOlwiw6xcIn0sdC5DSEFSU0VUUy5FPXQuQ0hBUlNFVFNbNl09e1wiQFwiOlwiw4RcIixcIltcIjpcIsOGXCIsXCJcXFxcXCI6XCLDmFwiLFwiXVwiOlwiw4VcIixcIl5cIjpcIsOcXCIsXCJgXCI6XCLDpFwiLFwie1wiOlwiw6ZcIixcInxcIjpcIsO4XCIsXCJ9XCI6XCLDpVwiLFwiflwiOlwiw7xcIn0sdC5DSEFSU0VUUy5aPXtcIiNcIjpcIsKjXCIsXCJAXCI6XCLCp1wiLFwiW1wiOlwiwqFcIixcIlxcXFxcIjpcIsORXCIsXCJdXCI6XCLCv1wiLFwie1wiOlwiwrBcIixcInxcIjpcIsOxXCIsXCJ9XCI6XCLDp1wifSx0LkNIQVJTRVRTLkg9dC5DSEFSU0VUU1s3XT17XCJAXCI6XCLDiVwiLFwiW1wiOlwiw4RcIixcIlxcXFxcIjpcIsOWXCIsXCJdXCI6XCLDhVwiLFwiXlwiOlwiw5xcIixcImBcIjpcIsOpXCIsXCJ7XCI6XCLDpFwiLFwifFwiOlwiw7ZcIixcIn1cIjpcIsOlXCIsXCJ+XCI6XCLDvFwifSx0LkNIQVJTRVRTW1wiPVwiXT17XCIjXCI6XCLDuVwiLFwiQFwiOlwiw6BcIixcIltcIjpcIsOpXCIsXCJcXFxcXCI6XCLDp1wiLFwiXVwiOlwiw6pcIixcIl5cIjpcIsOuXCIsXzpcIsOoXCIsXCJgXCI6XCLDtFwiLFwie1wiOlwiw6RcIixcInxcIjpcIsO2XCIsXCJ9XCI6XCLDvFwiLFwiflwiOlwiw7tcIn19LDI1ODQ6KGUsdCk9Pnt2YXIgaSxzLHI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DMV9FU0NBUEVEPXQuQzE9dC5DMD12b2lkIDAsZnVuY3Rpb24oZSl7ZS5OVUw9XCJcXDBcIixlLlNPSD1cIlx1MDAwMVwiLGUuU1RYPVwiXHUwMDAyXCIsZS5FVFg9XCJcdTAwMDNcIixlLkVPVD1cIlx1MDAwNFwiLGUuRU5RPVwiXHUwMDA1XCIsZS5BQ0s9XCJcdTAwMDZcIixlLkJFTD1cIlx1MDAwN1wiLGUuQlM9XCJcXGJcIixlLkhUPVwiXFx0XCIsZS5MRj1cIlxcblwiLGUuVlQ9XCJcXHZcIixlLkZGPVwiXFxmXCIsZS5DUj1cIlxcclwiLGUuU089XCJcdTAwMGVcIixlLlNJPVwiXHUwMDBmXCIsZS5ETEU9XCJcdTAwMTBcIixlLkRDMT1cIlx1MDAxMVwiLGUuREMyPVwiXHUwMDEyXCIsZS5EQzM9XCJcdTAwMTNcIixlLkRDND1cIlx1MDAxNFwiLGUuTkFLPVwiXHUwMDE1XCIsZS5TWU49XCJcdTAwMTZcIixlLkVUQj1cIlx1MDAxN1wiLGUuQ0FOPVwiXHUwMDE4XCIsZS5FTT1cIlx1MDAxOVwiLGUuU1VCPVwiXHUwMDFhXCIsZS5FU0M9XCJcdTAwMWJcIixlLkZTPVwiXHUwMDFjXCIsZS5HUz1cIlx1MDAxZFwiLGUuUlM9XCJcdTAwMWVcIixlLlVTPVwiXHUwMDFmXCIsZS5TUD1cIiBcIixlLkRFTD1cIn9cIn0oaXx8KHQuQzA9aT17fSkpLGZ1bmN0aW9uKGUpe2UuUEFEPVwiwoBcIixlLkhPUD1cIsKBXCIsZS5CUEg9XCLCglwiLGUuTkJIPVwiwoNcIixlLklORD1cIsKEXCIsZS5ORUw9XCLChVwiLGUuU1NBPVwiwoZcIixlLkVTQT1cIsKHXCIsZS5IVFM9XCLCiFwiLGUuSFRKPVwiwolcIixlLlZUUz1cIsKKXCIsZS5QTEQ9XCLCi1wiLGUuUExVPVwiwoxcIixlLlJJPVwiwo1cIixlLlNTMj1cIsKOXCIsZS5TUzM9XCLCj1wiLGUuRENTPVwiwpBcIixlLlBVMT1cIsKRXCIsZS5QVTI9XCLCklwiLGUuU1RTPVwiwpNcIixlLkNDSD1cIsKUXCIsZS5NVz1cIsKVXCIsZS5TUEE9XCLCllwiLGUuRVBBPVwiwpdcIixlLlNPUz1cIsKYXCIsZS5TR0NJPVwiwplcIixlLlNDST1cIsKaXCIsZS5DU0k9XCLCm1wiLGUuU1Q9XCLCnFwiLGUuT1NDPVwiwp1cIixlLlBNPVwiwp5cIixlLkFQQz1cIsKfXCJ9KHN8fCh0LkMxPXM9e30pKSxmdW5jdGlvbihlKXtlLlNUPWAke2kuRVNDfVxcXFxgfShyfHwodC5DMV9FU0NBUEVEPXI9e30pKX0sNzM5OTooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5ldmFsdWF0ZUtleWJvYXJkRXZlbnQ9dm9pZCAwO2NvbnN0IHM9aSgyNTg0KSxyPXs0ODpbXCIwXCIsXCIpXCJdLDQ5OltcIjFcIixcIiFcIl0sNTA6W1wiMlwiLFwiQFwiXSw1MTpbXCIzXCIsXCIjXCJdLDUyOltcIjRcIixcIiRcIl0sNTM6W1wiNVwiLFwiJVwiXSw1NDpbXCI2XCIsXCJeXCJdLDU1OltcIjdcIixcIiZcIl0sNTY6W1wiOFwiLFwiKlwiXSw1NzpbXCI5XCIsXCIoXCJdLDE4NjpbXCI7XCIsXCI6XCJdLDE4NzpbXCI9XCIsXCIrXCJdLDE4ODpbXCIsXCIsXCI8XCJdLDE4OTpbXCItXCIsXCJfXCJdLDE5MDpbXCIuXCIsXCI+XCJdLDE5MTpbXCIvXCIsXCI/XCJdLDE5MjpbXCJgXCIsXCJ+XCJdLDIxOTpbXCJbXCIsXCJ7XCJdLDIyMDpbXCJcXFxcXCIsXCJ8XCJdLDIyMTpbXCJdXCIsXCJ9XCJdLDIyMjpbXCInXCIsJ1wiJ119O3QuZXZhbHVhdGVLZXlib2FyZEV2ZW50PWZ1bmN0aW9uKGUsdCxpLG4pe2NvbnN0IG89e3R5cGU6MCxjYW5jZWw6ITEsa2V5OnZvaWQgMH0sYT0oZS5zaGlmdEtleT8xOjApfChlLmFsdEtleT8yOjApfChlLmN0cmxLZXk/NDowKXwoZS5tZXRhS2V5Pzg6MCk7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAwOlwiVUlLZXlJbnB1dFVwQXJyb3dcIj09PWUua2V5P28ua2V5PXQ/cy5DMC5FU0MrXCJPQVwiOnMuQzAuRVNDK1wiW0FcIjpcIlVJS2V5SW5wdXRMZWZ0QXJyb3dcIj09PWUua2V5P28ua2V5PXQ/cy5DMC5FU0MrXCJPRFwiOnMuQzAuRVNDK1wiW0RcIjpcIlVJS2V5SW5wdXRSaWdodEFycm93XCI9PT1lLmtleT9vLmtleT10P3MuQzAuRVNDK1wiT0NcIjpzLkMwLkVTQytcIltDXCI6XCJVSUtleUlucHV0RG93bkFycm93XCI9PT1lLmtleSYmKG8ua2V5PXQ/cy5DMC5FU0MrXCJPQlwiOnMuQzAuRVNDK1wiW0JcIik7YnJlYWs7Y2FzZSA4Om8ua2V5PWUuY3RybEtleT9cIlxcYlwiOnMuQzAuREVMLGUuYWx0S2V5JiYoby5rZXk9cy5DMC5FU0Mrby5rZXkpO2JyZWFrO2Nhc2UgOTppZihlLnNoaWZ0S2V5KXtvLmtleT1zLkMwLkVTQytcIltaXCI7YnJlYWt9by5rZXk9cy5DMC5IVCxvLmNhbmNlbD0hMDticmVhaztjYXNlIDEzOm8ua2V5PWUuYWx0S2V5P3MuQzAuRVNDK3MuQzAuQ1I6cy5DMC5DUixvLmNhbmNlbD0hMDticmVhaztjYXNlIDI3Om8ua2V5PXMuQzAuRVNDLGUuYWx0S2V5JiYoby5rZXk9cy5DMC5FU0Mrcy5DMC5FU0MpLG8uY2FuY2VsPSEwO2JyZWFrO2Nhc2UgMzc6aWYoZS5tZXRhS2V5KWJyZWFrO2E/KG8ua2V5PXMuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJEXCIsby5rZXk9PT1zLkMwLkVTQytcIlsxOzNEXCImJihvLmtleT1zLkMwLkVTQysoaT9cImJcIjpcIlsxOzVEXCIpKSk6by5rZXk9dD9zLkMwLkVTQytcIk9EXCI6cy5DMC5FU0MrXCJbRFwiO2JyZWFrO2Nhc2UgMzk6aWYoZS5tZXRhS2V5KWJyZWFrO2E/KG8ua2V5PXMuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJDXCIsby5rZXk9PT1zLkMwLkVTQytcIlsxOzNDXCImJihvLmtleT1zLkMwLkVTQysoaT9cImZcIjpcIlsxOzVDXCIpKSk6by5rZXk9dD9zLkMwLkVTQytcIk9DXCI6cy5DMC5FU0MrXCJbQ1wiO2JyZWFrO2Nhc2UgMzg6aWYoZS5tZXRhS2V5KWJyZWFrO2E/KG8ua2V5PXMuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJBXCIsaXx8by5rZXkhPT1zLkMwLkVTQytcIlsxOzNBXCJ8fChvLmtleT1zLkMwLkVTQytcIlsxOzVBXCIpKTpvLmtleT10P3MuQzAuRVNDK1wiT0FcIjpzLkMwLkVTQytcIltBXCI7YnJlYWs7Y2FzZSA0MDppZihlLm1ldGFLZXkpYnJlYWs7YT8oby5rZXk9cy5DMC5FU0MrXCJbMTtcIisoYSsxKStcIkJcIixpfHxvLmtleSE9PXMuQzAuRVNDK1wiWzE7M0JcInx8KG8ua2V5PXMuQzAuRVNDK1wiWzE7NUJcIikpOm8ua2V5PXQ/cy5DMC5FU0MrXCJPQlwiOnMuQzAuRVNDK1wiW0JcIjticmVhaztjYXNlIDQ1OmUuc2hpZnRLZXl8fGUuY3RybEtleXx8KG8ua2V5PXMuQzAuRVNDK1wiWzJ+XCIpO2JyZWFrO2Nhc2UgNDY6by5rZXk9YT9zLkMwLkVTQytcIlszO1wiKyhhKzEpK1wiflwiOnMuQzAuRVNDK1wiWzN+XCI7YnJlYWs7Y2FzZSAzNjpvLmtleT1hP3MuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJIXCI6dD9zLkMwLkVTQytcIk9IXCI6cy5DMC5FU0MrXCJbSFwiO2JyZWFrO2Nhc2UgMzU6by5rZXk9YT9zLkMwLkVTQytcIlsxO1wiKyhhKzEpK1wiRlwiOnQ/cy5DMC5FU0MrXCJPRlwiOnMuQzAuRVNDK1wiW0ZcIjticmVhaztjYXNlIDMzOmUuc2hpZnRLZXk/by50eXBlPTI6ZS5jdHJsS2V5P28ua2V5PXMuQzAuRVNDK1wiWzU7XCIrKGErMSkrXCJ+XCI6by5rZXk9cy5DMC5FU0MrXCJbNX5cIjticmVhaztjYXNlIDM0OmUuc2hpZnRLZXk/by50eXBlPTM6ZS5jdHJsS2V5P28ua2V5PXMuQzAuRVNDK1wiWzY7XCIrKGErMSkrXCJ+XCI6by5rZXk9cy5DMC5FU0MrXCJbNn5cIjticmVhaztjYXNlIDExMjpvLmtleT1hP3MuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJQXCI6cy5DMC5FU0MrXCJPUFwiO2JyZWFrO2Nhc2UgMTEzOm8ua2V5PWE/cy5DMC5FU0MrXCJbMTtcIisoYSsxKStcIlFcIjpzLkMwLkVTQytcIk9RXCI7YnJlYWs7Y2FzZSAxMTQ6by5rZXk9YT9zLkMwLkVTQytcIlsxO1wiKyhhKzEpK1wiUlwiOnMuQzAuRVNDK1wiT1JcIjticmVhaztjYXNlIDExNTpvLmtleT1hP3MuQzAuRVNDK1wiWzE7XCIrKGErMSkrXCJTXCI6cy5DMC5FU0MrXCJPU1wiO2JyZWFrO2Nhc2UgMTE2Om8ua2V5PWE/cy5DMC5FU0MrXCJbMTU7XCIrKGErMSkrXCJ+XCI6cy5DMC5FU0MrXCJbMTV+XCI7YnJlYWs7Y2FzZSAxMTc6by5rZXk9YT9zLkMwLkVTQytcIlsxNztcIisoYSsxKStcIn5cIjpzLkMwLkVTQytcIlsxN35cIjticmVhaztjYXNlIDExODpvLmtleT1hP3MuQzAuRVNDK1wiWzE4O1wiKyhhKzEpK1wiflwiOnMuQzAuRVNDK1wiWzE4flwiO2JyZWFrO2Nhc2UgMTE5Om8ua2V5PWE/cy5DMC5FU0MrXCJbMTk7XCIrKGErMSkrXCJ+XCI6cy5DMC5FU0MrXCJbMTl+XCI7YnJlYWs7Y2FzZSAxMjA6by5rZXk9YT9zLkMwLkVTQytcIlsyMDtcIisoYSsxKStcIn5cIjpzLkMwLkVTQytcIlsyMH5cIjticmVhaztjYXNlIDEyMTpvLmtleT1hP3MuQzAuRVNDK1wiWzIxO1wiKyhhKzEpK1wiflwiOnMuQzAuRVNDK1wiWzIxflwiO2JyZWFrO2Nhc2UgMTIyOm8ua2V5PWE/cy5DMC5FU0MrXCJbMjM7XCIrKGErMSkrXCJ+XCI6cy5DMC5FU0MrXCJbMjN+XCI7YnJlYWs7Y2FzZSAxMjM6by5rZXk9YT9zLkMwLkVTQytcIlsyNDtcIisoYSsxKStcIn5cIjpzLkMwLkVTQytcIlsyNH5cIjticmVhaztkZWZhdWx0OmlmKCFlLmN0cmxLZXl8fGUuc2hpZnRLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpaWYoaSYmIW58fCFlLmFsdEtleXx8ZS5tZXRhS2V5KSFpfHxlLmFsdEtleXx8ZS5jdHJsS2V5fHxlLnNoaWZ0S2V5fHwhZS5tZXRhS2V5P2Uua2V5JiYhZS5jdHJsS2V5JiYhZS5hbHRLZXkmJiFlLm1ldGFLZXkmJmUua2V5Q29kZT49NDgmJjE9PT1lLmtleS5sZW5ndGg/by5rZXk9ZS5rZXk6ZS5rZXkmJmUuY3RybEtleSYmKFwiX1wiPT09ZS5rZXkmJihvLmtleT1zLkMwLlVTKSxcIkBcIj09PWUua2V5JiYoby5rZXk9cy5DMC5OVUwpKTo2NT09PWUua2V5Q29kZSYmKG8udHlwZT0xKTtlbHNle2NvbnN0IHQ9cltlLmtleUNvZGVdLGk9dD8uW2Uuc2hpZnRLZXk/MTowXTtpZihpKW8ua2V5PXMuQzAuRVNDK2k7ZWxzZSBpZihlLmtleUNvZGU+PTY1JiZlLmtleUNvZGU8PTkwKXtjb25zdCB0PWUuY3RybEtleT9lLmtleUNvZGUtNjQ6ZS5rZXlDb2RlKzMyO2xldCBpPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7ZS5zaGlmdEtleSYmKGk9aS50b1VwcGVyQ2FzZSgpKSxvLmtleT1zLkMwLkVTQytpfWVsc2UgaWYoMzI9PT1lLmtleUNvZGUpby5rZXk9cy5DMC5FU0MrKGUuY3RybEtleT9zLkMwLk5VTDpcIiBcIik7ZWxzZSBpZihcIkRlYWRcIj09PWUua2V5JiZlLmNvZGUuc3RhcnRzV2l0aChcIktleVwiKSl7bGV0IHQ9ZS5jb2RlLnNsaWNlKDMsNCk7ZS5zaGlmdEtleXx8KHQ9dC50b0xvd2VyQ2FzZSgpKSxvLmtleT1zLkMwLkVTQyt0LG8uY2FuY2VsPSEwfX1lbHNlIGUua2V5Q29kZT49NjUmJmUua2V5Q29kZTw9OTA/by5rZXk9U3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUtNjQpOjMyPT09ZS5rZXlDb2RlP28ua2V5PXMuQzAuTlVMOmUua2V5Q29kZT49NTEmJmUua2V5Q29kZTw9NTU/by5rZXk9U3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUtNTErMjcpOjU2PT09ZS5rZXlDb2RlP28ua2V5PXMuQzAuREVMOjIxOT09PWUua2V5Q29kZT9vLmtleT1zLkMwLkVTQzoyMjA9PT1lLmtleUNvZGU/by5rZXk9cy5DMC5GUzoyMjE9PT1lLmtleUNvZGUmJihvLmtleT1zLkMwLkdTKX1yZXR1cm4gb319LDQ4MjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuVXRmOFRvVXRmMzI9dC5TdHJpbmdUb1V0ZjMyPXQudXRmMzJUb1N0cmluZz10LnN0cmluZ0Zyb21Db2RlUG9pbnQ9dm9pZCAwLHQuc3RyaW5nRnJvbUNvZGVQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gZT42NTUzNT8oZS09NjU1MzYsU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZT4+MTApKStTdHJpbmcuZnJvbUNoYXJDb2RlKGUlMTAyNCs1NjMyMCkpOlN0cmluZy5mcm9tQ2hhckNvZGUoZSl9LHQudXRmMzJUb1N0cmluZz1mdW5jdGlvbihlLHQ9MCxpPWUubGVuZ3RoKXtsZXQgcz1cIlwiO2ZvcihsZXQgcj10O3I8aTsrK3Ipe2xldCB0PWVbcl07dD42NTUzNT8odC09NjU1MzYscys9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisodD4+MTApKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQlMTAyNCs1NjMyMCkpOnMrPVN0cmluZy5mcm9tQ2hhckNvZGUodCl9cmV0dXJuIHN9LHQuU3RyaW5nVG9VdGYzMj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ludGVyaW09MH1jbGVhcigpe3RoaXMuX2ludGVyaW09MH1kZWNvZGUoZSx0KXtjb25zdCBpPWUubGVuZ3RoO2lmKCFpKXJldHVybiAwO2xldCBzPTAscj0wO2lmKHRoaXMuX2ludGVyaW0pe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHIrKyk7NTYzMjA8PWkmJmk8PTU3MzQzP3RbcysrXT0xMDI0Kih0aGlzLl9pbnRlcmltLTU1Mjk2KStpLTU2MzIwKzY1NTM2Oih0W3MrK109dGhpcy5faW50ZXJpbSx0W3MrK109aSksdGhpcy5faW50ZXJpbT0wfWZvcihsZXQgbj1yO248aTsrK24pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKDU1Mjk2PD1yJiZyPD01NjMxOSl7aWYoKytuPj1pKXJldHVybiB0aGlzLl9pbnRlcmltPXIscztjb25zdCBvPWUuY2hhckNvZGVBdChuKTs1NjMyMDw9byYmbzw9NTczNDM/dFtzKytdPTEwMjQqKHItNTUyOTYpK28tNTYzMjArNjU1MzY6KHRbcysrXT1yLHRbcysrXT1vKX1lbHNlIDY1Mjc5IT09ciYmKHRbcysrXT1yKX1yZXR1cm4gc319LHQuVXRmOFRvVXRmMzI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmludGVyaW09bmV3IFVpbnQ4QXJyYXkoMyl9Y2xlYXIoKXt0aGlzLmludGVyaW0uZmlsbCgwKX1kZWNvZGUoZSx0KXtjb25zdCBpPWUubGVuZ3RoO2lmKCFpKXJldHVybiAwO2xldCBzLHIsbixvLGE9MCxoPTAsYz0wO2lmKHRoaXMuaW50ZXJpbVswXSl7bGV0IHM9ITEscj10aGlzLmludGVyaW1bMF07ciY9MTkyPT0oMjI0JnIpPzMxOjIyND09KDI0MCZyKT8xNTo3O2xldCBuLG89MDtmb3IoOyhuPTYzJnRoaXMuaW50ZXJpbVsrK29dKSYmbzw0OylyPDw9NixyfD1uO2NvbnN0IGg9MTkyPT0oMjI0JnRoaXMuaW50ZXJpbVswXSk/MjoyMjQ9PSgyNDAmdGhpcy5pbnRlcmltWzBdKT8zOjQsbD1oLW87Zm9yKDtjPGw7KXtpZihjPj1pKXJldHVybiAwO2lmKG49ZVtjKytdLDEyOCE9KDE5MiZuKSl7Yy0tLHM9ITA7YnJlYWt9dGhpcy5pbnRlcmltW28rK109bixyPDw9NixyfD02MyZufXN8fCgyPT09aD9yPDEyOD9jLS06dFthKytdPXI6Mz09PWg/cjwyMDQ4fHxyPj01NTI5NiYmcjw9NTczNDN8fDY1Mjc5PT09cnx8KHRbYSsrXT1yKTpyPDY1NTM2fHxyPjExMTQxMTF8fCh0W2ErK109cikpLHRoaXMuaW50ZXJpbS5maWxsKDApfWNvbnN0IGw9aS00O2xldCBkPWM7Zm9yKDtkPGk7KXtmb3IoOyEoIShkPGwpfHwxMjgmKHM9ZVtkXSl8fDEyOCYocj1lW2QrMV0pfHwxMjgmKG49ZVtkKzJdKXx8MTI4JihvPWVbZCszXSkpOyl0W2ErK109cyx0W2ErK109cix0W2ErK109bix0W2ErK109byxkKz00O2lmKHM9ZVtkKytdLHM8MTI4KXRbYSsrXT1zO2Vsc2UgaWYoMTkyPT0oMjI0JnMpKXtpZihkPj1pKXJldHVybiB0aGlzLmludGVyaW1bMF09cyxhO2lmKHI9ZVtkKytdLDEyOCE9KDE5MiZyKSl7ZC0tO2NvbnRpbnVlfWlmKGg9KDMxJnMpPDw2fDYzJnIsaDwxMjgpe2QtLTtjb250aW51ZX10W2ErK109aH1lbHNlIGlmKDIyND09KDI0MCZzKSl7aWYoZD49aSlyZXR1cm4gdGhpcy5pbnRlcmltWzBdPXMsYTtpZihyPWVbZCsrXSwxMjghPSgxOTImcikpe2QtLTtjb250aW51ZX1pZihkPj1pKXJldHVybiB0aGlzLmludGVyaW1bMF09cyx0aGlzLmludGVyaW1bMV09cixhO2lmKG49ZVtkKytdLDEyOCE9KDE5MiZuKSl7ZC0tO2NvbnRpbnVlfWlmKGg9KDE1JnMpPDwxMnwoNjMmcik8PDZ8NjMmbixoPDIwNDh8fGg+PTU1Mjk2JiZoPD01NzM0M3x8NjUyNzk9PT1oKWNvbnRpbnVlO3RbYSsrXT1ofWVsc2UgaWYoMjQwPT0oMjQ4JnMpKXtpZihkPj1pKXJldHVybiB0aGlzLmludGVyaW1bMF09cyxhO2lmKHI9ZVtkKytdLDEyOCE9KDE5MiZyKSl7ZC0tO2NvbnRpbnVlfWlmKGQ+PWkpcmV0dXJuIHRoaXMuaW50ZXJpbVswXT1zLHRoaXMuaW50ZXJpbVsxXT1yLGE7aWYobj1lW2QrK10sMTI4IT0oMTkyJm4pKXtkLS07Y29udGludWV9aWYoZD49aSlyZXR1cm4gdGhpcy5pbnRlcmltWzBdPXMsdGhpcy5pbnRlcmltWzFdPXIsdGhpcy5pbnRlcmltWzJdPW4sYTtpZihvPWVbZCsrXSwxMjghPSgxOTImbykpe2QtLTtjb250aW51ZX1pZihoPSg3JnMpPDwxOHwoNjMmcik8PDEyfCg2MyZuKTw8Nnw2MyZvLGg8NjU1MzZ8fGg+MTExNDExMSljb250aW51ZTt0W2ErK109aH19cmV0dXJuIGF9fX0sMjI1OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVuaWNvZGVWNj12b2lkIDA7Y29uc3Qgcz1pKDE0ODApLHI9W1s3NjgsODc5XSxbMTE1NSwxMTU4XSxbMTE2MCwxMTYxXSxbMTQyNSwxNDY5XSxbMTQ3MSwxNDcxXSxbMTQ3MywxNDc0XSxbMTQ3NiwxNDc3XSxbMTQ3OSwxNDc5XSxbMTUzNiwxNTM5XSxbMTU1MiwxNTU3XSxbMTYxMSwxNjMwXSxbMTY0OCwxNjQ4XSxbMTc1MCwxNzY0XSxbMTc2NywxNzY4XSxbMTc3MCwxNzczXSxbMTgwNywxODA3XSxbMTgwOSwxODA5XSxbMTg0MCwxODY2XSxbMTk1OCwxOTY4XSxbMjAyNywyMDM1XSxbMjMwNSwyMzA2XSxbMjM2NCwyMzY0XSxbMjM2OSwyMzc2XSxbMjM4MSwyMzgxXSxbMjM4NSwyMzg4XSxbMjQwMiwyNDAzXSxbMjQzMywyNDMzXSxbMjQ5MiwyNDkyXSxbMjQ5NywyNTAwXSxbMjUwOSwyNTA5XSxbMjUzMCwyNTMxXSxbMjU2MSwyNTYyXSxbMjYyMCwyNjIwXSxbMjYyNSwyNjI2XSxbMjYzMSwyNjMyXSxbMjYzNSwyNjM3XSxbMjY3MiwyNjczXSxbMjY4OSwyNjkwXSxbMjc0OCwyNzQ4XSxbMjc1MywyNzU3XSxbMjc1OSwyNzYwXSxbMjc2NSwyNzY1XSxbMjc4NiwyNzg3XSxbMjgxNywyODE3XSxbMjg3NiwyODc2XSxbMjg3OSwyODc5XSxbMjg4MSwyODgzXSxbMjg5MywyODkzXSxbMjkwMiwyOTAyXSxbMjk0NiwyOTQ2XSxbMzAwOCwzMDA4XSxbMzAyMSwzMDIxXSxbMzEzNCwzMTM2XSxbMzE0MiwzMTQ0XSxbMzE0NiwzMTQ5XSxbMzE1NywzMTU4XSxbMzI2MCwzMjYwXSxbMzI2MywzMjYzXSxbMzI3MCwzMjcwXSxbMzI3NiwzMjc3XSxbMzI5OCwzMjk5XSxbMzM5MywzMzk1XSxbMzQwNSwzNDA1XSxbMzUzMCwzNTMwXSxbMzUzOCwzNTQwXSxbMzU0MiwzNTQyXSxbMzYzMywzNjMzXSxbMzYzNiwzNjQyXSxbMzY1NSwzNjYyXSxbMzc2MSwzNzYxXSxbMzc2NCwzNzY5XSxbMzc3MSwzNzcyXSxbMzc4NCwzNzg5XSxbMzg2NCwzODY1XSxbMzg5MywzODkzXSxbMzg5NSwzODk1XSxbMzg5NywzODk3XSxbMzk1MywzOTY2XSxbMzk2OCwzOTcyXSxbMzk3NCwzOTc1XSxbMzk4NCwzOTkxXSxbMzk5Myw0MDI4XSxbNDAzOCw0MDM4XSxbNDE0MSw0MTQ0XSxbNDE0Niw0MTQ2XSxbNDE1MCw0MTUxXSxbNDE1Myw0MTUzXSxbNDE4NCw0MTg1XSxbNDQ0OCw0NjA3XSxbNDk1OSw0OTU5XSxbNTkwNiw1OTA4XSxbNTkzOCw1OTQwXSxbNTk3MCw1OTcxXSxbNjAwMiw2MDAzXSxbNjA2OCw2MDY5XSxbNjA3MSw2MDc3XSxbNjA4Niw2MDg2XSxbNjA4OSw2MDk5XSxbNjEwOSw2MTA5XSxbNjE1NSw2MTU3XSxbNjMxMyw2MzEzXSxbNjQzMiw2NDM0XSxbNjQzOSw2NDQwXSxbNjQ1MCw2NDUwXSxbNjQ1Nyw2NDU5XSxbNjY3OSw2NjgwXSxbNjkxMiw2OTE1XSxbNjk2NCw2OTY0XSxbNjk2Niw2OTcwXSxbNjk3Miw2OTcyXSxbNjk3OCw2OTc4XSxbNzAxOSw3MDI3XSxbNzYxNiw3NjI2XSxbNzY3OCw3Njc5XSxbODIwMyw4MjA3XSxbODIzNCw4MjM4XSxbODI4OCw4MjkxXSxbODI5OCw4MzAzXSxbODQwMCw4NDMxXSxbMTIzMzAsMTIzMzVdLFsxMjQ0MSwxMjQ0Ml0sWzQzMDE0LDQzMDE0XSxbNDMwMTksNDMwMTldLFs0MzA0NSw0MzA0Nl0sWzY0Mjg2LDY0Mjg2XSxbNjUwMjQsNjUwMzldLFs2NTA1Niw2NTA1OV0sWzY1Mjc5LDY1Mjc5XSxbNjU1MjksNjU1MzFdXSxuPVtbNjgwOTcsNjgwOTldLFs2ODEwMSw2ODEwMl0sWzY4MTA4LDY4MTExXSxbNjgxNTIsNjgxNTRdLFs2ODE1OSw2ODE1OV0sWzExOTE0MywxMTkxNDVdLFsxMTkxNTUsMTE5MTcwXSxbMTE5MTczLDExOTE3OV0sWzExOTIxMCwxMTkyMTNdLFsxMTkzNjIsMTE5MzY0XSxbOTE3NTA1LDkxNzUwNV0sWzkxNzUzNiw5MTc2MzFdLFs5MTc3NjAsOTE3OTk5XV07bGV0IG87dC5Vbmljb2RlVjY9Y2xhc3N7Y29uc3RydWN0b3IoKXtpZih0aGlzLnZlcnNpb249XCI2XCIsIW8pe289bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLG8uZmlsbCgxKSxvWzBdPTAsby5maWxsKDAsMSwzMiksby5maWxsKDAsMTI3LDE2MCksby5maWxsKDIsNDM1Miw0NDQ4KSxvWzkwMDFdPTIsb1s5MDAyXT0yLG8uZmlsbCgyLDExOTA0LDQyMTkyKSxvWzEyMzUxXT0xLG8uZmlsbCgyLDQ0MDMyLDU1MjA0KSxvLmZpbGwoMiw2Mzc0NCw2NDI1Niksby5maWxsKDIsNjUwNDAsNjUwNTApLG8uZmlsbCgyLDY1MDcyLDY1MTM2KSxvLmZpbGwoMiw2NTI4MCw2NTM3Nyksby5maWxsKDIsNjU1MDQsNjU1MTEpO2ZvcihsZXQgZT0wO2U8ci5sZW5ndGg7KytlKW8uZmlsbCgwLHJbZV1bMF0scltlXVsxXSsxKX19d2N3aWR0aChlKXtyZXR1cm4gZTwzMj8wOmU8MTI3PzE6ZTw2NTUzNj9vW2VdOmZ1bmN0aW9uKGUsdCl7bGV0IGkscz0wLHI9dC5sZW5ndGgtMTtpZihlPHRbMF1bMF18fGU+dFtyXVsxXSlyZXR1cm4hMTtmb3IoO3I+PXM7KWlmKGk9cytyPj4xLGU+dFtpXVsxXSlzPWkrMTtlbHNle2lmKCEoZTx0W2ldWzBdKSlyZXR1cm4hMDtyPWktMX1yZXR1cm4hMX0oZSxuKT8wOmU+PTEzMTA3MiYmZTw9MTk2NjA1fHxlPj0xOTY2MDgmJmU8PTI2MjE0MT8yOjF9Y2hhclByb3BlcnRpZXMoZSx0KXtsZXQgaT10aGlzLndjd2lkdGgoZSkscj0wPT09aSYmMCE9PXQ7aWYocil7Y29uc3QgZT1zLlVuaWNvZGVTZXJ2aWNlLmV4dHJhY3RXaWR0aCh0KTswPT09ZT9yPSExOmU+aSYmKGk9ZSl9cmV0dXJuIHMuVW5pY29kZVNlcnZpY2UuY3JlYXRlUHJvcGVydHlWYWx1ZSgwLGkscil9fX0sNTk4MTooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Xcml0ZUJ1ZmZlcj12b2lkIDA7Y29uc3Qgcz1pKDg0NjApLHI9aSg4NDQpO2NsYXNzIG4gZXh0ZW5kcyByLkRpc3Bvc2FibGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9hY3Rpb249ZSx0aGlzLl93cml0ZUJ1ZmZlcj1bXSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fcGVuZGluZ0RhdGE9MCx0aGlzLl9idWZmZXJPZmZzZXQ9MCx0aGlzLl9pc1N5bmNXcml0aW5nPSExLHRoaXMuX3N5bmNDYWxscz0wLHRoaXMuX2RpZFVzZXJJbnB1dD0hMSx0aGlzLl9vbldyaXRlUGFyc2VkPXRoaXMucmVnaXN0ZXIobmV3IHMuRXZlbnRFbWl0dGVyKSx0aGlzLm9uV3JpdGVQYXJzZWQ9dGhpcy5fb25Xcml0ZVBhcnNlZC5ldmVudH1oYW5kbGVVc2VySW5wdXQoKXt0aGlzLl9kaWRVc2VySW5wdXQ9ITB9d3JpdGVTeW5jKGUsdCl7aWYodm9pZCAwIT09dCYmdGhpcy5fc3luY0NhbGxzPnQpcmV0dXJuIHZvaWQodGhpcy5fc3luY0NhbGxzPTApO2lmKHRoaXMuX3BlbmRpbmdEYXRhKz1lLmxlbmd0aCx0aGlzLl93cml0ZUJ1ZmZlci5wdXNoKGUpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHZvaWQgMCksdGhpcy5fc3luY0NhbGxzKyssdGhpcy5faXNTeW5jV3JpdGluZylyZXR1cm47bGV0IGk7Zm9yKHRoaXMuX2lzU3luY1dyaXRpbmc9ITA7aT10aGlzLl93cml0ZUJ1ZmZlci5zaGlmdCgpOyl7dGhpcy5fYWN0aW9uKGkpO2NvbnN0IGU9dGhpcy5fY2FsbGJhY2tzLnNoaWZ0KCk7ZSYmZSgpfXRoaXMuX3BlbmRpbmdEYXRhPTAsdGhpcy5fYnVmZmVyT2Zmc2V0PTIxNDc0ODM2NDcsdGhpcy5faXNTeW5jV3JpdGluZz0hMSx0aGlzLl9zeW5jQ2FsbHM9MH13cml0ZShlLHQpe2lmKHRoaXMuX3BlbmRpbmdEYXRhPjVlNyl0aHJvdyBuZXcgRXJyb3IoXCJ3cml0ZSBkYXRhIGRpc2NhcmRlZCwgdXNlIGZsb3cgY29udHJvbCB0byBhdm9pZCBsb3NpbmcgZGF0YVwiKTtpZighdGhpcy5fd3JpdGVCdWZmZXIubGVuZ3RoKXtpZih0aGlzLl9idWZmZXJPZmZzZXQ9MCx0aGlzLl9kaWRVc2VySW5wdXQpcmV0dXJuIHRoaXMuX2RpZFVzZXJJbnB1dD0hMSx0aGlzLl9wZW5kaW5nRGF0YSs9ZS5sZW5ndGgsdGhpcy5fd3JpdGVCdWZmZXIucHVzaChlKSx0aGlzLl9jYWxsYmFja3MucHVzaCh0KSx2b2lkIHRoaXMuX2lubmVyV3JpdGUoKTtzZXRUaW1lb3V0KCgoKT0+dGhpcy5faW5uZXJXcml0ZSgpKSl9dGhpcy5fcGVuZGluZ0RhdGErPWUubGVuZ3RoLHRoaXMuX3dyaXRlQnVmZmVyLnB1c2goZSksdGhpcy5fY2FsbGJhY2tzLnB1c2godCl9X2lubmVyV3JpdGUoZT0wLHQ9ITApe2NvbnN0IGk9ZXx8RGF0ZS5ub3coKTtmb3IoO3RoaXMuX3dyaXRlQnVmZmVyLmxlbmd0aD50aGlzLl9idWZmZXJPZmZzZXQ7KXtjb25zdCBlPXRoaXMuX3dyaXRlQnVmZmVyW3RoaXMuX2J1ZmZlck9mZnNldF0scz10aGlzLl9hY3Rpb24oZSx0KTtpZihzKXtjb25zdCBlPWU9PkRhdGUubm93KCktaT49MTI/c2V0VGltZW91dCgoKCk9PnRoaXMuX2lubmVyV3JpdGUoMCxlKSkpOnRoaXMuX2lubmVyV3JpdGUoaSxlKTtyZXR1cm4gdm9pZCBzLmNhdGNoKChlPT4ocXVldWVNaWNyb3Rhc2soKCgpPT57dGhyb3cgZX0pKSxQcm9taXNlLnJlc29sdmUoITEpKSkpLnRoZW4oZSl9Y29uc3Qgcj10aGlzLl9jYWxsYmFja3NbdGhpcy5fYnVmZmVyT2Zmc2V0XTtpZihyJiZyKCksdGhpcy5fYnVmZmVyT2Zmc2V0KyssdGhpcy5fcGVuZGluZ0RhdGEtPWUubGVuZ3RoLERhdGUubm93KCktaT49MTIpYnJlYWt9dGhpcy5fd3JpdGVCdWZmZXIubGVuZ3RoPnRoaXMuX2J1ZmZlck9mZnNldD8odGhpcy5fYnVmZmVyT2Zmc2V0PjUwJiYodGhpcy5fd3JpdGVCdWZmZXI9dGhpcy5fd3JpdGVCdWZmZXIuc2xpY2UodGhpcy5fYnVmZmVyT2Zmc2V0KSx0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLnNsaWNlKHRoaXMuX2J1ZmZlck9mZnNldCksdGhpcy5fYnVmZmVyT2Zmc2V0PTApLHNldFRpbWVvdXQoKCgpPT50aGlzLl9pbm5lcldyaXRlKCkpKSk6KHRoaXMuX3dyaXRlQnVmZmVyLmxlbmd0aD0wLHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLl9wZW5kaW5nRGF0YT0wLHRoaXMuX2J1ZmZlck9mZnNldD0wKSx0aGlzLl9vbldyaXRlUGFyc2VkLmZpcmUoKX19dC5Xcml0ZUJ1ZmZlcj1ufSw1OTQxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC50b1JnYlN0cmluZz10LnBhcnNlQ29sb3I9dm9pZCAwO2NvbnN0IGk9L14oW1xcZGEtZl0pXFwvKFtcXGRhLWZdKVxcLyhbXFxkYS1mXSkkfF4oW1xcZGEtZl17Mn0pXFwvKFtcXGRhLWZdezJ9KVxcLyhbXFxkYS1mXXsyfSkkfF4oW1xcZGEtZl17M30pXFwvKFtcXGRhLWZdezN9KVxcLyhbXFxkYS1mXXszfSkkfF4oW1xcZGEtZl17NH0pXFwvKFtcXGRhLWZdezR9KVxcLyhbXFxkYS1mXXs0fSkkLyxzPS9eW1xcZGEtZl0rJC87ZnVuY3Rpb24gcihlLHQpe2NvbnN0IGk9ZS50b1N0cmluZygxNikscz1pLmxlbmd0aDwyP1wiMFwiK2k6aTtzd2l0Y2godCl7Y2FzZSA0OnJldHVybiBpWzBdO2Nhc2UgODpyZXR1cm4gcztjYXNlIDEyOnJldHVybihzK3MpLnNsaWNlKDAsMyk7ZGVmYXVsdDpyZXR1cm4gcytzfX10LnBhcnNlQ29sb3I9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuO2xldCB0PWUudG9Mb3dlckNhc2UoKTtpZigwPT09dC5pbmRleE9mKFwicmdiOlwiKSl7dD10LnNsaWNlKDQpO2NvbnN0IGU9aS5leGVjKHQpO2lmKGUpe2NvbnN0IHQ9ZVsxXT8xNTplWzRdPzI1NTplWzddPzQwOTU6NjU1MzU7cmV0dXJuW01hdGgucm91bmQocGFyc2VJbnQoZVsxXXx8ZVs0XXx8ZVs3XXx8ZVsxMF0sMTYpL3QqMjU1KSxNYXRoLnJvdW5kKHBhcnNlSW50KGVbMl18fGVbNV18fGVbOF18fGVbMTFdLDE2KS90KjI1NSksTWF0aC5yb3VuZChwYXJzZUludChlWzNdfHxlWzZdfHxlWzldfHxlWzEyXSwxNikvdCoyNTUpXX19ZWxzZSBpZigwPT09dC5pbmRleE9mKFwiI1wiKSYmKHQ9dC5zbGljZSgxKSxzLmV4ZWModCkmJlszLDYsOSwxMl0uaW5jbHVkZXModC5sZW5ndGgpKSl7Y29uc3QgZT10Lmxlbmd0aC8zLGk9WzAsMCwwXTtmb3IobGV0IHM9MDtzPDM7KytzKXtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoZSpzLGUqcytlKSwxNik7aVtzXT0xPT09ZT9yPDw0OjI9PT1lP3I6Mz09PWU/cj4+NDpyPj44fXJldHVybiBpfX0sdC50b1JnYlN0cmluZz1mdW5jdGlvbihlLHQ9MTYpe2NvbnN0W2kscyxuXT1lO3JldHVybmByZ2I6JHtyKGksdCl9LyR7cihzLHQpfS8ke3Iobix0KX1gfX0sNTc3MDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUEFZTE9BRF9MSU1JVD12b2lkIDAsdC5QQVlMT0FEX0xJTUlUPTFlN30sNjM1MTooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5EY3NIYW5kbGVyPXQuRGNzUGFyc2VyPXZvaWQgMDtjb25zdCBzPWkoNDgyKSxyPWkoODc0Miksbj1pKDU3NzApLG89W107dC5EY3NQYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9oYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2FjdGl2ZT1vLHRoaXMuX2lkZW50PTAsdGhpcy5faGFuZGxlckZiPSgpPT57fSx0aGlzLl9zdGFjaz17cGF1c2VkOiExLGxvb3BQb3NpdGlvbjowLGZhbGxUaHJvdWdoOiExfX1kaXNwb3NlKCl7dGhpcy5faGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9oYW5kbGVyRmI9KCk9Pnt9LHRoaXMuX2FjdGl2ZT1vfXJlZ2lzdGVySGFuZGxlcihlLHQpe3ZvaWQgMD09PXRoaXMuX2hhbmRsZXJzW2VdJiYodGhpcy5faGFuZGxlcnNbZV09W10pO2NvbnN0IGk9dGhpcy5faGFuZGxlcnNbZV07cmV0dXJuIGkucHVzaCh0KSx7ZGlzcG9zZTooKT0+e2NvbnN0IGU9aS5pbmRleE9mKHQpOy0xIT09ZSYmaS5zcGxpY2UoZSwxKX19fWNsZWFySGFuZGxlcihlKXt0aGlzLl9oYW5kbGVyc1tlXSYmZGVsZXRlIHRoaXMuX2hhbmRsZXJzW2VdfXNldEhhbmRsZXJGYWxsYmFjayhlKXt0aGlzLl9oYW5kbGVyRmI9ZX1yZXNldCgpe2lmKHRoaXMuX2FjdGl2ZS5sZW5ndGgpZm9yKGxldCBlPXRoaXMuX3N0YWNrLnBhdXNlZD90aGlzLl9zdGFjay5sb29wUG9zaXRpb24tMTp0aGlzLl9hY3RpdmUubGVuZ3RoLTE7ZT49MDstLWUpdGhpcy5fYWN0aXZlW2VdLnVuaG9vayghMSk7dGhpcy5fc3RhY2sucGF1c2VkPSExLHRoaXMuX2FjdGl2ZT1vLHRoaXMuX2lkZW50PTB9aG9vayhlLHQpe2lmKHRoaXMucmVzZXQoKSx0aGlzLl9pZGVudD1lLHRoaXMuX2FjdGl2ZT10aGlzLl9oYW5kbGVyc1tlXXx8byx0aGlzLl9hY3RpdmUubGVuZ3RoKWZvcihsZXQgZT10aGlzLl9hY3RpdmUubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5fYWN0aXZlW2VdLmhvb2sodCk7ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWRlbnQsXCJIT09LXCIsdCl9cHV0KGUsdCxpKXtpZih0aGlzLl9hY3RpdmUubGVuZ3RoKWZvcihsZXQgcz10aGlzLl9hY3RpdmUubGVuZ3RoLTE7cz49MDtzLS0pdGhpcy5fYWN0aXZlW3NdLnB1dChlLHQsaSk7ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWRlbnQsXCJQVVRcIiwoMCxzLnV0ZjMyVG9TdHJpbmcpKGUsdCxpKSl9dW5ob29rKGUsdD0hMCl7aWYodGhpcy5fYWN0aXZlLmxlbmd0aCl7bGV0IGk9ITEscz10aGlzLl9hY3RpdmUubGVuZ3RoLTEscj0hMTtpZih0aGlzLl9zdGFjay5wYXVzZWQmJihzPXRoaXMuX3N0YWNrLmxvb3BQb3NpdGlvbi0xLGk9dCxyPXRoaXMuX3N0YWNrLmZhbGxUaHJvdWdoLHRoaXMuX3N0YWNrLnBhdXNlZD0hMSksIXImJiExPT09aSl7Zm9yKDtzPj0wJiYoaT10aGlzLl9hY3RpdmVbc10udW5ob29rKGUpLCEwIT09aSk7cy0tKWlmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiB0aGlzLl9zdGFjay5wYXVzZWQ9ITAsdGhpcy5fc3RhY2subG9vcFBvc2l0aW9uPXMsdGhpcy5fc3RhY2suZmFsbFRocm91Z2g9ITEsaTtzLS19Zm9yKDtzPj0wO3MtLSlpZihpPXRoaXMuX2FjdGl2ZVtzXS51bmhvb2soITEpLGkgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiB0aGlzLl9zdGFjay5wYXVzZWQ9ITAsdGhpcy5fc3RhY2subG9vcFBvc2l0aW9uPXMsdGhpcy5fc3RhY2suZmFsbFRocm91Z2g9ITAsaX1lbHNlIHRoaXMuX2hhbmRsZXJGYih0aGlzLl9pZGVudCxcIlVOSE9PS1wiLGUpO3RoaXMuX2FjdGl2ZT1vLHRoaXMuX2lkZW50PTB9fTtjb25zdCBhPW5ldyByLlBhcmFtczthLmFkZFBhcmFtKDApLHQuRGNzSGFuZGxlcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9oYW5kbGVyPWUsdGhpcy5fZGF0YT1cIlwiLHRoaXMuX3BhcmFtcz1hLHRoaXMuX2hpdExpbWl0PSExfWhvb2soZSl7dGhpcy5fcGFyYW1zPWUubGVuZ3RoPjF8fGUucGFyYW1zWzBdP2UuY2xvbmUoKTphLHRoaXMuX2RhdGE9XCJcIix0aGlzLl9oaXRMaW1pdD0hMX1wdXQoZSx0LGkpe3RoaXMuX2hpdExpbWl0fHwodGhpcy5fZGF0YSs9KDAscy51dGYzMlRvU3RyaW5nKShlLHQsaSksdGhpcy5fZGF0YS5sZW5ndGg+bi5QQVlMT0FEX0xJTUlUJiYodGhpcy5fZGF0YT1cIlwiLHRoaXMuX2hpdExpbWl0PSEwKSl9dW5ob29rKGUpe2xldCB0PSExO2lmKHRoaXMuX2hpdExpbWl0KXQ9ITE7ZWxzZSBpZihlJiYodD10aGlzLl9oYW5kbGVyKHRoaXMuX2RhdGEsdGhpcy5fcGFyYW1zKSx0IGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIHQudGhlbigoZT0+KHRoaXMuX3BhcmFtcz1hLHRoaXMuX2RhdGE9XCJcIix0aGlzLl9oaXRMaW1pdD0hMSxlKSkpO3JldHVybiB0aGlzLl9wYXJhbXM9YSx0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITEsdH19fSwyMDE1OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkVzY2FwZVNlcXVlbmNlUGFyc2VyPXQuVlQ1MDBfVFJBTlNJVElPTl9UQUJMRT10LlRyYW5zaXRpb25UYWJsZT12b2lkIDA7Y29uc3Qgcz1pKDg0NCkscj1pKDg3NDIpLG49aSg2MjQyKSxvPWkoNjM1MSk7Y2xhc3MgYXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRhYmxlPW5ldyBVaW50OEFycmF5KGUpfXNldERlZmF1bHQoZSx0KXt0aGlzLnRhYmxlLmZpbGwoZTw8NHx0KX1hZGQoZSx0LGkscyl7dGhpcy50YWJsZVt0PDw4fGVdPWk8PDR8c31hZGRNYW55KGUsdCxpLHMpe2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMudGFibGVbdDw8OHxlW3JdXT1pPDw0fHN9fXQuVHJhbnNpdGlvblRhYmxlPWE7Y29uc3QgaD0xNjA7dC5WVDUwMF9UUkFOU0lUSU9OX1RBQkxFPWZ1bmN0aW9uKCl7Y29uc3QgZT1uZXcgYSg0MDk1KSx0PUFycmF5LmFwcGx5KG51bGwsQXJyYXkoMjU2KSkubWFwKCgoZSx0KT0+dCkpLGk9KGUsaSk9PnQuc2xpY2UoZSxpKSxzPWkoMzIsMTI3KSxyPWkoMCwyNCk7ci5wdXNoKDI1KSxyLnB1c2guYXBwbHkocixpKDI4LDMyKSk7Y29uc3Qgbj1pKDAsMTQpO2xldCBvO2ZvcihvIGluIGUuc2V0RGVmYXVsdCgxLDApLGUuYWRkTWFueShzLDAsMiwwKSxuKWUuYWRkTWFueShbMjQsMjYsMTUzLDE1NF0sbywzLDApLGUuYWRkTWFueShpKDEyOCwxNDQpLG8sMywwKSxlLmFkZE1hbnkoaSgxNDQsMTUyKSxvLDMsMCksZS5hZGQoMTU2LG8sMCwwKSxlLmFkZCgyNyxvLDExLDEpLGUuYWRkKDE1NyxvLDQsOCksZS5hZGRNYW55KFsxNTIsMTU4LDE1OV0sbywwLDcpLGUuYWRkKDE1NSxvLDExLDMpLGUuYWRkKDE0NCxvLDExLDkpO3JldHVybiBlLmFkZE1hbnkociwwLDMsMCksZS5hZGRNYW55KHIsMSwzLDEpLGUuYWRkKDEyNywxLDAsMSksZS5hZGRNYW55KHIsOCwwLDgpLGUuYWRkTWFueShyLDMsMywzKSxlLmFkZCgxMjcsMywwLDMpLGUuYWRkTWFueShyLDQsMyw0KSxlLmFkZCgxMjcsNCwwLDQpLGUuYWRkTWFueShyLDYsMyw2KSxlLmFkZE1hbnkociw1LDMsNSksZS5hZGQoMTI3LDUsMCw1KSxlLmFkZE1hbnkociwyLDMsMiksZS5hZGQoMTI3LDIsMCwyKSxlLmFkZCg5MywxLDQsOCksZS5hZGRNYW55KHMsOCw1LDgpLGUuYWRkKDEyNyw4LDUsOCksZS5hZGRNYW55KFsxNTYsMjcsMjQsMjYsN10sOCw2LDApLGUuYWRkTWFueShpKDI4LDMyKSw4LDAsOCksZS5hZGRNYW55KFs4OCw5NCw5NV0sMSwwLDcpLGUuYWRkTWFueShzLDcsMCw3KSxlLmFkZE1hbnkociw3LDAsNyksZS5hZGQoMTU2LDcsMCwwKSxlLmFkZCgxMjcsNywwLDcpLGUuYWRkKDkxLDEsMTEsMyksZS5hZGRNYW55KGkoNjQsMTI3KSwzLDcsMCksZS5hZGRNYW55KGkoNDgsNjApLDMsOCw0KSxlLmFkZE1hbnkoWzYwLDYxLDYyLDYzXSwzLDksNCksZS5hZGRNYW55KGkoNDgsNjApLDQsOCw0KSxlLmFkZE1hbnkoaSg2NCwxMjcpLDQsNywwKSxlLmFkZE1hbnkoWzYwLDYxLDYyLDYzXSw0LDAsNiksZS5hZGRNYW55KGkoMzIsNjQpLDYsMCw2KSxlLmFkZCgxMjcsNiwwLDYpLGUuYWRkTWFueShpKDY0LDEyNyksNiwwLDApLGUuYWRkTWFueShpKDMyLDQ4KSwzLDksNSksZS5hZGRNYW55KGkoMzIsNDgpLDUsOSw1KSxlLmFkZE1hbnkoaSg0OCw2NCksNSwwLDYpLGUuYWRkTWFueShpKDY0LDEyNyksNSw3LDApLGUuYWRkTWFueShpKDMyLDQ4KSw0LDksNSksZS5hZGRNYW55KGkoMzIsNDgpLDEsOSwyKSxlLmFkZE1hbnkoaSgzMiw0OCksMiw5LDIpLGUuYWRkTWFueShpKDQ4LDEyNyksMiwxMCwwKSxlLmFkZE1hbnkoaSg0OCw4MCksMSwxMCwwKSxlLmFkZE1hbnkoaSg4MSw4OCksMSwxMCwwKSxlLmFkZE1hbnkoWzg5LDkwLDkyXSwxLDEwLDApLGUuYWRkTWFueShpKDk2LDEyNyksMSwxMCwwKSxlLmFkZCg4MCwxLDExLDkpLGUuYWRkTWFueShyLDksMCw5KSxlLmFkZCgxMjcsOSwwLDkpLGUuYWRkTWFueShpKDI4LDMyKSw5LDAsOSksZS5hZGRNYW55KGkoMzIsNDgpLDksOSwxMiksZS5hZGRNYW55KGkoNDgsNjApLDksOCwxMCksZS5hZGRNYW55KFs2MCw2MSw2Miw2M10sOSw5LDEwKSxlLmFkZE1hbnkociwxMSwwLDExKSxlLmFkZE1hbnkoaSgzMiwxMjgpLDExLDAsMTEpLGUuYWRkTWFueShpKDI4LDMyKSwxMSwwLDExKSxlLmFkZE1hbnkociwxMCwwLDEwKSxlLmFkZCgxMjcsMTAsMCwxMCksZS5hZGRNYW55KGkoMjgsMzIpLDEwLDAsMTApLGUuYWRkTWFueShpKDQ4LDYwKSwxMCw4LDEwKSxlLmFkZE1hbnkoWzYwLDYxLDYyLDYzXSwxMCwwLDExKSxlLmFkZE1hbnkoaSgzMiw0OCksMTAsOSwxMiksZS5hZGRNYW55KHIsMTIsMCwxMiksZS5hZGQoMTI3LDEyLDAsMTIpLGUuYWRkTWFueShpKDI4LDMyKSwxMiwwLDEyKSxlLmFkZE1hbnkoaSgzMiw0OCksMTIsOSwxMiksZS5hZGRNYW55KGkoNDgsNjQpLDEyLDAsMTEpLGUuYWRkTWFueShpKDY0LDEyNyksMTIsMTIsMTMpLGUuYWRkTWFueShpKDY0LDEyNyksMTAsMTIsMTMpLGUuYWRkTWFueShpKDY0LDEyNyksOSwxMiwxMyksZS5hZGRNYW55KHIsMTMsMTMsMTMpLGUuYWRkTWFueShzLDEzLDEzLDEzKSxlLmFkZCgxMjcsMTMsMCwxMyksZS5hZGRNYW55KFsyNywxNTYsMjQsMjZdLDEzLDE0LDApLGUuYWRkKGgsMCwyLDApLGUuYWRkKGgsOCw1LDgpLGUuYWRkKGgsNiwwLDYpLGUuYWRkKGgsMTEsMCwxMSksZS5hZGQoaCwxMywxMywxMyksZX0oKTtjbGFzcyBjIGV4dGVuZHMgcy5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGU9dC5WVDUwMF9UUkFOU0lUSU9OX1RBQkxFKXtzdXBlcigpLHRoaXMuX3RyYW5zaXRpb25zPWUsdGhpcy5fcGFyc2VTdGFjaz17c3RhdGU6MCxoYW5kbGVyczpbXSxoYW5kbGVyUG9zOjAsdHJhbnNpdGlvbjowLGNodW5rUG9zOjB9LHRoaXMuaW5pdGlhbFN0YXRlPTAsdGhpcy5jdXJyZW50U3RhdGU9dGhpcy5pbml0aWFsU3RhdGUsdGhpcy5fcGFyYW1zPW5ldyByLlBhcmFtcyx0aGlzLl9wYXJhbXMuYWRkUGFyYW0oMCksdGhpcy5fY29sbGVjdD0wLHRoaXMucHJlY2VkaW5nSm9pblN0YXRlPTAsdGhpcy5fcHJpbnRIYW5kbGVyRmI9KGUsdCxpKT0+e30sdGhpcy5fZXhlY3V0ZUhhbmRsZXJGYj1lPT57fSx0aGlzLl9jc2lIYW5kbGVyRmI9KGUsdCk9Pnt9LHRoaXMuX2VzY0hhbmRsZXJGYj1lPT57fSx0aGlzLl9lcnJvckhhbmRsZXJGYj1lPT5lLHRoaXMuX3ByaW50SGFuZGxlcj10aGlzLl9wcmludEhhbmRsZXJGYix0aGlzLl9leGVjdXRlSGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9jc2lIYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2VzY0hhbmRsZXJzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5yZWdpc3RlcigoMCxzLnRvRGlzcG9zYWJsZSkoKCgpPT57dGhpcy5fY3NpSGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9leGVjdXRlSGFuZGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9lc2NIYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpfSkpKSx0aGlzLl9vc2NQYXJzZXI9dGhpcy5yZWdpc3RlcihuZXcgbi5Pc2NQYXJzZXIpLHRoaXMuX2Rjc1BhcnNlcj10aGlzLnJlZ2lzdGVyKG5ldyBvLkRjc1BhcnNlciksdGhpcy5fZXJyb3JIYW5kbGVyPXRoaXMuX2Vycm9ySGFuZGxlckZiLHRoaXMucmVnaXN0ZXJFc2NIYW5kbGVyKHtmaW5hbDpcIlxcXFxcIn0sKCgpPT4hMCkpfV9pZGVudGlmaWVyKGUsdD1bNjQsMTI2XSl7bGV0IGk9MDtpZihlLnByZWZpeCl7aWYoZS5wcmVmaXgubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgYnl0ZSBhcyBwcmVmaXggc3VwcG9ydGVkXCIpO2lmKGk9ZS5wcmVmaXguY2hhckNvZGVBdCgwKSxpJiY2MD5pfHxpPjYzKXRocm93IG5ldyBFcnJvcihcInByZWZpeCBtdXN0IGJlIGluIHJhbmdlIDB4M2MgLi4gMHgzZlwiKX1pZihlLmludGVybWVkaWF0ZXMpe2lmKGUuaW50ZXJtZWRpYXRlcy5sZW5ndGg+Mil0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IHR3byBieXRlcyBhcyBpbnRlcm1lZGlhdGVzIGFyZSBzdXBwb3J0ZWRcIik7Zm9yKGxldCB0PTA7dDxlLmludGVybWVkaWF0ZXMubGVuZ3RoOysrdCl7Y29uc3Qgcz1lLmludGVybWVkaWF0ZXMuY2hhckNvZGVBdCh0KTtpZigzMj5zfHxzPjQ3KXRocm93IG5ldyBFcnJvcihcImludGVybWVkaWF0ZSBtdXN0IGJlIGluIHJhbmdlIDB4MjAgLi4gMHgyZlwiKTtpPDw9OCxpfD1zfX1pZigxIT09ZS5maW5hbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiZmluYWwgbXVzdCBiZSBhIHNpbmdsZSBieXRlXCIpO2NvbnN0IHM9ZS5maW5hbC5jaGFyQ29kZUF0KDApO2lmKHRbMF0+c3x8cz50WzFdKXRocm93IG5ldyBFcnJvcihgZmluYWwgbXVzdCBiZSBpbiByYW5nZSAke3RbMF19IC4uICR7dFsxXX1gKTtyZXR1cm4gaTw8PTgsaXw9cyxpfWlkZW50VG9TdHJpbmcoZSl7Y29uc3QgdD1bXTtmb3IoO2U7KXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKSksZT4+PTg7cmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4oXCJcIil9c2V0UHJpbnRIYW5kbGVyKGUpe3RoaXMuX3ByaW50SGFuZGxlcj1lfWNsZWFyUHJpbnRIYW5kbGVyKCl7dGhpcy5fcHJpbnRIYW5kbGVyPXRoaXMuX3ByaW50SGFuZGxlckZifXJlZ2lzdGVyRXNjSGFuZGxlcihlLHQpe2NvbnN0IGk9dGhpcy5faWRlbnRpZmllcihlLFs0OCwxMjZdKTt2b2lkIDA9PT10aGlzLl9lc2NIYW5kbGVyc1tpXSYmKHRoaXMuX2VzY0hhbmRsZXJzW2ldPVtdKTtjb25zdCBzPXRoaXMuX2VzY0hhbmRsZXJzW2ldO3JldHVybiBzLnB1c2godCkse2Rpc3Bvc2U6KCk9Pntjb25zdCBlPXMuaW5kZXhPZih0KTstMSE9PWUmJnMuc3BsaWNlKGUsMSl9fX1jbGVhckVzY0hhbmRsZXIoZSl7dGhpcy5fZXNjSGFuZGxlcnNbdGhpcy5faWRlbnRpZmllcihlLFs0OCwxMjZdKV0mJmRlbGV0ZSB0aGlzLl9lc2NIYW5kbGVyc1t0aGlzLl9pZGVudGlmaWVyKGUsWzQ4LDEyNl0pXX1zZXRFc2NIYW5kbGVyRmFsbGJhY2soZSl7dGhpcy5fZXNjSGFuZGxlckZiPWV9c2V0RXhlY3V0ZUhhbmRsZXIoZSx0KXt0aGlzLl9leGVjdXRlSGFuZGxlcnNbZS5jaGFyQ29kZUF0KDApXT10fWNsZWFyRXhlY3V0ZUhhbmRsZXIoZSl7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzW2UuY2hhckNvZGVBdCgwKV0mJmRlbGV0ZSB0aGlzLl9leGVjdXRlSGFuZGxlcnNbZS5jaGFyQ29kZUF0KDApXX1zZXRFeGVjdXRlSGFuZGxlckZhbGxiYWNrKGUpe3RoaXMuX2V4ZWN1dGVIYW5kbGVyRmI9ZX1yZWdpc3RlckNzaUhhbmRsZXIoZSx0KXtjb25zdCBpPXRoaXMuX2lkZW50aWZpZXIoZSk7dm9pZCAwPT09dGhpcy5fY3NpSGFuZGxlcnNbaV0mJih0aGlzLl9jc2lIYW5kbGVyc1tpXT1bXSk7Y29uc3Qgcz10aGlzLl9jc2lIYW5kbGVyc1tpXTtyZXR1cm4gcy5wdXNoKHQpLHtkaXNwb3NlOigpPT57Y29uc3QgZT1zLmluZGV4T2YodCk7LTEhPT1lJiZzLnNwbGljZShlLDEpfX19Y2xlYXJDc2lIYW5kbGVyKGUpe3RoaXMuX2NzaUhhbmRsZXJzW3RoaXMuX2lkZW50aWZpZXIoZSldJiZkZWxldGUgdGhpcy5fY3NpSGFuZGxlcnNbdGhpcy5faWRlbnRpZmllcihlKV19c2V0Q3NpSGFuZGxlckZhbGxiYWNrKGUpe3RoaXMuX2NzaUhhbmRsZXJGYj1lfXJlZ2lzdGVyRGNzSGFuZGxlcihlLHQpe3JldHVybiB0aGlzLl9kY3NQYXJzZXIucmVnaXN0ZXJIYW5kbGVyKHRoaXMuX2lkZW50aWZpZXIoZSksdCl9Y2xlYXJEY3NIYW5kbGVyKGUpe3RoaXMuX2Rjc1BhcnNlci5jbGVhckhhbmRsZXIodGhpcy5faWRlbnRpZmllcihlKSl9c2V0RGNzSGFuZGxlckZhbGxiYWNrKGUpe3RoaXMuX2Rjc1BhcnNlci5zZXRIYW5kbGVyRmFsbGJhY2soZSl9cmVnaXN0ZXJPc2NIYW5kbGVyKGUsdCl7cmV0dXJuIHRoaXMuX29zY1BhcnNlci5yZWdpc3RlckhhbmRsZXIoZSx0KX1jbGVhck9zY0hhbmRsZXIoZSl7dGhpcy5fb3NjUGFyc2VyLmNsZWFySGFuZGxlcihlKX1zZXRPc2NIYW5kbGVyRmFsbGJhY2soZSl7dGhpcy5fb3NjUGFyc2VyLnNldEhhbmRsZXJGYWxsYmFjayhlKX1zZXRFcnJvckhhbmRsZXIoZSl7dGhpcy5fZXJyb3JIYW5kbGVyPWV9Y2xlYXJFcnJvckhhbmRsZXIoKXt0aGlzLl9lcnJvckhhbmRsZXI9dGhpcy5fZXJyb3JIYW5kbGVyRmJ9cmVzZXQoKXt0aGlzLmN1cnJlbnRTdGF0ZT10aGlzLmluaXRpYWxTdGF0ZSx0aGlzLl9vc2NQYXJzZXIucmVzZXQoKSx0aGlzLl9kY3NQYXJzZXIucmVzZXQoKSx0aGlzLl9wYXJhbXMucmVzZXQoKSx0aGlzLl9wYXJhbXMuYWRkUGFyYW0oMCksdGhpcy5fY29sbGVjdD0wLHRoaXMucHJlY2VkaW5nSm9pblN0YXRlPTAsMCE9PXRoaXMuX3BhcnNlU3RhY2suc3RhdGUmJih0aGlzLl9wYXJzZVN0YWNrLnN0YXRlPTIsdGhpcy5fcGFyc2VTdGFjay5oYW5kbGVycz1bXSl9X3ByZXNlcnZlU3RhY2soZSx0LGkscyxyKXt0aGlzLl9wYXJzZVN0YWNrLnN0YXRlPWUsdGhpcy5fcGFyc2VTdGFjay5oYW5kbGVycz10LHRoaXMuX3BhcnNlU3RhY2suaGFuZGxlclBvcz1pLHRoaXMuX3BhcnNlU3RhY2sudHJhbnNpdGlvbj1zLHRoaXMuX3BhcnNlU3RhY2suY2h1bmtQb3M9cn1wYXJzZShlLHQsaSl7bGV0IHMscj0wLG49MCxvPTA7aWYodGhpcy5fcGFyc2VTdGFjay5zdGF0ZSlpZigyPT09dGhpcy5fcGFyc2VTdGFjay5zdGF0ZSl0aGlzLl9wYXJzZVN0YWNrLnN0YXRlPTAsbz10aGlzLl9wYXJzZVN0YWNrLmNodW5rUG9zKzE7ZWxzZXtpZih2b2lkIDA9PT1pfHwxPT09dGhpcy5fcGFyc2VTdGFjay5zdGF0ZSl0aHJvdyB0aGlzLl9wYXJzZVN0YWNrLnN0YXRlPTEsbmV3IEVycm9yKFwiaW1wcm9wZXIgY29udGludWF0aW9uIGR1ZSB0byBwcmV2aW91cyBhc3luYyBoYW5kbGVyLCBnaXZpbmcgdXAgcGFyc2luZ1wiKTtjb25zdCB0PXRoaXMuX3BhcnNlU3RhY2suaGFuZGxlcnM7bGV0IG49dGhpcy5fcGFyc2VTdGFjay5oYW5kbGVyUG9zLTE7c3dpdGNoKHRoaXMuX3BhcnNlU3RhY2suc3RhdGUpe2Nhc2UgMzppZighMT09PWkmJm4+LTEpZm9yKDtuPj0wJiYocz10W25dKHRoaXMuX3BhcmFtcyksITAhPT1zKTtuLS0paWYocyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHRoaXMuX3BhcnNlU3RhY2suaGFuZGxlclBvcz1uLHM7dGhpcy5fcGFyc2VTdGFjay5oYW5kbGVycz1bXTticmVhaztjYXNlIDQ6aWYoITE9PT1pJiZuPi0xKWZvcig7bj49MCYmKHM9dFtuXSgpLCEwIT09cyk7bi0tKWlmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiB0aGlzLl9wYXJzZVN0YWNrLmhhbmRsZXJQb3M9bixzO3RoaXMuX3BhcnNlU3RhY2suaGFuZGxlcnM9W107YnJlYWs7Y2FzZSA2OmlmKHI9ZVt0aGlzLl9wYXJzZVN0YWNrLmNodW5rUG9zXSxzPXRoaXMuX2Rjc1BhcnNlci51bmhvb2soMjQhPT1yJiYyNiE9PXIsaSkscylyZXR1cm4gczsyNz09PXImJih0aGlzLl9wYXJzZVN0YWNrLnRyYW5zaXRpb258PTEpLHRoaXMuX3BhcmFtcy5yZXNldCgpLHRoaXMuX3BhcmFtcy5hZGRQYXJhbSgwKSx0aGlzLl9jb2xsZWN0PTA7YnJlYWs7Y2FzZSA1OmlmKHI9ZVt0aGlzLl9wYXJzZVN0YWNrLmNodW5rUG9zXSxzPXRoaXMuX29zY1BhcnNlci5lbmQoMjQhPT1yJiYyNiE9PXIsaSkscylyZXR1cm4gczsyNz09PXImJih0aGlzLl9wYXJzZVN0YWNrLnRyYW5zaXRpb258PTEpLHRoaXMuX3BhcmFtcy5yZXNldCgpLHRoaXMuX3BhcmFtcy5hZGRQYXJhbSgwKSx0aGlzLl9jb2xsZWN0PTB9dGhpcy5fcGFyc2VTdGFjay5zdGF0ZT0wLG89dGhpcy5fcGFyc2VTdGFjay5jaHVua1BvcysxLHRoaXMucHJlY2VkaW5nSm9pblN0YXRlPTAsdGhpcy5jdXJyZW50U3RhdGU9MTUmdGhpcy5fcGFyc2VTdGFjay50cmFuc2l0aW9ufWZvcihsZXQgaT1vO2k8dDsrK2kpe3N3aXRjaChyPWVbaV0sbj10aGlzLl90cmFuc2l0aW9ucy50YWJsZVt0aGlzLmN1cnJlbnRTdGF0ZTw8OHwocjwxNjA/cjpoKV0sbj4+NCl7Y2FzZSAyOmZvcihsZXQgcz1pKzE7Oysrcyl7aWYocz49dHx8KHI9ZVtzXSk8MzJ8fHI+MTI2JiZyPGgpe3RoaXMuX3ByaW50SGFuZGxlcihlLGkscyksaT1zLTE7YnJlYWt9aWYoKytzPj10fHwocj1lW3NdKTwzMnx8cj4xMjYmJnI8aCl7dGhpcy5fcHJpbnRIYW5kbGVyKGUsaSxzKSxpPXMtMTticmVha31pZigrK3M+PXR8fChyPWVbc10pPDMyfHxyPjEyNiYmcjxoKXt0aGlzLl9wcmludEhhbmRsZXIoZSxpLHMpLGk9cy0xO2JyZWFrfWlmKCsrcz49dHx8KHI9ZVtzXSk8MzJ8fHI+MTI2JiZyPGgpe3RoaXMuX3ByaW50SGFuZGxlcihlLGkscyksaT1zLTE7YnJlYWt9fWJyZWFrO2Nhc2UgMzp0aGlzLl9leGVjdXRlSGFuZGxlcnNbcl0/dGhpcy5fZXhlY3V0ZUhhbmRsZXJzW3JdKCk6dGhpcy5fZXhlY3V0ZUhhbmRsZXJGYihyKSx0aGlzLnByZWNlZGluZ0pvaW5TdGF0ZT0wO2JyZWFrO2Nhc2UgMDpicmVhaztjYXNlIDE6aWYodGhpcy5fZXJyb3JIYW5kbGVyKHtwb3NpdGlvbjppLGNvZGU6cixjdXJyZW50U3RhdGU6dGhpcy5jdXJyZW50U3RhdGUsY29sbGVjdDp0aGlzLl9jb2xsZWN0LHBhcmFtczp0aGlzLl9wYXJhbXMsYWJvcnQ6ITF9KS5hYm9ydClyZXR1cm47YnJlYWs7Y2FzZSA3OmNvbnN0IG89dGhpcy5fY3NpSGFuZGxlcnNbdGhpcy5fY29sbGVjdDw8OHxyXTtsZXQgYT1vP28ubGVuZ3RoLTE6LTE7Zm9yKDthPj0wJiYocz1vW2FdKHRoaXMuX3BhcmFtcyksITAhPT1zKTthLS0paWYocyBpbnN0YW5jZW9mIFByb21pc2UpcmV0dXJuIHRoaXMuX3ByZXNlcnZlU3RhY2soMyxvLGEsbixpKSxzO2E8MCYmdGhpcy5fY3NpSGFuZGxlckZiKHRoaXMuX2NvbGxlY3Q8PDh8cix0aGlzLl9wYXJhbXMpLHRoaXMucHJlY2VkaW5nSm9pblN0YXRlPTA7YnJlYWs7Y2FzZSA4OmRve3N3aXRjaChyKXtjYXNlIDU5OnRoaXMuX3BhcmFtcy5hZGRQYXJhbSgwKTticmVhaztjYXNlIDU4OnRoaXMuX3BhcmFtcy5hZGRTdWJQYXJhbSgtMSk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9wYXJhbXMuYWRkRGlnaXQoci00OCl9fXdoaWxlKCsraTx0JiYocj1lW2ldKT40NyYmcjw2MCk7aS0tO2JyZWFrO2Nhc2UgOTp0aGlzLl9jb2xsZWN0PDw9OCx0aGlzLl9jb2xsZWN0fD1yO2JyZWFrO2Nhc2UgMTA6Y29uc3QgYz10aGlzLl9lc2NIYW5kbGVyc1t0aGlzLl9jb2xsZWN0PDw4fHJdO2xldCBsPWM/Yy5sZW5ndGgtMTotMTtmb3IoO2w+PTAmJihzPWNbbF0oKSwhMCE9PXMpO2wtLSlpZihzIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gdGhpcy5fcHJlc2VydmVTdGFjayg0LGMsbCxuLGkpLHM7bDwwJiZ0aGlzLl9lc2NIYW5kbGVyRmIodGhpcy5fY29sbGVjdDw8OHxyKSx0aGlzLnByZWNlZGluZ0pvaW5TdGF0ZT0wO2JyZWFrO2Nhc2UgMTE6dGhpcy5fcGFyYW1zLnJlc2V0KCksdGhpcy5fcGFyYW1zLmFkZFBhcmFtKDApLHRoaXMuX2NvbGxlY3Q9MDticmVhaztjYXNlIDEyOnRoaXMuX2Rjc1BhcnNlci5ob29rKHRoaXMuX2NvbGxlY3Q8PDh8cix0aGlzLl9wYXJhbXMpO2JyZWFrO2Nhc2UgMTM6Zm9yKGxldCBzPWkrMTs7KytzKWlmKHM+PXR8fDI0PT09KHI9ZVtzXSl8fDI2PT09cnx8Mjc9PT1yfHxyPjEyNyYmcjxoKXt0aGlzLl9kY3NQYXJzZXIucHV0KGUsaSxzKSxpPXMtMTticmVha31icmVhaztjYXNlIDE0OmlmKHM9dGhpcy5fZGNzUGFyc2VyLnVuaG9vaygyNCE9PXImJjI2IT09cikscylyZXR1cm4gdGhpcy5fcHJlc2VydmVTdGFjayg2LFtdLDAsbixpKSxzOzI3PT09ciYmKG58PTEpLHRoaXMuX3BhcmFtcy5yZXNldCgpLHRoaXMuX3BhcmFtcy5hZGRQYXJhbSgwKSx0aGlzLl9jb2xsZWN0PTAsdGhpcy5wcmVjZWRpbmdKb2luU3RhdGU9MDticmVhaztjYXNlIDQ6dGhpcy5fb3NjUGFyc2VyLnN0YXJ0KCk7YnJlYWs7Y2FzZSA1OmZvcihsZXQgcz1pKzE7O3MrKylpZihzPj10fHwocj1lW3NdKTwzMnx8cj4xMjcmJnI8aCl7dGhpcy5fb3NjUGFyc2VyLnB1dChlLGkscyksaT1zLTE7YnJlYWt9YnJlYWs7Y2FzZSA2OmlmKHM9dGhpcy5fb3NjUGFyc2VyLmVuZCgyNCE9PXImJjI2IT09cikscylyZXR1cm4gdGhpcy5fcHJlc2VydmVTdGFjayg1LFtdLDAsbixpKSxzOzI3PT09ciYmKG58PTEpLHRoaXMuX3BhcmFtcy5yZXNldCgpLHRoaXMuX3BhcmFtcy5hZGRQYXJhbSgwKSx0aGlzLl9jb2xsZWN0PTAsdGhpcy5wcmVjZWRpbmdKb2luU3RhdGU9MH10aGlzLmN1cnJlbnRTdGF0ZT0xNSZufX19dC5Fc2NhcGVTZXF1ZW5jZVBhcnNlcj1jfSw2MjQyOihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lk9zY0hhbmRsZXI9dC5Pc2NQYXJzZXI9dm9pZCAwO2NvbnN0IHM9aSg1NzcwKSxyPWkoNDgyKSxuPVtdO3QuT3NjUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RhdGU9MCx0aGlzLl9hY3RpdmU9bix0aGlzLl9pZD0tMSx0aGlzLl9oYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2hhbmRsZXJGYj0oKT0+e30sdGhpcy5fc3RhY2s9e3BhdXNlZDohMSxsb29wUG9zaXRpb246MCxmYWxsVGhyb3VnaDohMX19cmVnaXN0ZXJIYW5kbGVyKGUsdCl7dm9pZCAwPT09dGhpcy5faGFuZGxlcnNbZV0mJih0aGlzLl9oYW5kbGVyc1tlXT1bXSk7Y29uc3QgaT10aGlzLl9oYW5kbGVyc1tlXTtyZXR1cm4gaS5wdXNoKHQpLHtkaXNwb3NlOigpPT57Y29uc3QgZT1pLmluZGV4T2YodCk7LTEhPT1lJiZpLnNwbGljZShlLDEpfX19Y2xlYXJIYW5kbGVyKGUpe3RoaXMuX2hhbmRsZXJzW2VdJiZkZWxldGUgdGhpcy5faGFuZGxlcnNbZV19c2V0SGFuZGxlckZhbGxiYWNrKGUpe3RoaXMuX2hhbmRsZXJGYj1lfWRpc3Bvc2UoKXt0aGlzLl9oYW5kbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2hhbmRsZXJGYj0oKT0+e30sdGhpcy5fYWN0aXZlPW59cmVzZXQoKXtpZigyPT09dGhpcy5fc3RhdGUpZm9yKGxldCBlPXRoaXMuX3N0YWNrLnBhdXNlZD90aGlzLl9zdGFjay5sb29wUG9zaXRpb24tMTp0aGlzLl9hY3RpdmUubGVuZ3RoLTE7ZT49MDstLWUpdGhpcy5fYWN0aXZlW2VdLmVuZCghMSk7dGhpcy5fc3RhY2sucGF1c2VkPSExLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX2lkPS0xLHRoaXMuX3N0YXRlPTB9X3N0YXJ0KCl7aWYodGhpcy5fYWN0aXZlPXRoaXMuX2hhbmRsZXJzW3RoaXMuX2lkXXx8bix0aGlzLl9hY3RpdmUubGVuZ3RoKWZvcihsZXQgZT10aGlzLl9hY3RpdmUubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5fYWN0aXZlW2VdLnN0YXJ0KCk7ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWQsXCJTVEFSVFwiKX1fcHV0KGUsdCxpKXtpZih0aGlzLl9hY3RpdmUubGVuZ3RoKWZvcihsZXQgcz10aGlzLl9hY3RpdmUubGVuZ3RoLTE7cz49MDtzLS0pdGhpcy5fYWN0aXZlW3NdLnB1dChlLHQsaSk7ZWxzZSB0aGlzLl9oYW5kbGVyRmIodGhpcy5faWQsXCJQVVRcIiwoMCxyLnV0ZjMyVG9TdHJpbmcpKGUsdCxpKSl9c3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5fc3RhdGU9MX1wdXQoZSx0LGkpe2lmKDMhPT10aGlzLl9zdGF0ZSl7aWYoMT09PXRoaXMuX3N0YXRlKWZvcig7dDxpOyl7Y29uc3QgaT1lW3QrK107aWYoNTk9PT1pKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3N0YXJ0KCk7YnJlYWt9aWYoaTw0OHx8NTc8aSlyZXR1cm4gdm9pZCh0aGlzLl9zdGF0ZT0zKTstMT09PXRoaXMuX2lkJiYodGhpcy5faWQ9MCksdGhpcy5faWQ9MTAqdGhpcy5faWQraS00OH0yPT09dGhpcy5fc3RhdGUmJmktdD4wJiZ0aGlzLl9wdXQoZSx0LGkpfX1lbmQoZSx0PSEwKXtpZigwIT09dGhpcy5fc3RhdGUpe2lmKDMhPT10aGlzLl9zdGF0ZSlpZigxPT09dGhpcy5fc3RhdGUmJnRoaXMuX3N0YXJ0KCksdGhpcy5fYWN0aXZlLmxlbmd0aCl7bGV0IGk9ITEscz10aGlzLl9hY3RpdmUubGVuZ3RoLTEscj0hMTtpZih0aGlzLl9zdGFjay5wYXVzZWQmJihzPXRoaXMuX3N0YWNrLmxvb3BQb3NpdGlvbi0xLGk9dCxyPXRoaXMuX3N0YWNrLmZhbGxUaHJvdWdoLHRoaXMuX3N0YWNrLnBhdXNlZD0hMSksIXImJiExPT09aSl7Zm9yKDtzPj0wJiYoaT10aGlzLl9hY3RpdmVbc10uZW5kKGUpLCEwIT09aSk7cy0tKWlmKGkgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiB0aGlzLl9zdGFjay5wYXVzZWQ9ITAsdGhpcy5fc3RhY2subG9vcFBvc2l0aW9uPXMsdGhpcy5fc3RhY2suZmFsbFRocm91Z2g9ITEsaTtzLS19Zm9yKDtzPj0wO3MtLSlpZihpPXRoaXMuX2FjdGl2ZVtzXS5lbmQoITEpLGkgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiB0aGlzLl9zdGFjay5wYXVzZWQ9ITAsdGhpcy5fc3RhY2subG9vcFBvc2l0aW9uPXMsdGhpcy5fc3RhY2suZmFsbFRocm91Z2g9ITAsaX1lbHNlIHRoaXMuX2hhbmRsZXJGYih0aGlzLl9pZCxcIkVORFwiLGUpO3RoaXMuX2FjdGl2ZT1uLHRoaXMuX2lkPS0xLHRoaXMuX3N0YXRlPTB9fX0sdC5Pc2NIYW5kbGVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2hhbmRsZXI9ZSx0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITF9c3RhcnQoKXt0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITF9cHV0KGUsdCxpKXt0aGlzLl9oaXRMaW1pdHx8KHRoaXMuX2RhdGErPSgwLHIudXRmMzJUb1N0cmluZykoZSx0LGkpLHRoaXMuX2RhdGEubGVuZ3RoPnMuUEFZTE9BRF9MSU1JVCYmKHRoaXMuX2RhdGE9XCJcIix0aGlzLl9oaXRMaW1pdD0hMCkpfWVuZChlKXtsZXQgdD0hMTtpZih0aGlzLl9oaXRMaW1pdCl0PSExO2Vsc2UgaWYoZSYmKHQ9dGhpcy5faGFuZGxlcih0aGlzLl9kYXRhKSx0IGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIHQudGhlbigoZT0+KHRoaXMuX2RhdGE9XCJcIix0aGlzLl9oaXRMaW1pdD0hMSxlKSkpO3JldHVybiB0aGlzLl9kYXRhPVwiXCIsdGhpcy5faGl0TGltaXQ9ITEsdH19fSw4NzQyOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5QYXJhbXM9dm9pZCAwO2NvbnN0IGk9MjE0NzQ4MzY0NztjbGFzcyBze3N0YXRpYyBmcm9tQXJyYXkoZSl7Y29uc3QgdD1uZXcgcztpZighZS5sZW5ndGgpcmV0dXJuIHQ7Zm9yKGxldCBpPUFycmF5LmlzQXJyYXkoZVswXSk/MTowO2k8ZS5sZW5ndGg7KytpKXtjb25zdCBzPWVbaV07aWYoQXJyYXkuaXNBcnJheShzKSlmb3IobGV0IGU9MDtlPHMubGVuZ3RoOysrZSl0LmFkZFN1YlBhcmFtKHNbZV0pO2Vsc2UgdC5hZGRQYXJhbShzKX1yZXR1cm4gdH1jb25zdHJ1Y3RvcihlPTMyLHQ9MzIpe2lmKHRoaXMubWF4TGVuZ3RoPWUsdGhpcy5tYXhTdWJQYXJhbXNMZW5ndGg9dCx0PjI1Nil0aHJvdyBuZXcgRXJyb3IoXCJtYXhTdWJQYXJhbXNMZW5ndGggbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIDI1NlwiKTt0aGlzLnBhcmFtcz1uZXcgSW50MzJBcnJheShlKSx0aGlzLmxlbmd0aD0wLHRoaXMuX3N1YlBhcmFtcz1uZXcgSW50MzJBcnJheSh0KSx0aGlzLl9zdWJQYXJhbXNMZW5ndGg9MCx0aGlzLl9zdWJQYXJhbXNJZHg9bmV3IFVpbnQxNkFycmF5KGUpLHRoaXMuX3JlamVjdERpZ2l0cz0hMSx0aGlzLl9yZWplY3RTdWJEaWdpdHM9ITEsdGhpcy5fZGlnaXRJc1N1Yj0hMX1jbG9uZSgpe2NvbnN0IGU9bmV3IHModGhpcy5tYXhMZW5ndGgsdGhpcy5tYXhTdWJQYXJhbXNMZW5ndGgpO3JldHVybiBlLnBhcmFtcy5zZXQodGhpcy5wYXJhbXMpLGUubGVuZ3RoPXRoaXMubGVuZ3RoLGUuX3N1YlBhcmFtcy5zZXQodGhpcy5fc3ViUGFyYW1zKSxlLl9zdWJQYXJhbXNMZW5ndGg9dGhpcy5fc3ViUGFyYW1zTGVuZ3RoLGUuX3N1YlBhcmFtc0lkeC5zZXQodGhpcy5fc3ViUGFyYW1zSWR4KSxlLl9yZWplY3REaWdpdHM9dGhpcy5fcmVqZWN0RGlnaXRzLGUuX3JlamVjdFN1YkRpZ2l0cz10aGlzLl9yZWplY3RTdWJEaWdpdHMsZS5fZGlnaXRJc1N1Yj10aGlzLl9kaWdpdElzU3ViLGV9dG9BcnJheSgpe2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDx0aGlzLmxlbmd0aDsrK3Qpe2UucHVzaCh0aGlzLnBhcmFtc1t0XSk7Y29uc3QgaT10aGlzLl9zdWJQYXJhbXNJZHhbdF0+Pjgscz0yNTUmdGhpcy5fc3ViUGFyYW1zSWR4W3RdO3MtaT4wJiZlLnB1c2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fc3ViUGFyYW1zLGkscykpfXJldHVybiBlfXJlc2V0KCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9zdWJQYXJhbXNMZW5ndGg9MCx0aGlzLl9yZWplY3REaWdpdHM9ITEsdGhpcy5fcmVqZWN0U3ViRGlnaXRzPSExLHRoaXMuX2RpZ2l0SXNTdWI9ITF9YWRkUGFyYW0oZSl7aWYodGhpcy5fZGlnaXRJc1N1Yj0hMSx0aGlzLmxlbmd0aD49dGhpcy5tYXhMZW5ndGgpdGhpcy5fcmVqZWN0RGlnaXRzPSEwO2Vsc2V7aWYoZTwtMSl0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZXMgbGVzc2VyIHRoYW4gLTEgYXJlIG5vdCBhbGxvd2VkXCIpO3RoaXMuX3N1YlBhcmFtc0lkeFt0aGlzLmxlbmd0aF09dGhpcy5fc3ViUGFyYW1zTGVuZ3RoPDw4fHRoaXMuX3N1YlBhcmFtc0xlbmd0aCx0aGlzLnBhcmFtc1t0aGlzLmxlbmd0aCsrXT1lPmk/aTplfX1hZGRTdWJQYXJhbShlKXtpZih0aGlzLl9kaWdpdElzU3ViPSEwLHRoaXMubGVuZ3RoKWlmKHRoaXMuX3JlamVjdERpZ2l0c3x8dGhpcy5fc3ViUGFyYW1zTGVuZ3RoPj10aGlzLm1heFN1YlBhcmFtc0xlbmd0aCl0aGlzLl9yZWplY3RTdWJEaWdpdHM9ITA7ZWxzZXtpZihlPC0xKXRocm93IG5ldyBFcnJvcihcInZhbHVlcyBsZXNzZXIgdGhhbiAtMSBhcmUgbm90IGFsbG93ZWRcIik7dGhpcy5fc3ViUGFyYW1zW3RoaXMuX3N1YlBhcmFtc0xlbmd0aCsrXT1lPmk/aTplLHRoaXMuX3N1YlBhcmFtc0lkeFt0aGlzLmxlbmd0aC0xXSsrfX1oYXNTdWJQYXJhbXMoZSl7cmV0dXJuKDI1NSZ0aGlzLl9zdWJQYXJhbXNJZHhbZV0pLSh0aGlzLl9zdWJQYXJhbXNJZHhbZV0+PjgpPjB9Z2V0U3ViUGFyYW1zKGUpe2NvbnN0IHQ9dGhpcy5fc3ViUGFyYW1zSWR4W2VdPj44LGk9MjU1JnRoaXMuX3N1YlBhcmFtc0lkeFtlXTtyZXR1cm4gaS10PjA/dGhpcy5fc3ViUGFyYW1zLnN1YmFycmF5KHQsaSk6bnVsbH1nZXRTdWJQYXJhbXNBbGwoKXtjb25zdCBlPXt9O2ZvcihsZXQgdD0wO3Q8dGhpcy5sZW5ndGg7Kyt0KXtjb25zdCBpPXRoaXMuX3N1YlBhcmFtc0lkeFt0XT4+OCxzPTI1NSZ0aGlzLl9zdWJQYXJhbXNJZHhbdF07cy1pPjAmJihlW3RdPXRoaXMuX3N1YlBhcmFtcy5zbGljZShpLHMpKX1yZXR1cm4gZX1hZGREaWdpdChlKXtsZXQgdDtpZih0aGlzLl9yZWplY3REaWdpdHN8fCEodD10aGlzLl9kaWdpdElzU3ViP3RoaXMuX3N1YlBhcmFtc0xlbmd0aDp0aGlzLmxlbmd0aCl8fHRoaXMuX2RpZ2l0SXNTdWImJnRoaXMuX3JlamVjdFN1YkRpZ2l0cylyZXR1cm47Y29uc3Qgcz10aGlzLl9kaWdpdElzU3ViP3RoaXMuX3N1YlBhcmFtczp0aGlzLnBhcmFtcyxyPXNbdC0xXTtzW3QtMV09fnI/TWF0aC5taW4oMTAqcitlLGkpOmV9fXQuUGFyYW1zPXN9LDU3NDE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkFkZG9uTWFuYWdlcj12b2lkIDAsdC5BZGRvbk1hbmFnZXI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9hZGRvbnM9W119ZGlzcG9zZSgpe2ZvcihsZXQgZT10aGlzLl9hZGRvbnMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5fYWRkb25zW2VdLmluc3RhbmNlLmRpc3Bvc2UoKX1sb2FkQWRkb24oZSx0KXtjb25zdCBpPXtpbnN0YW5jZTp0LGRpc3Bvc2U6dC5kaXNwb3NlLGlzRGlzcG9zZWQ6ITF9O3RoaXMuX2FkZG9ucy5wdXNoKGkpLHQuZGlzcG9zZT0oKT0+dGhpcy5fd3JhcHBlZEFkZG9uRGlzcG9zZShpKSx0LmFjdGl2YXRlKGUpfV93cmFwcGVkQWRkb25EaXNwb3NlKGUpe2lmKGUuaXNEaXNwb3NlZClyZXR1cm47bGV0IHQ9LTE7Zm9yKGxldCBpPTA7aTx0aGlzLl9hZGRvbnMubGVuZ3RoO2krKylpZih0aGlzLl9hZGRvbnNbaV09PT1lKXt0PWk7YnJlYWt9aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkaXNwb3NlIGFuIGFkZG9uIHRoYXQgaGFzIG5vdCBiZWVuIGxvYWRlZFwiKTtlLmlzRGlzcG9zZWQ9ITAsZS5kaXNwb3NlLmFwcGx5KGUuaW5zdGFuY2UpLHRoaXMuX2FkZG9ucy5zcGxpY2UodCwxKX19fSw4NzcxOihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1ZmZlckFwaVZpZXc9dm9pZCAwO2NvbnN0IHM9aSgzNzg1KSxyPWkoNTExKTt0LkJ1ZmZlckFwaVZpZXc9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9idWZmZXI9ZSx0aGlzLnR5cGU9dH1pbml0KGUpe3JldHVybiB0aGlzLl9idWZmZXI9ZSx0aGlzfWdldCBjdXJzb3JZKCl7cmV0dXJuIHRoaXMuX2J1ZmZlci55fWdldCBjdXJzb3JYKCl7cmV0dXJuIHRoaXMuX2J1ZmZlci54fWdldCB2aWV3cG9ydFkoKXtyZXR1cm4gdGhpcy5fYnVmZmVyLnlkaXNwfWdldCBiYXNlWSgpe3JldHVybiB0aGlzLl9idWZmZXIueWJhc2V9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9idWZmZXIubGluZXMubGVuZ3RofWdldExpbmUoZSl7Y29uc3QgdD10aGlzLl9idWZmZXIubGluZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIG5ldyBzLkJ1ZmZlckxpbmVBcGlWaWV3KHQpfWdldE51bGxDZWxsKCl7cmV0dXJuIG5ldyByLkNlbGxEYXRhfX19LDM3ODU6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnVmZmVyTGluZUFwaVZpZXc9dm9pZCAwO2NvbnN0IHM9aSg1MTEpO3QuQnVmZmVyTGluZUFwaVZpZXc9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fbGluZT1lfWdldCBpc1dyYXBwZWQoKXtyZXR1cm4gdGhpcy5fbGluZS5pc1dyYXBwZWR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9saW5lLmxlbmd0aH1nZXRDZWxsKGUsdCl7aWYoIShlPDB8fGU+PXRoaXMuX2xpbmUubGVuZ3RoKSlyZXR1cm4gdD8odGhpcy5fbGluZS5sb2FkQ2VsbChlLHQpLHQpOnRoaXMuX2xpbmUubG9hZENlbGwoZSxuZXcgcy5DZWxsRGF0YSl9dHJhbnNsYXRlVG9TdHJpbmcoZSx0LGkpe3JldHVybiB0aGlzLl9saW5lLnRyYW5zbGF0ZVRvU3RyaW5nKGUsdCxpKX19fSw4Mjg1OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkJ1ZmZlck5hbWVzcGFjZUFwaT12b2lkIDA7Y29uc3Qgcz1pKDg3NzEpLHI9aSg4NDYwKSxuPWkoODQ0KTtjbGFzcyBvIGV4dGVuZHMgbi5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fY29yZT1lLHRoaXMuX29uQnVmZmVyQ2hhbmdlPXRoaXMucmVnaXN0ZXIobmV3IHIuRXZlbnRFbWl0dGVyKSx0aGlzLm9uQnVmZmVyQ2hhbmdlPXRoaXMuX29uQnVmZmVyQ2hhbmdlLmV2ZW50LHRoaXMuX25vcm1hbD1uZXcgcy5CdWZmZXJBcGlWaWV3KHRoaXMuX2NvcmUuYnVmZmVycy5ub3JtYWwsXCJub3JtYWxcIiksdGhpcy5fYWx0ZXJuYXRlPW5ldyBzLkJ1ZmZlckFwaVZpZXcodGhpcy5fY29yZS5idWZmZXJzLmFsdCxcImFsdGVybmF0ZVwiKSx0aGlzLl9jb3JlLmJ1ZmZlcnMub25CdWZmZXJBY3RpdmF0ZSgoKCk9PnRoaXMuX29uQnVmZmVyQ2hhbmdlLmZpcmUodGhpcy5hY3RpdmUpKSl9Z2V0IGFjdGl2ZSgpe2lmKHRoaXMuX2NvcmUuYnVmZmVycy5hY3RpdmU9PT10aGlzLl9jb3JlLmJ1ZmZlcnMubm9ybWFsKXJldHVybiB0aGlzLm5vcm1hbDtpZih0aGlzLl9jb3JlLmJ1ZmZlcnMuYWN0aXZlPT09dGhpcy5fY29yZS5idWZmZXJzLmFsdClyZXR1cm4gdGhpcy5hbHRlcm5hdGU7dGhyb3cgbmV3IEVycm9yKFwiQWN0aXZlIGJ1ZmZlciBpcyBuZWl0aGVyIG5vcm1hbCBub3IgYWx0ZXJuYXRlXCIpfWdldCBub3JtYWwoKXtyZXR1cm4gdGhpcy5fbm9ybWFsLmluaXQodGhpcy5fY29yZS5idWZmZXJzLm5vcm1hbCl9Z2V0IGFsdGVybmF0ZSgpe3JldHVybiB0aGlzLl9hbHRlcm5hdGUuaW5pdCh0aGlzLl9jb3JlLmJ1ZmZlcnMuYWx0KX19dC5CdWZmZXJOYW1lc3BhY2VBcGk9b30sNzk3NTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuUGFyc2VyQXBpPXZvaWQgMCx0LlBhcnNlckFwaT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9jb3JlPWV9cmVnaXN0ZXJDc2lIYW5kbGVyKGUsdCl7cmV0dXJuIHRoaXMuX2NvcmUucmVnaXN0ZXJDc2lIYW5kbGVyKGUsKGU9PnQoZS50b0FycmF5KCkpKSl9YWRkQ3NpSGFuZGxlcihlLHQpe3JldHVybiB0aGlzLnJlZ2lzdGVyQ3NpSGFuZGxlcihlLHQpfXJlZ2lzdGVyRGNzSGFuZGxlcihlLHQpe3JldHVybiB0aGlzLl9jb3JlLnJlZ2lzdGVyRGNzSGFuZGxlcihlLCgoZSxpKT0+dChlLGkudG9BcnJheSgpKSkpfWFkZERjc0hhbmRsZXIoZSx0KXtyZXR1cm4gdGhpcy5yZWdpc3RlckRjc0hhbmRsZXIoZSx0KX1yZWdpc3RlckVzY0hhbmRsZXIoZSx0KXtyZXR1cm4gdGhpcy5fY29yZS5yZWdpc3RlckVzY0hhbmRsZXIoZSx0KX1hZGRFc2NIYW5kbGVyKGUsdCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJFc2NIYW5kbGVyKGUsdCl9cmVnaXN0ZXJPc2NIYW5kbGVyKGUsdCl7cmV0dXJuIHRoaXMuX2NvcmUucmVnaXN0ZXJPc2NIYW5kbGVyKGUsdCl9YWRkT3NjSGFuZGxlcihlLHQpe3JldHVybiB0aGlzLnJlZ2lzdGVyT3NjSGFuZGxlcihlLHQpfX19LDcwOTA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVuaWNvZGVBcGk9dm9pZCAwLHQuVW5pY29kZUFwaT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9jb3JlPWV9cmVnaXN0ZXIoZSl7dGhpcy5fY29yZS51bmljb2RlU2VydmljZS5yZWdpc3RlcihlKX1nZXQgdmVyc2lvbnMoKXtyZXR1cm4gdGhpcy5fY29yZS51bmljb2RlU2VydmljZS52ZXJzaW9uc31nZXQgYWN0aXZlVmVyc2lvbigpe3JldHVybiB0aGlzLl9jb3JlLnVuaWNvZGVTZXJ2aWNlLmFjdGl2ZVZlcnNpb259c2V0IGFjdGl2ZVZlcnNpb24oZSl7dGhpcy5fY29yZS51bmljb2RlU2VydmljZS5hY3RpdmVWZXJzaW9uPWV9fX0sNzQ0OmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzJiZ0aGlzLl9fZGVjb3JhdGV8fGZ1bmN0aW9uKGUsdCxpLHMpe3ZhciByLG49YXJndW1lbnRzLmxlbmd0aCxvPW48Mz90Om51bGw9PT1zP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpOnM7aWYoXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxpLHMpO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKHI9ZVthXSkmJihvPShuPDM/cihvKTpuPjM/cih0LGksbyk6cih0LGkpKXx8byk7cmV0dXJuIG4+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvKSxvfSxyPXRoaXMmJnRoaXMuX19wYXJhbXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXt0KGkscyxlKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuQnVmZmVyU2VydmljZT10Lk1JTklNVU1fUk9XUz10Lk1JTklNVU1fQ09MUz12b2lkIDA7Y29uc3Qgbj1pKDg0NjApLG89aSg4NDQpLGE9aSg1Mjk1KSxoPWkoMjU4NSk7dC5NSU5JTVVNX0NPTFM9Mix0Lk1JTklNVU1fUk9XUz0xO2xldCBjPXQuQnVmZmVyU2VydmljZT1jbGFzcyBleHRlbmRzIG8uRGlzcG9zYWJsZXtnZXQgYnVmZmVyKCl7cmV0dXJuIHRoaXMuYnVmZmVycy5hY3RpdmV9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmlzVXNlclNjcm9sbGluZz0hMSx0aGlzLl9vblJlc2l6ZT10aGlzLnJlZ2lzdGVyKG5ldyBuLkV2ZW50RW1pdHRlciksdGhpcy5vblJlc2l6ZT10aGlzLl9vblJlc2l6ZS5ldmVudCx0aGlzLl9vblNjcm9sbD10aGlzLnJlZ2lzdGVyKG5ldyBuLkV2ZW50RW1pdHRlciksdGhpcy5vblNjcm9sbD10aGlzLl9vblNjcm9sbC5ldmVudCx0aGlzLmNvbHM9TWF0aC5tYXgoZS5yYXdPcHRpb25zLmNvbHN8fDAsdC5NSU5JTVVNX0NPTFMpLHRoaXMucm93cz1NYXRoLm1heChlLnJhd09wdGlvbnMucm93c3x8MCx0Lk1JTklNVU1fUk9XUyksdGhpcy5idWZmZXJzPXRoaXMucmVnaXN0ZXIobmV3IGEuQnVmZmVyU2V0KGUsdGhpcykpfXJlc2l6ZShlLHQpe3RoaXMuY29scz1lLHRoaXMucm93cz10LHRoaXMuYnVmZmVycy5yZXNpemUoZSx0KSx0aGlzLl9vblJlc2l6ZS5maXJlKHtjb2xzOmUscm93czp0fSl9cmVzZXQoKXt0aGlzLmJ1ZmZlcnMucmVzZXQoKSx0aGlzLmlzVXNlclNjcm9sbGluZz0hMX1zY3JvbGwoZSx0PSExKXtjb25zdCBpPXRoaXMuYnVmZmVyO2xldCBzO3M9dGhpcy5fY2FjaGVkQmxhbmtMaW5lLHMmJnMubGVuZ3RoPT09dGhpcy5jb2xzJiZzLmdldEZnKDApPT09ZS5mZyYmcy5nZXRCZygwKT09PWUuYmd8fChzPWkuZ2V0QmxhbmtMaW5lKGUsdCksdGhpcy5fY2FjaGVkQmxhbmtMaW5lPXMpLHMuaXNXcmFwcGVkPXQ7Y29uc3Qgcj1pLnliYXNlK2kuc2Nyb2xsVG9wLG49aS55YmFzZStpLnNjcm9sbEJvdHRvbTtpZigwPT09aS5zY3JvbGxUb3Ape2NvbnN0IGU9aS5saW5lcy5pc0Z1bGw7bj09PWkubGluZXMubGVuZ3RoLTE/ZT9pLmxpbmVzLnJlY3ljbGUoKS5jb3B5RnJvbShzKTppLmxpbmVzLnB1c2gocy5jbG9uZSgpKTppLmxpbmVzLnNwbGljZShuKzEsMCxzLmNsb25lKCkpLGU/dGhpcy5pc1VzZXJTY3JvbGxpbmcmJihpLnlkaXNwPU1hdGgubWF4KGkueWRpc3AtMSwwKSk6KGkueWJhc2UrKyx0aGlzLmlzVXNlclNjcm9sbGluZ3x8aS55ZGlzcCsrKX1lbHNle2NvbnN0IGU9bi1yKzE7aS5saW5lcy5zaGlmdEVsZW1lbnRzKHIrMSxlLTEsLTEpLGkubGluZXMuc2V0KG4scy5jbG9uZSgpKX10aGlzLmlzVXNlclNjcm9sbGluZ3x8KGkueWRpc3A9aS55YmFzZSksdGhpcy5fb25TY3JvbGwuZmlyZShpLnlkaXNwKX1zY3JvbGxMaW5lcyhlLHQsaSl7Y29uc3Qgcz10aGlzLmJ1ZmZlcjtpZihlPDApe2lmKDA9PT1zLnlkaXNwKXJldHVybjt0aGlzLmlzVXNlclNjcm9sbGluZz0hMH1lbHNlIGUrcy55ZGlzcD49cy55YmFzZSYmKHRoaXMuaXNVc2VyU2Nyb2xsaW5nPSExKTtjb25zdCByPXMueWRpc3A7cy55ZGlzcD1NYXRoLm1heChNYXRoLm1pbihzLnlkaXNwK2Uscy55YmFzZSksMCksciE9PXMueWRpc3AmJih0fHx0aGlzLl9vblNjcm9sbC5maXJlKHMueWRpc3ApKX19O3QuQnVmZmVyU2VydmljZT1jPXMoW3IoMCxoLklPcHRpb25zU2VydmljZSldLGMpfSw3OTk0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5DaGFyc2V0U2VydmljZT12b2lkIDAsdC5DaGFyc2V0U2VydmljZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZ2xldmVsPTAsdGhpcy5fY2hhcnNldHM9W119cmVzZXQoKXt0aGlzLmNoYXJzZXQ9dm9pZCAwLHRoaXMuX2NoYXJzZXRzPVtdLHRoaXMuZ2xldmVsPTB9c2V0Z0xldmVsKGUpe3RoaXMuZ2xldmVsPWUsdGhpcy5jaGFyc2V0PXRoaXMuX2NoYXJzZXRzW2VdfXNldGdDaGFyc2V0KGUsdCl7dGhpcy5fY2hhcnNldHNbZV09dCx0aGlzLmdsZXZlbD09PWUmJih0aGlzLmNoYXJzZXQ9dCl9fX0sMTc1MzpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvcmVNb3VzZVNlcnZpY2U9dm9pZCAwO2NvbnN0IG49aSgyNTg1KSxvPWkoODQ2MCksYT1pKDg0NCksaD17Tk9ORTp7ZXZlbnRzOjAscmVzdHJpY3Q6KCk9PiExfSxYMTA6e2V2ZW50czoxLHJlc3RyaWN0OmU9PjQhPT1lLmJ1dHRvbiYmMT09PWUuYWN0aW9uJiYoZS5jdHJsPSExLGUuYWx0PSExLGUuc2hpZnQ9ITEsITApfSxWVDIwMDp7ZXZlbnRzOjE5LHJlc3RyaWN0OmU9PjMyIT09ZS5hY3Rpb259LERSQUc6e2V2ZW50czoyMyxyZXN0cmljdDplPT4zMiE9PWUuYWN0aW9ufHwzIT09ZS5idXR0b259LEFOWTp7ZXZlbnRzOjMxLHJlc3RyaWN0OmU9PiEwfX07ZnVuY3Rpb24gYyhlLHQpe2xldCBpPShlLmN0cmw/MTY6MCl8KGUuc2hpZnQ/NDowKXwoZS5hbHQ/ODowKTtyZXR1cm4gND09PWUuYnV0dG9uPyhpfD02NCxpfD1lLmFjdGlvbik6KGl8PTMmZS5idXR0b24sNCZlLmJ1dHRvbiYmKGl8PTY0KSw4JmUuYnV0dG9uJiYoaXw9MTI4KSwzMj09PWUuYWN0aW9uP2l8PTMyOjAhPT1lLmFjdGlvbnx8dHx8KGl8PTMpKSxpfWNvbnN0IGw9U3RyaW5nLmZyb21DaGFyQ29kZSxkPXtERUZBVUxUOmU9Pntjb25zdCB0PVtjKGUsITEpKzMyLGUuY29sKzMyLGUucm93KzMyXTtyZXR1cm4gdFswXT4yNTV8fHRbMV0+MjU1fHx0WzJdPjI1NT9cIlwiOmBcdTAwMWJbTSR7bCh0WzBdKX0ke2wodFsxXSl9JHtsKHRbMl0pfWB9LFNHUjplPT57Y29uc3QgdD0wPT09ZS5hY3Rpb24mJjQhPT1lLmJ1dHRvbj9cIm1cIjpcIk1cIjtyZXR1cm5gXHUwMDFiWzwke2MoZSwhMCl9OyR7ZS5jb2x9OyR7ZS5yb3d9JHt0fWB9LFNHUl9QSVhFTFM6ZT0+e2NvbnN0IHQ9MD09PWUuYWN0aW9uJiY0IT09ZS5idXR0b24/XCJtXCI6XCJNXCI7cmV0dXJuYFx1MDAxYls8JHtjKGUsITApfTske2UueH07JHtlLnl9JHt0fWB9fTtsZXQgXz10LkNvcmVNb3VzZVNlcnZpY2U9Y2xhc3MgZXh0ZW5kcyBhLkRpc3Bvc2FibGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuX2J1ZmZlclNlcnZpY2U9ZSx0aGlzLl9jb3JlU2VydmljZT10LHRoaXMuX3Byb3RvY29scz17fSx0aGlzLl9lbmNvZGluZ3M9e30sdGhpcy5fYWN0aXZlUHJvdG9jb2w9XCJcIix0aGlzLl9hY3RpdmVFbmNvZGluZz1cIlwiLHRoaXMuX2xhc3RFdmVudD1udWxsLHRoaXMuX29uUHJvdG9jb2xDaGFuZ2U9dGhpcy5yZWdpc3RlcihuZXcgby5FdmVudEVtaXR0ZXIpLHRoaXMub25Qcm90b2NvbENoYW5nZT10aGlzLl9vblByb3RvY29sQ2hhbmdlLmV2ZW50O2Zvcihjb25zdCBlIG9mIE9iamVjdC5rZXlzKGgpKXRoaXMuYWRkUHJvdG9jb2woZSxoW2VdKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhkKSl0aGlzLmFkZEVuY29kaW5nKGUsZFtlXSk7dGhpcy5yZXNldCgpfWFkZFByb3RvY29sKGUsdCl7dGhpcy5fcHJvdG9jb2xzW2VdPXR9YWRkRW5jb2RpbmcoZSx0KXt0aGlzLl9lbmNvZGluZ3NbZV09dH1nZXQgYWN0aXZlUHJvdG9jb2woKXtyZXR1cm4gdGhpcy5fYWN0aXZlUHJvdG9jb2x9Z2V0IGFyZU1vdXNlRXZlbnRzQWN0aXZlKCl7cmV0dXJuIDAhPT10aGlzLl9wcm90b2NvbHNbdGhpcy5fYWN0aXZlUHJvdG9jb2xdLmV2ZW50c31zZXQgYWN0aXZlUHJvdG9jb2woZSl7aWYoIXRoaXMuX3Byb3RvY29sc1tlXSl0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gcHJvdG9jb2wgXCIke2V9XCJgKTt0aGlzLl9hY3RpdmVQcm90b2NvbD1lLHRoaXMuX29uUHJvdG9jb2xDaGFuZ2UuZmlyZSh0aGlzLl9wcm90b2NvbHNbZV0uZXZlbnRzKX1nZXQgYWN0aXZlRW5jb2RpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlRW5jb2Rpbmd9c2V0IGFjdGl2ZUVuY29kaW5nKGUpe2lmKCF0aGlzLl9lbmNvZGluZ3NbZV0pdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGVuY29kaW5nIFwiJHtlfVwiYCk7dGhpcy5fYWN0aXZlRW5jb2Rpbmc9ZX1yZXNldCgpe3RoaXMuYWN0aXZlUHJvdG9jb2w9XCJOT05FXCIsdGhpcy5hY3RpdmVFbmNvZGluZz1cIkRFRkFVTFRcIix0aGlzLl9sYXN0RXZlbnQ9bnVsbH10cmlnZ2VyTW91c2VFdmVudChlKXtpZihlLmNvbDwwfHxlLmNvbD49dGhpcy5fYnVmZmVyU2VydmljZS5jb2xzfHxlLnJvdzwwfHxlLnJvdz49dGhpcy5fYnVmZmVyU2VydmljZS5yb3dzKXJldHVybiExO2lmKDQ9PT1lLmJ1dHRvbiYmMzI9PT1lLmFjdGlvbilyZXR1cm4hMTtpZigzPT09ZS5idXR0b24mJjMyIT09ZS5hY3Rpb24pcmV0dXJuITE7aWYoNCE9PWUuYnV0dG9uJiYoMj09PWUuYWN0aW9ufHwzPT09ZS5hY3Rpb24pKXJldHVybiExO2lmKGUuY29sKyssZS5yb3crKywzMj09PWUuYWN0aW9uJiZ0aGlzLl9sYXN0RXZlbnQmJnRoaXMuX2VxdWFsRXZlbnRzKHRoaXMuX2xhc3RFdmVudCxlLFwiU0dSX1BJWEVMU1wiPT09dGhpcy5fYWN0aXZlRW5jb2RpbmcpKXJldHVybiExO2lmKCF0aGlzLl9wcm90b2NvbHNbdGhpcy5fYWN0aXZlUHJvdG9jb2xdLnJlc3RyaWN0KGUpKXJldHVybiExO2NvbnN0IHQ9dGhpcy5fZW5jb2RpbmdzW3RoaXMuX2FjdGl2ZUVuY29kaW5nXShlKTtyZXR1cm4gdCYmKFwiREVGQVVMVFwiPT09dGhpcy5fYWN0aXZlRW5jb2Rpbmc/dGhpcy5fY29yZVNlcnZpY2UudHJpZ2dlckJpbmFyeUV2ZW50KHQpOnRoaXMuX2NvcmVTZXJ2aWNlLnRyaWdnZXJEYXRhRXZlbnQodCwhMCkpLHRoaXMuX2xhc3RFdmVudD1lLCEwfWV4cGxhaW5FdmVudHMoZSl7cmV0dXJue2Rvd246ISEoMSZlKSx1cDohISgyJmUpLGRyYWc6ISEoNCZlKSxtb3ZlOiEhKDgmZSksd2hlZWw6ISEoMTYmZSl9fV9lcXVhbEV2ZW50cyhlLHQsaSl7aWYoaSl7aWYoZS54IT09dC54KXJldHVybiExO2lmKGUueSE9PXQueSlyZXR1cm4hMX1lbHNle2lmKGUuY29sIT09dC5jb2wpcmV0dXJuITE7aWYoZS5yb3chPT10LnJvdylyZXR1cm4hMX1yZXR1cm4gZS5idXR0b249PT10LmJ1dHRvbiYmZS5hY3Rpb249PT10LmFjdGlvbiYmZS5jdHJsPT09dC5jdHJsJiZlLmFsdD09PXQuYWx0JiZlLnNoaWZ0PT09dC5zaGlmdH19O3QuQ29yZU1vdXNlU2VydmljZT1fPXMoW3IoMCxuLklCdWZmZXJTZXJ2aWNlKSxyKDEsbi5JQ29yZVNlcnZpY2UpXSxfKX0sNjk3NTpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkNvcmVTZXJ2aWNlPXZvaWQgMDtjb25zdCBuPWkoMTQzOSksbz1pKDg0NjApLGE9aSg4NDQpLGg9aSgyNTg1KSxjPU9iamVjdC5mcmVlemUoe2luc2VydE1vZGU6ITF9KSxsPU9iamVjdC5mcmVlemUoe2FwcGxpY2F0aW9uQ3Vyc29yS2V5czohMSxhcHBsaWNhdGlvbktleXBhZDohMSxicmFja2V0ZWRQYXN0ZU1vZGU6ITEsb3JpZ2luOiExLHJldmVyc2VXcmFwYXJvdW5kOiExLHNlbmRGb2N1czohMSx3cmFwYXJvdW5kOiEwfSk7bGV0IGQ9dC5Db3JlU2VydmljZT1jbGFzcyBleHRlbmRzIGEuRGlzcG9zYWJsZXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoKSx0aGlzLl9idWZmZXJTZXJ2aWNlPWUsdGhpcy5fbG9nU2VydmljZT10LHRoaXMuX29wdGlvbnNTZXJ2aWNlPWksdGhpcy5pc0N1cnNvckluaXRpYWxpemVkPSExLHRoaXMuaXNDdXJzb3JIaWRkZW49ITEsdGhpcy5fb25EYXRhPXRoaXMucmVnaXN0ZXIobmV3IG8uRXZlbnRFbWl0dGVyKSx0aGlzLm9uRGF0YT10aGlzLl9vbkRhdGEuZXZlbnQsdGhpcy5fb25Vc2VySW5wdXQ9dGhpcy5yZWdpc3RlcihuZXcgby5FdmVudEVtaXR0ZXIpLHRoaXMub25Vc2VySW5wdXQ9dGhpcy5fb25Vc2VySW5wdXQuZXZlbnQsdGhpcy5fb25CaW5hcnk9dGhpcy5yZWdpc3RlcihuZXcgby5FdmVudEVtaXR0ZXIpLHRoaXMub25CaW5hcnk9dGhpcy5fb25CaW5hcnkuZXZlbnQsdGhpcy5fb25SZXF1ZXN0U2Nyb2xsVG9Cb3R0b209dGhpcy5yZWdpc3RlcihuZXcgby5FdmVudEVtaXR0ZXIpLHRoaXMub25SZXF1ZXN0U2Nyb2xsVG9Cb3R0b209dGhpcy5fb25SZXF1ZXN0U2Nyb2xsVG9Cb3R0b20uZXZlbnQsdGhpcy5tb2Rlcz0oMCxuLmNsb25lKShjKSx0aGlzLmRlY1ByaXZhdGVNb2Rlcz0oMCxuLmNsb25lKShsKX1yZXNldCgpe3RoaXMubW9kZXM9KDAsbi5jbG9uZSkoYyksdGhpcy5kZWNQcml2YXRlTW9kZXM9KDAsbi5jbG9uZSkobCl9dHJpZ2dlckRhdGFFdmVudChlLHQ9ITEpe2lmKHRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuZGlzYWJsZVN0ZGluKXJldHVybjtjb25zdCBpPXRoaXMuX2J1ZmZlclNlcnZpY2UuYnVmZmVyO3QmJnRoaXMuX29wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuc2Nyb2xsT25Vc2VySW5wdXQmJmkueWJhc2UhPT1pLnlkaXNwJiZ0aGlzLl9vblJlcXVlc3RTY3JvbGxUb0JvdHRvbS5maXJlKCksdCYmdGhpcy5fb25Vc2VySW5wdXQuZmlyZSgpLHRoaXMuX2xvZ1NlcnZpY2UuZGVidWcoYHNlbmRpbmcgZGF0YSBcIiR7ZX1cImAsKCgpPT5lLnNwbGl0KFwiXCIpLm1hcCgoZT0+ZS5jaGFyQ29kZUF0KDApKSkpKSx0aGlzLl9vbkRhdGEuZmlyZShlKX10cmlnZ2VyQmluYXJ5RXZlbnQoZSl7dGhpcy5fb3B0aW9uc1NlcnZpY2UucmF3T3B0aW9ucy5kaXNhYmxlU3RkaW58fCh0aGlzLl9sb2dTZXJ2aWNlLmRlYnVnKGBzZW5kaW5nIGJpbmFyeSBcIiR7ZX1cImAsKCgpPT5lLnNwbGl0KFwiXCIpLm1hcCgoZT0+ZS5jaGFyQ29kZUF0KDApKSkpKSx0aGlzLl9vbkJpbmFyeS5maXJlKGUpKX19O3QuQ29yZVNlcnZpY2U9ZD1zKFtyKDAsaC5JQnVmZmVyU2VydmljZSkscigxLGguSUxvZ1NlcnZpY2UpLHIoMixoLklPcHRpb25zU2VydmljZSldLGQpfSw5MDc0OihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LkRlY29yYXRpb25TZXJ2aWNlPXZvaWQgMDtjb25zdCBzPWkoODA1NSkscj1pKDg0NjApLG49aSg4NDQpLG89aSg2MTA2KTtsZXQgYT0wLGg9MDtjbGFzcyBjIGV4dGVuZHMgbi5EaXNwb3NhYmxle2dldCBkZWNvcmF0aW9ucygpe3JldHVybiB0aGlzLl9kZWNvcmF0aW9ucy52YWx1ZXMoKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZGVjb3JhdGlvbnM9bmV3IG8uU29ydGVkTGlzdCgoZT0+ZT8ubWFya2VyLmxpbmUpKSx0aGlzLl9vbkRlY29yYXRpb25SZWdpc3RlcmVkPXRoaXMucmVnaXN0ZXIobmV3IHIuRXZlbnRFbWl0dGVyKSx0aGlzLm9uRGVjb3JhdGlvblJlZ2lzdGVyZWQ9dGhpcy5fb25EZWNvcmF0aW9uUmVnaXN0ZXJlZC5ldmVudCx0aGlzLl9vbkRlY29yYXRpb25SZW1vdmVkPXRoaXMucmVnaXN0ZXIobmV3IHIuRXZlbnRFbWl0dGVyKSx0aGlzLm9uRGVjb3JhdGlvblJlbW92ZWQ9dGhpcy5fb25EZWNvcmF0aW9uUmVtb3ZlZC5ldmVudCx0aGlzLnJlZ2lzdGVyKCgwLG4udG9EaXNwb3NhYmxlKSgoKCk9PnRoaXMucmVzZXQoKSkpKX1yZWdpc3RlckRlY29yYXRpb24oZSl7aWYoZS5tYXJrZXIuaXNEaXNwb3NlZClyZXR1cm47Y29uc3QgdD1uZXcgbChlKTtpZih0KXtjb25zdCBlPXQubWFya2VyLm9uRGlzcG9zZSgoKCk9PnQuZGlzcG9zZSgpKSk7dC5vbkRpc3Bvc2UoKCgpPT57dCYmKHRoaXMuX2RlY29yYXRpb25zLmRlbGV0ZSh0KSYmdGhpcy5fb25EZWNvcmF0aW9uUmVtb3ZlZC5maXJlKHQpLGUuZGlzcG9zZSgpKX0pKSx0aGlzLl9kZWNvcmF0aW9ucy5pbnNlcnQodCksdGhpcy5fb25EZWNvcmF0aW9uUmVnaXN0ZXJlZC5maXJlKHQpfXJldHVybiB0fXJlc2V0KCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fZGVjb3JhdGlvbnMudmFsdWVzKCkpZS5kaXNwb3NlKCk7dGhpcy5fZGVjb3JhdGlvbnMuY2xlYXIoKX0qZ2V0RGVjb3JhdGlvbnNBdENlbGwoZSx0LGkpe2xldCBzPTAscj0wO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlY29yYXRpb25zLmdldEtleUl0ZXJhdG9yKHQpKXM9bi5vcHRpb25zLng/PzAscj1zKyhuLm9wdGlvbnMud2lkdGg/PzEpLGU+PXMmJmU8ciYmKCFpfHwobi5vcHRpb25zLmxheWVyPz9cImJvdHRvbVwiKT09PWkpJiYoeWllbGQgbil9Zm9yRWFjaERlY29yYXRpb25BdENlbGwoZSx0LGkscyl7dGhpcy5fZGVjb3JhdGlvbnMuZm9yRWFjaEJ5S2V5KHQsKHQ9PnthPXQub3B0aW9ucy54Pz8wLGg9YSsodC5vcHRpb25zLndpZHRoPz8xKSxlPj1hJiZlPGgmJighaXx8KHQub3B0aW9ucy5sYXllcj8/XCJib3R0b21cIik9PT1pKSYmcyh0KX0pKX19dC5EZWNvcmF0aW9uU2VydmljZT1jO2NsYXNzIGwgZXh0ZW5kcyBuLkRpc3Bvc2FibGV7Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1nZXQgYmFja2dyb3VuZENvbG9yUkdCKCl7cmV0dXJuIG51bGw9PT10aGlzLl9jYWNoZWRCZyYmKHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3I/dGhpcy5fY2FjaGVkQmc9cy5jc3MudG9Db2xvcih0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yKTp0aGlzLl9jYWNoZWRCZz12b2lkIDApLHRoaXMuX2NhY2hlZEJnfWdldCBmb3JlZ3JvdW5kQ29sb3JSR0IoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2NhY2hlZEZnJiYodGhpcy5vcHRpb25zLmZvcmVncm91bmRDb2xvcj90aGlzLl9jYWNoZWRGZz1zLmNzcy50b0NvbG9yKHRoaXMub3B0aW9ucy5mb3JlZ3JvdW5kQ29sb3IpOnRoaXMuX2NhY2hlZEZnPXZvaWQgMCksdGhpcy5fY2FjaGVkRmd9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9wdGlvbnM9ZSx0aGlzLm9uUmVuZGVyRW1pdHRlcj10aGlzLnJlZ2lzdGVyKG5ldyByLkV2ZW50RW1pdHRlciksdGhpcy5vblJlbmRlcj10aGlzLm9uUmVuZGVyRW1pdHRlci5ldmVudCx0aGlzLl9vbkRpc3Bvc2U9dGhpcy5yZWdpc3RlcihuZXcgci5FdmVudEVtaXR0ZXIpLHRoaXMub25EaXNwb3NlPXRoaXMuX29uRGlzcG9zZS5ldmVudCx0aGlzLl9jYWNoZWRCZz1udWxsLHRoaXMuX2NhY2hlZEZnPW51bGwsdGhpcy5tYXJrZXI9ZS5tYXJrZXIsdGhpcy5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zJiYhdGhpcy5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zLnBvc2l0aW9uJiYodGhpcy5vcHRpb25zLm92ZXJ2aWV3UnVsZXJPcHRpb25zLnBvc2l0aW9uPVwiZnVsbFwiKX1kaXNwb3NlKCl7dGhpcy5fb25EaXNwb3NlLmZpcmUoKSxzdXBlci5kaXNwb3NlKCl9fX0sNDM0ODooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5JbnN0YW50aWF0aW9uU2VydmljZT10LlNlcnZpY2VDb2xsZWN0aW9uPXZvaWQgMDtjb25zdCBzPWkoMjU4NSkscj1pKDgzNDMpO2NsYXNzIG57Y29uc3RydWN0b3IoLi4uZSl7dGhpcy5fZW50cmllcz1uZXcgTWFwO2Zvcihjb25zdFt0LGldb2YgZSl0aGlzLnNldCh0LGkpfXNldChlLHQpe2NvbnN0IGk9dGhpcy5fZW50cmllcy5nZXQoZSk7cmV0dXJuIHRoaXMuX2VudHJpZXMuc2V0KGUsdCksaX1mb3JFYWNoKGUpe2Zvcihjb25zdFt0LGldb2YgdGhpcy5fZW50cmllcy5lbnRyaWVzKCkpZSh0LGkpfWhhcyhlKXtyZXR1cm4gdGhpcy5fZW50cmllcy5oYXMoZSl9Z2V0KGUpe3JldHVybiB0aGlzLl9lbnRyaWVzLmdldChlKX19dC5TZXJ2aWNlQ29sbGVjdGlvbj1uLHQuSW5zdGFudGlhdGlvblNlcnZpY2U9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9zZXJ2aWNlcz1uZXcgbix0aGlzLl9zZXJ2aWNlcy5zZXQocy5JSW5zdGFudGlhdGlvblNlcnZpY2UsdGhpcyl9c2V0U2VydmljZShlLHQpe3RoaXMuX3NlcnZpY2VzLnNldChlLHQpfWdldFNlcnZpY2UoZSl7cmV0dXJuIHRoaXMuX3NlcnZpY2VzLmdldChlKX1jcmVhdGVJbnN0YW5jZShlLC4uLnQpe2NvbnN0IGk9KDAsci5nZXRTZXJ2aWNlRGVwZW5kZW5jaWVzKShlKS5zb3J0KCgoZSx0KT0+ZS5pbmRleC10LmluZGV4KSkscz1bXTtmb3IoY29uc3QgdCBvZiBpKXtjb25zdCBpPXRoaXMuX3NlcnZpY2VzLmdldCh0LmlkKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFtjcmVhdGVJbnN0YW5jZV0gJHtlLm5hbWV9IGRlcGVuZHMgb24gVU5LTk9XTiBzZXJ2aWNlICR7dC5pZH0uYCk7cy5wdXNoKGkpfWNvbnN0IG49aS5sZW5ndGg+MD9pWzBdLmluZGV4OnQubGVuZ3RoO2lmKHQubGVuZ3RoIT09bil0aHJvdyBuZXcgRXJyb3IoYFtjcmVhdGVJbnN0YW5jZV0gRmlyc3Qgc2VydmljZSBkZXBlbmRlbmN5IG9mICR7ZS5uYW1lfSBhdCBwb3NpdGlvbiAke24rMX0gY29uZmxpY3RzIHdpdGggJHt0Lmxlbmd0aH0gc3RhdGljIGFyZ3VtZW50c2ApO3JldHVybiBuZXcgZSguLi5bLi4udCwuLi5zXSl9fX0sNzg2NjpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcyYmdGhpcy5fX2RlY29yYXRlfHxmdW5jdGlvbihlLHQsaSxzKXt2YXIgcixuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPDM/dDpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTpzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKW89UmVmbGVjdC5kZWNvcmF0ZShlLHQsaSxzKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShyPWVbYV0pJiYobz0objwzP3Iobyk6bj4zP3IodCxpLG8pOnIodCxpKSl8fG8pO3JldHVybiBuPjMmJm8mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGksbyksb30scj10aGlzJiZ0aGlzLl9fcGFyYW18fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7dChpLHMsZSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnRyYWNlQ2FsbD10LnNldFRyYWNlTG9nZ2VyPXQuTG9nU2VydmljZT12b2lkIDA7Y29uc3Qgbj1pKDg0NCksbz1pKDI1ODUpLGE9e3RyYWNlOm8uTG9nTGV2ZWxFbnVtLlRSQUNFLGRlYnVnOm8uTG9nTGV2ZWxFbnVtLkRFQlVHLGluZm86by5Mb2dMZXZlbEVudW0uSU5GTyx3YXJuOm8uTG9nTGV2ZWxFbnVtLldBUk4sZXJyb3I6by5Mb2dMZXZlbEVudW0uRVJST1Isb2ZmOm8uTG9nTGV2ZWxFbnVtLk9GRn07bGV0IGgsYz10LkxvZ1NlcnZpY2U9Y2xhc3MgZXh0ZW5kcyBuLkRpc3Bvc2FibGV7Z2V0IGxvZ0xldmVsKCl7cmV0dXJuIHRoaXMuX2xvZ0xldmVsfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fb3B0aW9uc1NlcnZpY2U9ZSx0aGlzLl9sb2dMZXZlbD1vLkxvZ0xldmVsRW51bS5PRkYsdGhpcy5fdXBkYXRlTG9nTGV2ZWwoKSx0aGlzLnJlZ2lzdGVyKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9uU3BlY2lmaWNPcHRpb25DaGFuZ2UoXCJsb2dMZXZlbFwiLCgoKT0+dGhpcy5fdXBkYXRlTG9nTGV2ZWwoKSkpKSxoPXRoaXN9X3VwZGF0ZUxvZ0xldmVsKCl7dGhpcy5fbG9nTGV2ZWw9YVt0aGlzLl9vcHRpb25zU2VydmljZS5yYXdPcHRpb25zLmxvZ0xldmVsXX1fZXZhbExhenlPcHRpb25hbFBhcmFtcyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW3RdJiYoZVt0XT1lW3RdKCkpfV9sb2coZSx0LGkpe3RoaXMuX2V2YWxMYXp5T3B0aW9uYWxQYXJhbXMoaSksZS5jYWxsKGNvbnNvbGUsKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubG9nZ2VyP1wiXCI6XCJ4dGVybS5qczogXCIpK3QsLi4uaSl9dHJhY2UoZSwuLi50KXt0aGlzLl9sb2dMZXZlbDw9by5Mb2dMZXZlbEVudW0uVFJBQ0UmJnRoaXMuX2xvZyh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxvZ2dlcj8udHJhY2UuYmluZCh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxvZ2dlcik/P2NvbnNvbGUubG9nLGUsdCl9ZGVidWcoZSwuLi50KXt0aGlzLl9sb2dMZXZlbDw9by5Mb2dMZXZlbEVudW0uREVCVUcmJnRoaXMuX2xvZyh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxvZ2dlcj8uZGVidWcuYmluZCh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxvZ2dlcik/P2NvbnNvbGUubG9nLGUsdCl9aW5mbyhlLC4uLnQpe3RoaXMuX2xvZ0xldmVsPD1vLkxvZ0xldmVsRW51bS5JTkZPJiZ0aGlzLl9sb2codGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5sb2dnZXI/LmluZm8uYmluZCh0aGlzLl9vcHRpb25zU2VydmljZS5vcHRpb25zLmxvZ2dlcik/P2NvbnNvbGUuaW5mbyxlLHQpfXdhcm4oZSwuLi50KXt0aGlzLl9sb2dMZXZlbDw9by5Mb2dMZXZlbEVudW0uV0FSTiYmdGhpcy5fbG9nKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubG9nZ2VyPy53YXJuLmJpbmQodGhpcy5fb3B0aW9uc1NlcnZpY2Uub3B0aW9ucy5sb2dnZXIpPz9jb25zb2xlLndhcm4sZSx0KX1lcnJvcihlLC4uLnQpe3RoaXMuX2xvZ0xldmVsPD1vLkxvZ0xldmVsRW51bS5FUlJPUiYmdGhpcy5fbG9nKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubG9nZ2VyPy5lcnJvci5iaW5kKHRoaXMuX29wdGlvbnNTZXJ2aWNlLm9wdGlvbnMubG9nZ2VyKT8/Y29uc29sZS5lcnJvcixlLHQpfX07dC5Mb2dTZXJ2aWNlPWM9cyhbcigwLG8uSU9wdGlvbnNTZXJ2aWNlKV0sYyksdC5zZXRUcmFjZUxvZ2dlcj1mdW5jdGlvbihlKXtoPWV9LHQudHJhY2VDYWxsPWZ1bmN0aW9uKGUsdCxpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpLnZhbHVlKXRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWRcIik7Y29uc3Qgcz1pLnZhbHVlO2kudmFsdWU9ZnVuY3Rpb24oLi4uZSl7aWYoaC5sb2dMZXZlbCE9PW8uTG9nTGV2ZWxFbnVtLlRSQUNFKXJldHVybiBzLmFwcGx5KHRoaXMsZSk7aC50cmFjZShgR2x5cGhSZW5kZXJlciMke3MubmFtZX0oJHtlLm1hcCgoZT0+SlNPTi5zdHJpbmdpZnkoZSkpKS5qb2luKFwiLCBcIil9KWApO2NvbnN0IHQ9cy5hcHBseSh0aGlzLGUpO3JldHVybiBoLnRyYWNlKGBHbHlwaFJlbmRlcmVyIyR7cy5uYW1lfSByZXR1cm5gLHQpLHR9fX0sNzMwMjooZSx0LGkpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5PcHRpb25zU2VydmljZT10LkRFRkFVTFRfT1BUSU9OUz12b2lkIDA7Y29uc3Qgcz1pKDg0NjApLHI9aSg4NDQpLG49aSg2MTE0KTt0LkRFRkFVTFRfT1BUSU9OUz17Y29sczo4MCxyb3dzOjI0LGN1cnNvckJsaW5rOiExLGN1cnNvclN0eWxlOlwiYmxvY2tcIixjdXJzb3JXaWR0aDoxLGN1cnNvckluYWN0aXZlU3R5bGU6XCJvdXRsaW5lXCIsY3VzdG9tR2x5cGhzOiEwLGRyYXdCb2xkVGV4dEluQnJpZ2h0Q29sb3JzOiEwLGRvY3VtZW50T3ZlcnJpZGU6bnVsbCxmYXN0U2Nyb2xsTW9kaWZpZXI6XCJhbHRcIixmYXN0U2Nyb2xsU2Vuc2l0aXZpdHk6NSxmb250RmFtaWx5OlwiY291cmllci1uZXcsIGNvdXJpZXIsIG1vbm9zcGFjZVwiLGZvbnRTaXplOjE1LGZvbnRXZWlnaHQ6XCJub3JtYWxcIixmb250V2VpZ2h0Qm9sZDpcImJvbGRcIixpZ25vcmVCcmFja2V0ZWRQYXN0ZU1vZGU6ITEsbGluZUhlaWdodDoxLGxldHRlclNwYWNpbmc6MCxsaW5rSGFuZGxlcjpudWxsLGxvZ0xldmVsOlwiaW5mb1wiLGxvZ2dlcjpudWxsLHNjcm9sbGJhY2s6MWUzLHNjcm9sbE9uVXNlcklucHV0OiEwLHNjcm9sbFNlbnNpdGl2aXR5OjEsc2NyZWVuUmVhZGVyTW9kZTohMSxzbW9vdGhTY3JvbGxEdXJhdGlvbjowLG1hY09wdGlvbklzTWV0YTohMSxtYWNPcHRpb25DbGlja0ZvcmNlc1NlbGVjdGlvbjohMSxtaW5pbXVtQ29udHJhc3RSYXRpbzoxLGRpc2FibGVTdGRpbjohMSxhbGxvd1Byb3Bvc2VkQXBpOiExLGFsbG93VHJhbnNwYXJlbmN5OiExLHRhYlN0b3BXaWR0aDo4LHRoZW1lOnt9LHJlc2NhbGVPdmVybGFwcGluZ0dseXBoczohMSxyaWdodENsaWNrU2VsZWN0c1dvcmQ6bi5pc01hYyx3aW5kb3dPcHRpb25zOnt9LHdpbmRvd3NNb2RlOiExLHdpbmRvd3NQdHk6e30sd29yZFNlcGFyYXRvcjpcIiAoKVtde30nLFxcXCJgXCIsYWx0Q2xpY2tNb3Zlc0N1cnNvcjohMCxjb252ZXJ0RW9sOiExLHRlcm1OYW1lOlwieHRlcm1cIixjYW5jZWxFdmVudHM6ITEsb3ZlcnZpZXdSdWxlcldpZHRoOjB9O2NvbnN0IG89W1wibm9ybWFsXCIsXCJib2xkXCIsXCIxMDBcIixcIjIwMFwiLFwiMzAwXCIsXCI0MDBcIixcIjUwMFwiLFwiNjAwXCIsXCI3MDBcIixcIjgwMFwiLFwiOTAwXCJdO2NsYXNzIGEgZXh0ZW5kcyByLkRpc3Bvc2FibGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9vbk9wdGlvbkNoYW5nZT10aGlzLnJlZ2lzdGVyKG5ldyBzLkV2ZW50RW1pdHRlciksdGhpcy5vbk9wdGlvbkNoYW5nZT10aGlzLl9vbk9wdGlvbkNoYW5nZS5ldmVudDtjb25zdCBpPXsuLi50LkRFRkFVTFRfT1BUSU9OU307Zm9yKGNvbnN0IHQgaW4gZSlpZih0IGluIGkpdHJ5e2NvbnN0IHM9ZVt0XTtpW3RdPXRoaXMuX3Nhbml0aXplQW5kVmFsaWRhdGVPcHRpb24odCxzKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfXRoaXMucmF3T3B0aW9ucz1pLHRoaXMub3B0aW9ucz17Li4uaX0sdGhpcy5fc2V0dXBPcHRpb25zKCksdGhpcy5yZWdpc3RlcigoMCxyLnRvRGlzcG9zYWJsZSkoKCgpPT57dGhpcy5yYXdPcHRpb25zLmxpbmtIYW5kbGVyPW51bGwsdGhpcy5yYXdPcHRpb25zLmRvY3VtZW50T3ZlcnJpZGU9bnVsbH0pKSl9b25TcGVjaWZpY09wdGlvbkNoYW5nZShlLHQpe3JldHVybiB0aGlzLm9uT3B0aW9uQ2hhbmdlKChpPT57aT09PWUmJnQodGhpcy5yYXdPcHRpb25zW2VdKX0pKX1vbk11bHRpcGxlT3B0aW9uQ2hhbmdlKGUsdCl7cmV0dXJuIHRoaXMub25PcHRpb25DaGFuZ2UoKGk9PnstMSE9PWUuaW5kZXhPZihpKSYmdCgpfSkpfV9zZXR1cE9wdGlvbnMoKXtjb25zdCBlPWU9PntpZighKGUgaW4gdC5ERUZBVUxUX09QVElPTlMpKXRocm93IG5ldyBFcnJvcihgTm8gb3B0aW9uIHdpdGgga2V5IFwiJHtlfVwiYCk7cmV0dXJuIHRoaXMucmF3T3B0aW9uc1tlXX0saT0oZSxpKT0+e2lmKCEoZSBpbiB0LkRFRkFVTFRfT1BUSU9OUykpdGhyb3cgbmV3IEVycm9yKGBObyBvcHRpb24gd2l0aCBrZXkgXCIke2V9XCJgKTtpPXRoaXMuX3Nhbml0aXplQW5kVmFsaWRhdGVPcHRpb24oZSxpKSx0aGlzLnJhd09wdGlvbnNbZV0hPT1pJiYodGhpcy5yYXdPcHRpb25zW2VdPWksdGhpcy5fb25PcHRpb25DaGFuZ2UuZmlyZShlKSl9O2Zvcihjb25zdCB0IGluIHRoaXMucmF3T3B0aW9ucyl7Y29uc3Qgcz17Z2V0OmUuYmluZCh0aGlzLHQpLHNldDppLmJpbmQodGhpcyx0KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMub3B0aW9ucyx0LHMpfX1fc2FuaXRpemVBbmRWYWxpZGF0ZU9wdGlvbihlLGkpe3N3aXRjaChlKXtjYXNlXCJjdXJzb3JTdHlsZVwiOmlmKGl8fChpPXQuREVGQVVMVF9PUFRJT05TW2VdKSwhZnVuY3Rpb24oZSl7cmV0dXJuXCJibG9ja1wiPT09ZXx8XCJ1bmRlcmxpbmVcIj09PWV8fFwiYmFyXCI9PT1lfShpKSl0aHJvdyBuZXcgRXJyb3IoYFwiJHtpfVwiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciAke2V9YCk7YnJlYWs7Y2FzZVwid29yZFNlcGFyYXRvclwiOml8fChpPXQuREVGQVVMVF9PUFRJT05TW2VdKTticmVhaztjYXNlXCJmb250V2VpZ2h0XCI6Y2FzZVwiZm9udFdlaWdodEJvbGRcIjppZihcIm51bWJlclwiPT10eXBlb2YgaSYmMTw9aSYmaTw9MWUzKWJyZWFrO2k9by5pbmNsdWRlcyhpKT9pOnQuREVGQVVMVF9PUFRJT05TW2VdO2JyZWFrO2Nhc2VcImN1cnNvcldpZHRoXCI6aT1NYXRoLmZsb29yKGkpO2Nhc2VcImxpbmVIZWlnaHRcIjpjYXNlXCJ0YWJTdG9wV2lkdGhcIjppZihpPDEpdGhyb3cgbmV3IEVycm9yKGAke2V9IGNhbm5vdCBiZSBsZXNzIHRoYW4gMSwgdmFsdWU6ICR7aX1gKTticmVhaztjYXNlXCJtaW5pbXVtQ29udHJhc3RSYXRpb1wiOmk9TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxNYXRoLnJvdW5kKDEwKmkpLzEwKSk7YnJlYWs7Y2FzZVwic2Nyb2xsYmFja1wiOmlmKChpPU1hdGgubWluKGksNDI5NDk2NzI5NSkpPDApdGhyb3cgbmV3IEVycm9yKGAke2V9IGNhbm5vdCBiZSBsZXNzIHRoYW4gMCwgdmFsdWU6ICR7aX1gKTticmVhaztjYXNlXCJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHlcIjpjYXNlXCJzY3JvbGxTZW5zaXRpdml0eVwiOmlmKGk8PTApdGhyb3cgbmV3IEVycm9yKGAke2V9IGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMCwgdmFsdWU6ICR7aX1gKTticmVhaztjYXNlXCJyb3dzXCI6Y2FzZVwiY29sc1wiOmlmKCFpJiYwIT09aSl0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gbXVzdCBiZSBudW1lcmljLCB2YWx1ZTogJHtpfWApO2JyZWFrO2Nhc2VcIndpbmRvd3NQdHlcIjppPWk/P3t9fXJldHVybiBpfX10Lk9wdGlvbnNTZXJ2aWNlPWF9LDI2NjA6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPXRoaXMmJnRoaXMuX19kZWNvcmF0ZXx8ZnVuY3Rpb24oZSx0LGkscyl7dmFyIHIsbj1hcmd1bWVudHMubGVuZ3RoLG89bjwzP3Q6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSk6cztpZihcIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlvPVJlZmxlY3QuZGVjb3JhdGUoZSx0LGkscyk7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkocj1lW2FdKSYmKG89KG48Mz9yKG8pOm4+Mz9yKHQsaSxvKTpyKHQsaSkpfHxvKTtyZXR1cm4gbj4zJiZvJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxpLG8pLG99LHI9dGhpcyYmdGhpcy5fX3BhcmFtfHxmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3QoaSxzLGUpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5Pc2NMaW5rU2VydmljZT12b2lkIDA7Y29uc3Qgbj1pKDI1ODUpO2xldCBvPXQuT3NjTGlua1NlcnZpY2U9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fYnVmZmVyU2VydmljZT1lLHRoaXMuX25leHRJZD0xLHRoaXMuX2VudHJpZXNXaXRoSWQ9bmV3IE1hcCx0aGlzLl9kYXRhQnlMaW5rSWQ9bmV3IE1hcH1yZWdpc3RlckxpbmsoZSl7Y29uc3QgdD10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlcjtpZih2b2lkIDA9PT1lLmlkKXtjb25zdCBpPXQuYWRkTWFya2VyKHQueWJhc2UrdC55KSxzPXtkYXRhOmUsaWQ6dGhpcy5fbmV4dElkKyssbGluZXM6W2ldfTtyZXR1cm4gaS5vbkRpc3Bvc2UoKCgpPT50aGlzLl9yZW1vdmVNYXJrZXJGcm9tTGluayhzLGkpKSksdGhpcy5fZGF0YUJ5TGlua0lkLnNldChzLmlkLHMpLHMuaWR9Y29uc3QgaT1lLHM9dGhpcy5fZ2V0RW50cnlJZEtleShpKSxyPXRoaXMuX2VudHJpZXNXaXRoSWQuZ2V0KHMpO2lmKHIpcmV0dXJuIHRoaXMuYWRkTGluZVRvTGluayhyLmlkLHQueWJhc2UrdC55KSxyLmlkO2NvbnN0IG49dC5hZGRNYXJrZXIodC55YmFzZSt0LnkpLG89e2lkOnRoaXMuX25leHRJZCsrLGtleTp0aGlzLl9nZXRFbnRyeUlkS2V5KGkpLGRhdGE6aSxsaW5lczpbbl19O3JldHVybiBuLm9uRGlzcG9zZSgoKCk9PnRoaXMuX3JlbW92ZU1hcmtlckZyb21MaW5rKG8sbikpKSx0aGlzLl9lbnRyaWVzV2l0aElkLnNldChvLmtleSxvKSx0aGlzLl9kYXRhQnlMaW5rSWQuc2V0KG8uaWQsbyksby5pZH1hZGRMaW5lVG9MaW5rKGUsdCl7Y29uc3QgaT10aGlzLl9kYXRhQnlMaW5rSWQuZ2V0KGUpO2lmKGkmJmkubGluZXMuZXZlcnkoKGU9PmUubGluZSE9PXQpKSl7Y29uc3QgZT10aGlzLl9idWZmZXJTZXJ2aWNlLmJ1ZmZlci5hZGRNYXJrZXIodCk7aS5saW5lcy5wdXNoKGUpLGUub25EaXNwb3NlKCgoKT0+dGhpcy5fcmVtb3ZlTWFya2VyRnJvbUxpbmsoaSxlKSkpfX1nZXRMaW5rRGF0YShlKXtyZXR1cm4gdGhpcy5fZGF0YUJ5TGlua0lkLmdldChlKT8uZGF0YX1fZ2V0RW50cnlJZEtleShlKXtyZXR1cm5gJHtlLmlkfTs7JHtlLnVyaX1gfV9yZW1vdmVNYXJrZXJGcm9tTGluayhlLHQpe2NvbnN0IGk9ZS5saW5lcy5pbmRleE9mKHQpOy0xIT09aSYmKGUubGluZXMuc3BsaWNlKGksMSksMD09PWUubGluZXMubGVuZ3RoJiYodm9pZCAwIT09ZS5kYXRhLmlkJiZ0aGlzLl9lbnRyaWVzV2l0aElkLmRlbGV0ZShlLmtleSksdGhpcy5fZGF0YUJ5TGlua0lkLmRlbGV0ZShlLmlkKSkpfX07dC5Pc2NMaW5rU2VydmljZT1vPXMoW3IoMCxuLklCdWZmZXJTZXJ2aWNlKV0sbyl9LDgzNDM6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURlY29yYXRvcj10LmdldFNlcnZpY2VEZXBlbmRlbmNpZXM9dC5zZXJ2aWNlUmVnaXN0cnk9dm9pZCAwO2NvbnN0IGk9XCJkaSR0YXJnZXRcIixzPVwiZGkkZGVwZW5kZW5jaWVzXCI7dC5zZXJ2aWNlUmVnaXN0cnk9bmV3IE1hcCx0LmdldFNlcnZpY2VEZXBlbmRlbmNpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbc118fFtdfSx0LmNyZWF0ZURlY29yYXRvcj1mdW5jdGlvbihlKXtpZih0LnNlcnZpY2VSZWdpc3RyeS5oYXMoZSkpcmV0dXJuIHQuc2VydmljZVJlZ2lzdHJ5LmdldChlKTtjb25zdCByPWZ1bmN0aW9uKGUsdCxuKXtpZigzIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJASVNlcnZpY2VOYW1lLWRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIHRvIGRlY29yYXRlIGEgcGFyYW1ldGVyXCIpOyFmdW5jdGlvbihlLHQscil7dFtpXT09PXQ/dFtzXS5wdXNoKHtpZDplLGluZGV4OnJ9KToodFtzXT1be2lkOmUsaW5kZXg6cn1dLHRbaV09dCl9KHIsZSxuKX07cmV0dXJuIHIudG9TdHJpbmc9KCk9PmUsdC5zZXJ2aWNlUmVnaXN0cnkuc2V0KGUscikscn19LDI1ODU6KGUsdCxpKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuSURlY29yYXRpb25TZXJ2aWNlPXQuSVVuaWNvZGVTZXJ2aWNlPXQuSU9zY0xpbmtTZXJ2aWNlPXQuSU9wdGlvbnNTZXJ2aWNlPXQuSUxvZ1NlcnZpY2U9dC5Mb2dMZXZlbEVudW09dC5JSW5zdGFudGlhdGlvblNlcnZpY2U9dC5JQ2hhcnNldFNlcnZpY2U9dC5JQ29yZVNlcnZpY2U9dC5JQ29yZU1vdXNlU2VydmljZT10LklCdWZmZXJTZXJ2aWNlPXZvaWQgMDtjb25zdCBzPWkoODM0Myk7dmFyIHI7dC5JQnVmZmVyU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJCdWZmZXJTZXJ2aWNlXCIpLHQuSUNvcmVNb3VzZVNlcnZpY2U9KDAscy5jcmVhdGVEZWNvcmF0b3IpKFwiQ29yZU1vdXNlU2VydmljZVwiKSx0LklDb3JlU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJDb3JlU2VydmljZVwiKSx0LklDaGFyc2V0U2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJDaGFyc2V0U2VydmljZVwiKSx0LklJbnN0YW50aWF0aW9uU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJJbnN0YW50aWF0aW9uU2VydmljZVwiKSxmdW5jdGlvbihlKXtlW2UuVFJBQ0U9MF09XCJUUkFDRVwiLGVbZS5ERUJVRz0xXT1cIkRFQlVHXCIsZVtlLklORk89Ml09XCJJTkZPXCIsZVtlLldBUk49M109XCJXQVJOXCIsZVtlLkVSUk9SPTRdPVwiRVJST1JcIixlW2UuT0ZGPTVdPVwiT0ZGXCJ9KHJ8fCh0LkxvZ0xldmVsRW51bT1yPXt9KSksdC5JTG9nU2VydmljZT0oMCxzLmNyZWF0ZURlY29yYXRvcikoXCJMb2dTZXJ2aWNlXCIpLHQuSU9wdGlvbnNTZXJ2aWNlPSgwLHMuY3JlYXRlRGVjb3JhdG9yKShcIk9wdGlvbnNTZXJ2aWNlXCIpLHQuSU9zY0xpbmtTZXJ2aWNlPSgwLHMuY3JlYXRlRGVjb3JhdG9yKShcIk9zY0xpbmtTZXJ2aWNlXCIpLHQuSVVuaWNvZGVTZXJ2aWNlPSgwLHMuY3JlYXRlRGVjb3JhdG9yKShcIlVuaWNvZGVTZXJ2aWNlXCIpLHQuSURlY29yYXRpb25TZXJ2aWNlPSgwLHMuY3JlYXRlRGVjb3JhdG9yKShcIkRlY29yYXRpb25TZXJ2aWNlXCIpfSwxNDgwOihlLHQsaSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LlVuaWNvZGVTZXJ2aWNlPXZvaWQgMDtjb25zdCBzPWkoODQ2MCkscj1pKDIyNSk7Y2xhc3MgbntzdGF0aWMgZXh0cmFjdFNob3VsZEpvaW4oZSl7cmV0dXJuIDAhPSgxJmUpfXN0YXRpYyBleHRyYWN0V2lkdGgoZSl7cmV0dXJuIGU+PjEmM31zdGF0aWMgZXh0cmFjdENoYXJLaW5kKGUpe3JldHVybiBlPj4zfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eVZhbHVlKGUsdCxpPSExKXtyZXR1cm4oMTY3NzcyMTUmZSk8PDN8KDMmdCk8PDF8KGk/MTowKX1jb25zdHJ1Y3Rvcigpe3RoaXMuX3Byb3ZpZGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2FjdGl2ZT1cIlwiLHRoaXMuX29uQ2hhbmdlPW5ldyBzLkV2ZW50RW1pdHRlcix0aGlzLm9uQ2hhbmdlPXRoaXMuX29uQ2hhbmdlLmV2ZW50O2NvbnN0IGU9bmV3IHIuVW5pY29kZVY2O3RoaXMucmVnaXN0ZXIoZSksdGhpcy5fYWN0aXZlPWUudmVyc2lvbix0aGlzLl9hY3RpdmVQcm92aWRlcj1lfWRpc3Bvc2UoKXt0aGlzLl9vbkNoYW5nZS5kaXNwb3NlKCl9Z2V0IHZlcnNpb25zKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3Byb3ZpZGVycyl9Z2V0IGFjdGl2ZVZlcnNpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXNldCBhY3RpdmVWZXJzaW9uKGUpe2lmKCF0aGlzLl9wcm92aWRlcnNbZV0pdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIFVuaWNvZGUgdmVyc2lvbiBcIiR7ZX1cImApO3RoaXMuX2FjdGl2ZT1lLHRoaXMuX2FjdGl2ZVByb3ZpZGVyPXRoaXMuX3Byb3ZpZGVyc1tlXSx0aGlzLl9vbkNoYW5nZS5maXJlKGUpfXJlZ2lzdGVyKGUpe3RoaXMuX3Byb3ZpZGVyc1tlLnZlcnNpb25dPWV9d2N3aWR0aChlKXtyZXR1cm4gdGhpcy5fYWN0aXZlUHJvdmlkZXIud2N3aWR0aChlKX1nZXRTdHJpbmdDZWxsV2lkdGgoZSl7bGV0IHQ9MCxpPTA7Y29uc3Qgcz1lLmxlbmd0aDtmb3IobGV0IHI9MDtyPHM7KytyKXtsZXQgbz1lLmNoYXJDb2RlQXQocik7aWYoNTUyOTY8PW8mJm88PTU2MzE5KXtpZigrK3I+PXMpcmV0dXJuIHQrdGhpcy53Y3dpZHRoKG8pO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHIpOzU2MzIwPD1pJiZpPD01NzM0Mz9vPTEwMjQqKG8tNTUyOTYpK2ktNTYzMjArNjU1MzY6dCs9dGhpcy53Y3dpZHRoKGkpfWNvbnN0IGE9dGhpcy5jaGFyUHJvcGVydGllcyhvLGkpO2xldCBoPW4uZXh0cmFjdFdpZHRoKGEpO24uZXh0cmFjdFNob3VsZEpvaW4oYSkmJihoLT1uLmV4dHJhY3RXaWR0aChpKSksdCs9aCxpPWF9cmV0dXJuIHR9Y2hhclByb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5fYWN0aXZlUHJvdmlkZXIuY2hhclByb3BlcnRpZXMoZSx0KX19dC5Vbmljb2RlU2VydmljZT1ufX0sdD17fTtmdW5jdGlvbiBpKHMpe3ZhciByPXRbc107aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciBuPXRbc109e2V4cG9ydHM6e319O3JldHVybiBlW3NdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLGkpLG4uZXhwb3J0c312YXIgcz17fTtyZXR1cm4oKCk9Pnt2YXIgZT1zO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLGUuVGVybWluYWw9dm9pZCAwO2NvbnN0IHQ9aSg5MDQyKSxyPWkoMzIzNiksbj1pKDg0NCksbz1pKDU3NDEpLGE9aSg4Mjg1KSxoPWkoNzk3NSksYz1pKDcwOTApLGw9W1wiY29sc1wiLFwicm93c1wiXTtjbGFzcyBkIGV4dGVuZHMgbi5EaXNwb3NhYmxle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fY29yZT10aGlzLnJlZ2lzdGVyKG5ldyByLlRlcm1pbmFsKGUpKSx0aGlzLl9hZGRvbk1hbmFnZXI9dGhpcy5yZWdpc3RlcihuZXcgby5BZGRvbk1hbmFnZXIpLHRoaXMuX3B1YmxpY09wdGlvbnM9ey4uLnRoaXMuX2NvcmUub3B0aW9uc307Y29uc3QgdD1lPT50aGlzLl9jb3JlLm9wdGlvbnNbZV0saT0oZSx0KT0+e3RoaXMuX2NoZWNrUmVhZG9ubHlPcHRpb25zKGUpLHRoaXMuX2NvcmUub3B0aW9uc1tlXT10fTtmb3IoY29uc3QgZSBpbiB0aGlzLl9jb3JlLm9wdGlvbnMpe2NvbnN0IHM9e2dldDp0LmJpbmQodGhpcyxlKSxzZXQ6aS5iaW5kKHRoaXMsZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLl9wdWJsaWNPcHRpb25zLGUscyl9fV9jaGVja1JlYWRvbmx5T3B0aW9ucyhlKXtpZihsLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcihgT3B0aW9uIFwiJHtlfVwiIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUgY29uc3RydWN0b3JgKX1fY2hlY2tQcm9wb3NlZEFwaSgpe2lmKCF0aGlzLl9jb3JlLm9wdGlvbnNTZXJ2aWNlLnJhd09wdGlvbnMuYWxsb3dQcm9wb3NlZEFwaSl0aHJvdyBuZXcgRXJyb3IoXCJZb3UgbXVzdCBzZXQgdGhlIGFsbG93UHJvcG9zZWRBcGkgb3B0aW9uIHRvIHRydWUgdG8gdXNlIHByb3Bvc2VkIEFQSVwiKX1nZXQgb25CZWxsKCl7cmV0dXJuIHRoaXMuX2NvcmUub25CZWxsfWdldCBvbkJpbmFyeSgpe3JldHVybiB0aGlzLl9jb3JlLm9uQmluYXJ5fWdldCBvbkN1cnNvck1vdmUoKXtyZXR1cm4gdGhpcy5fY29yZS5vbkN1cnNvck1vdmV9Z2V0IG9uRGF0YSgpe3JldHVybiB0aGlzLl9jb3JlLm9uRGF0YX1nZXQgb25LZXkoKXtyZXR1cm4gdGhpcy5fY29yZS5vbktleX1nZXQgb25MaW5lRmVlZCgpe3JldHVybiB0aGlzLl9jb3JlLm9uTGluZUZlZWR9Z2V0IG9uUmVuZGVyKCl7cmV0dXJuIHRoaXMuX2NvcmUub25SZW5kZXJ9Z2V0IG9uUmVzaXplKCl7cmV0dXJuIHRoaXMuX2NvcmUub25SZXNpemV9Z2V0IG9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX2NvcmUub25TY3JvbGx9Z2V0IG9uU2VsZWN0aW9uQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NvcmUub25TZWxlY3Rpb25DaGFuZ2V9Z2V0IG9uVGl0bGVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY29yZS5vblRpdGxlQ2hhbmdlfWdldCBvbldyaXRlUGFyc2VkKCl7cmV0dXJuIHRoaXMuX2NvcmUub25Xcml0ZVBhcnNlZH1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLl9jb3JlLmVsZW1lbnR9Z2V0IHBhcnNlcigpe3JldHVybiB0aGlzLl9wYXJzZXJ8fCh0aGlzLl9wYXJzZXI9bmV3IGguUGFyc2VyQXBpKHRoaXMuX2NvcmUpKSx0aGlzLl9wYXJzZXJ9Z2V0IHVuaWNvZGUoKXtyZXR1cm4gdGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLG5ldyBjLlVuaWNvZGVBcGkodGhpcy5fY29yZSl9Z2V0IHRleHRhcmVhKCl7cmV0dXJuIHRoaXMuX2NvcmUudGV4dGFyZWF9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5fY29yZS5yb3dzfWdldCBjb2xzKCl7cmV0dXJuIHRoaXMuX2NvcmUuY29sc31nZXQgYnVmZmVyKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnx8KHRoaXMuX2J1ZmZlcj10aGlzLnJlZ2lzdGVyKG5ldyBhLkJ1ZmZlck5hbWVzcGFjZUFwaSh0aGlzLl9jb3JlKSkpLHRoaXMuX2J1ZmZlcn1nZXQgbWFya2Vycygpe3JldHVybiB0aGlzLl9jaGVja1Byb3Bvc2VkQXBpKCksdGhpcy5fY29yZS5tYXJrZXJzfWdldCBtb2Rlcygpe2NvbnN0IGU9dGhpcy5fY29yZS5jb3JlU2VydmljZS5kZWNQcml2YXRlTW9kZXM7bGV0IHQ9XCJub25lXCI7c3dpdGNoKHRoaXMuX2NvcmUuY29yZU1vdXNlU2VydmljZS5hY3RpdmVQcm90b2NvbCl7Y2FzZVwiWDEwXCI6dD1cIngxMFwiO2JyZWFrO2Nhc2VcIlZUMjAwXCI6dD1cInZ0MjAwXCI7YnJlYWs7Y2FzZVwiRFJBR1wiOnQ9XCJkcmFnXCI7YnJlYWs7Y2FzZVwiQU5ZXCI6dD1cImFueVwifXJldHVybnthcHBsaWNhdGlvbkN1cnNvcktleXNNb2RlOmUuYXBwbGljYXRpb25DdXJzb3JLZXlzLGFwcGxpY2F0aW9uS2V5cGFkTW9kZTplLmFwcGxpY2F0aW9uS2V5cGFkLGJyYWNrZXRlZFBhc3RlTW9kZTplLmJyYWNrZXRlZFBhc3RlTW9kZSxpbnNlcnRNb2RlOnRoaXMuX2NvcmUuY29yZVNlcnZpY2UubW9kZXMuaW5zZXJ0TW9kZSxtb3VzZVRyYWNraW5nTW9kZTp0LG9yaWdpbk1vZGU6ZS5vcmlnaW4scmV2ZXJzZVdyYXBhcm91bmRNb2RlOmUucmV2ZXJzZVdyYXBhcm91bmQsc2VuZEZvY3VzTW9kZTplLnNlbmRGb2N1cyx3cmFwYXJvdW5kTW9kZTplLndyYXBhcm91bmR9fWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX3B1YmxpY09wdGlvbnN9c2V0IG9wdGlvbnMoZSl7Zm9yKGNvbnN0IHQgaW4gZSl0aGlzLl9wdWJsaWNPcHRpb25zW3RdPWVbdF19Ymx1cigpe3RoaXMuX2NvcmUuYmx1cigpfWZvY3VzKCl7dGhpcy5fY29yZS5mb2N1cygpfWlucHV0KGUsdD0hMCl7dGhpcy5fY29yZS5pbnB1dChlLHQpfXJlc2l6ZShlLHQpe3RoaXMuX3ZlcmlmeUludGVnZXJzKGUsdCksdGhpcy5fY29yZS5yZXNpemUoZSx0KX1vcGVuKGUpe3RoaXMuX2NvcmUub3BlbihlKX1hdHRhY2hDdXN0b21LZXlFdmVudEhhbmRsZXIoZSl7dGhpcy5fY29yZS5hdHRhY2hDdXN0b21LZXlFdmVudEhhbmRsZXIoZSl9YXR0YWNoQ3VzdG9tV2hlZWxFdmVudEhhbmRsZXIoZSl7dGhpcy5fY29yZS5hdHRhY2hDdXN0b21XaGVlbEV2ZW50SGFuZGxlcihlKX1yZWdpc3RlckxpbmtQcm92aWRlcihlKXtyZXR1cm4gdGhpcy5fY29yZS5yZWdpc3RlckxpbmtQcm92aWRlcihlKX1yZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKXtyZXR1cm4gdGhpcy5fY2hlY2tQcm9wb3NlZEFwaSgpLHRoaXMuX2NvcmUucmVnaXN0ZXJDaGFyYWN0ZXJKb2luZXIoZSl9ZGVyZWdpc3RlckNoYXJhY3RlckpvaW5lcihlKXt0aGlzLl9jaGVja1Byb3Bvc2VkQXBpKCksdGhpcy5fY29yZS5kZXJlZ2lzdGVyQ2hhcmFjdGVySm9pbmVyKGUpfXJlZ2lzdGVyTWFya2VyKGU9MCl7cmV0dXJuIHRoaXMuX3ZlcmlmeUludGVnZXJzKGUpLHRoaXMuX2NvcmUucmVnaXN0ZXJNYXJrZXIoZSl9cmVnaXN0ZXJEZWNvcmF0aW9uKGUpe3JldHVybiB0aGlzLl9jaGVja1Byb3Bvc2VkQXBpKCksdGhpcy5fdmVyaWZ5UG9zaXRpdmVJbnRlZ2VycyhlLng/PzAsZS53aWR0aD8/MCxlLmhlaWdodD8/MCksdGhpcy5fY29yZS5yZWdpc3RlckRlY29yYXRpb24oZSl9aGFzU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUuaGFzU2VsZWN0aW9uKCl9c2VsZWN0KGUsdCxpKXt0aGlzLl92ZXJpZnlJbnRlZ2VycyhlLHQsaSksdGhpcy5fY29yZS5zZWxlY3QoZSx0LGkpfWdldFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9jb3JlLmdldFNlbGVjdGlvbigpfWdldFNlbGVjdGlvblBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2NvcmUuZ2V0U2VsZWN0aW9uUG9zaXRpb24oKX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2NvcmUuY2xlYXJTZWxlY3Rpb24oKX1zZWxlY3RBbGwoKXt0aGlzLl9jb3JlLnNlbGVjdEFsbCgpfXNlbGVjdExpbmVzKGUsdCl7dGhpcy5fdmVyaWZ5SW50ZWdlcnMoZSx0KSx0aGlzLl9jb3JlLnNlbGVjdExpbmVzKGUsdCl9ZGlzcG9zZSgpe3N1cGVyLmRpc3Bvc2UoKX1zY3JvbGxMaW5lcyhlKXt0aGlzLl92ZXJpZnlJbnRlZ2VycyhlKSx0aGlzLl9jb3JlLnNjcm9sbExpbmVzKGUpfXNjcm9sbFBhZ2VzKGUpe3RoaXMuX3ZlcmlmeUludGVnZXJzKGUpLHRoaXMuX2NvcmUuc2Nyb2xsUGFnZXMoZSl9c2Nyb2xsVG9Ub3AoKXt0aGlzLl9jb3JlLnNjcm9sbFRvVG9wKCl9c2Nyb2xsVG9Cb3R0b20oKXt0aGlzLl9jb3JlLnNjcm9sbFRvQm90dG9tKCl9c2Nyb2xsVG9MaW5lKGUpe3RoaXMuX3ZlcmlmeUludGVnZXJzKGUpLHRoaXMuX2NvcmUuc2Nyb2xsVG9MaW5lKGUpfWNsZWFyKCl7dGhpcy5fY29yZS5jbGVhcigpfXdyaXRlKGUsdCl7dGhpcy5fY29yZS53cml0ZShlLHQpfXdyaXRlbG4oZSx0KXt0aGlzLl9jb3JlLndyaXRlKGUpLHRoaXMuX2NvcmUud3JpdGUoXCJcXHJcXG5cIix0KX1wYXN0ZShlKXt0aGlzLl9jb3JlLnBhc3RlKGUpfXJlZnJlc2goZSx0KXt0aGlzLl92ZXJpZnlJbnRlZ2VycyhlLHQpLHRoaXMuX2NvcmUucmVmcmVzaChlLHQpfXJlc2V0KCl7dGhpcy5fY29yZS5yZXNldCgpfWNsZWFyVGV4dHVyZUF0bGFzKCl7dGhpcy5fY29yZS5jbGVhclRleHR1cmVBdGxhcygpfWxvYWRBZGRvbihlKXt0aGlzLl9hZGRvbk1hbmFnZXIubG9hZEFkZG9uKHRoaXMsZSl9c3RhdGljIGdldCBzdHJpbmdzKCl7cmV0dXJuIHR9X3ZlcmlmeUludGVnZXJzKC4uLmUpe2Zvcihjb25zdCB0IG9mIGUpaWYodD09PTEvMHx8aXNOYU4odCl8fHQlMSE9MCl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIEFQSSBvbmx5IGFjY2VwdHMgaW50ZWdlcnNcIil9X3ZlcmlmeVBvc2l0aXZlSW50ZWdlcnMoLi4uZSl7Zm9yKGNvbnN0IHQgb2YgZSlpZih0JiYodD09PTEvMHx8aXNOYU4odCl8fHQlMSE9MHx8dDwwKSl0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIEFQSSBvbmx5IGFjY2VwdHMgcG9zaXRpdmUgaW50ZWdlcnNcIil9fWUuVGVybWluYWw9ZH0pKCksc30pKCkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXh0ZXJtLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@xterm/xterm/lib/xterm.js\n"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/@xterm/xterm/css/xterm.css": +/*!***************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/@xterm/xterm/css/xterm.css ***! + \***************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/**\\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\\n * https://github.com/chjj/term.js\\n * @license MIT\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy\\n * of this software and associated documentation files (the \\\"Software\\\"), to deal\\n * in the Software without restriction, including without limitation the rights\\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\n * copies of the Software, and to permit persons to whom the Software is\\n * furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\n * THE SOFTWARE.\\n *\\n * Originally forked from (with the author's permission):\\n * Fabrice Bellard's javascript vt100 for jslinux:\\n * http://bellard.org/jslinux/\\n * Copyright (c) 2011 Fabrice Bellard\\n * The original design remains. The terminal itself\\n * has been extended to include xterm CSI codes, among\\n * other features.\\n */\\n\\n/**\\n * Default styles for xterm.js\\n */\\n\\n.xterm {\\n cursor: text;\\n position: relative;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.xterm.focus,\\n.xterm:focus {\\n outline: none;\\n}\\n\\n.xterm .xterm-helpers {\\n position: absolute;\\n top: 0;\\n /**\\n * The z-index of the helpers must be higher than the canvases in order for\\n * IMEs to appear on top.\\n */\\n z-index: 5;\\n}\\n\\n.xterm .xterm-helper-textarea {\\n padding: 0;\\n border: 0;\\n margin: 0;\\n /* Move textarea out of the screen to the far left, so that the cursor is not visible */\\n position: absolute;\\n opacity: 0;\\n left: -9999em;\\n top: 0;\\n width: 0;\\n height: 0;\\n z-index: -5;\\n /** Prevent wrapping so the IME appears against the textarea at the correct position */\\n white-space: nowrap;\\n overflow: hidden;\\n resize: none;\\n}\\n\\n.xterm .composition-view {\\n /* TODO: Composition position got messed up somewhere */\\n background: #000;\\n color: #FFF;\\n display: none;\\n position: absolute;\\n white-space: nowrap;\\n z-index: 1;\\n}\\n\\n.xterm .composition-view.active {\\n display: block;\\n}\\n\\n.xterm .xterm-viewport {\\n /* On OS X this is required in order for the scroll bar to appear fully opaque */\\n background-color: #000;\\n overflow-y: scroll;\\n cursor: default;\\n position: absolute;\\n right: 0;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n}\\n\\n.xterm .xterm-screen {\\n position: relative;\\n}\\n\\n.xterm .xterm-screen canvas {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\\n\\n.xterm .xterm-scroll-area {\\n visibility: hidden;\\n}\\n\\n.xterm-char-measure-element {\\n display: inline-block;\\n visibility: hidden;\\n position: absolute;\\n top: 0;\\n left: -9999em;\\n line-height: normal;\\n}\\n\\n.xterm.enable-mouse-events {\\n /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */\\n cursor: default;\\n}\\n\\n.xterm.xterm-cursor-pointer,\\n.xterm .xterm-cursor-pointer {\\n cursor: pointer;\\n}\\n\\n.xterm.column-select.focus {\\n /* Column selection mode */\\n cursor: crosshair;\\n}\\n\\n.xterm .xterm-accessibility:not(.debug),\\n.xterm .xterm-message {\\n position: absolute;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n right: 0;\\n z-index: 10;\\n color: transparent;\\n pointer-events: none;\\n}\\n\\n.xterm .xterm-accessibility-tree:not(.debug) *::selection {\\n color: transparent;\\n}\\n\\n.xterm .xterm-accessibility-tree {\\n user-select: text;\\n white-space: pre;\\n}\\n\\n.xterm .live-region {\\n position: absolute;\\n left: -9999px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.xterm-dim {\\n /* Dim should not apply to background, so the opacity of the foreground color is applied\\n * explicitly in the generated class and reset to 1 here */\\n opacity: 1 !important;\\n}\\n\\n.xterm-underline-1 { text-decoration: underline; }\\n.xterm-underline-2 { text-decoration: double underline; }\\n.xterm-underline-3 { text-decoration: wavy underline; }\\n.xterm-underline-4 { text-decoration: dotted underline; }\\n.xterm-underline-5 { text-decoration: dashed underline; }\\n\\n.xterm-overline {\\n text-decoration: overline;\\n}\\n\\n.xterm-overline.xterm-underline-1 { text-decoration: overline underline; }\\n.xterm-overline.xterm-underline-2 { text-decoration: overline double underline; }\\n.xterm-overline.xterm-underline-3 { text-decoration: overline wavy underline; }\\n.xterm-overline.xterm-underline-4 { text-decoration: overline dotted underline; }\\n.xterm-overline.xterm-underline-5 { text-decoration: overline dashed underline; }\\n\\n.xterm-strikethrough {\\n text-decoration: line-through;\\n}\\n\\n.xterm-screen .xterm-decoration-container .xterm-decoration {\\n\\tz-index: 6;\\n\\tposition: absolute;\\n}\\n\\n.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer {\\n\\tz-index: 7;\\n}\\n\\n.xterm-decoration-overview-ruler {\\n z-index: 8;\\n position: absolute;\\n top: 0;\\n right: 0;\\n pointer-events: none;\\n}\\n\\n.xterm-decoration-top {\\n z-index: 2;\\n position: relative;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/@xterm/xterm/css/xterm.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BE;;AAEF;;EAEE;;AAEF;IACI,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,yBAAyB;AAC7B;;AAEA;;IAEI,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN;;;MAGE;IACF,UAAU;AACd;;AAEA;IACI,UAAU;IACV,SAAS;IACT,SAAS;IACT,uFAAuF;IACvF,kBAAkB;IAClB,UAAU;IACV,aAAa;IACb,MAAM;IACN,QAAQ;IACR,SAAS;IACT,WAAW;IACX,sFAAsF;IACtF,mBAAmB;IACnB,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,uDAAuD;IACvD,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,UAAU;AACd;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,gFAAgF;IAChF,sBAAsB;IACtB,kBAAkB;IAClB,eAAe;IACf,kBAAkB;IAClB,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;AACb;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,OAAO;IACP,MAAM;AACV;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,MAAM;IACN,aAAa;IACb,mBAAmB;AACvB;;AAEA;IACI,oFAAoF;IACpF,eAAe;AACnB;;AAEA;;IAEI,eAAe;AACnB;;AAEA;IACI,0BAA0B;IAC1B,iBAAiB;AACrB;;AAEA;;IAEI,kBAAkB;IAClB,OAAO;IACP,MAAM;IACN,SAAS;IACT,QAAQ;IACR,WAAW;IACX,kBAAkB;IAClB,oBAAoB;AACxB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;IACI,kBAAkB;IAClB,aAAa;IACb,UAAU;IACV,WAAW;IACX,gBAAgB;AACpB;;AAEA;IACI;8DAC0D;IAC1D,qBAAqB;AACzB;;AAEA,qBAAqB,0BAA0B,EAAE;AACjD,qBAAqB,iCAAiC,EAAE;AACxD,qBAAqB,+BAA+B,EAAE;AACtD,qBAAqB,iCAAiC,EAAE;AACxD,qBAAqB,iCAAiC,EAAE;;AAExD;IACI,yBAAyB;AAC7B;;AAEA,oCAAoC,mCAAmC,EAAE;AACzE,oCAAoC,0CAA0C,EAAE;AAChF,oCAAoC,wCAAwC,EAAE;AAC9E,oCAAoC,0CAA0C,EAAE;AAChF,oCAAoC,0CAA0C,EAAE;;AAEhF;IACI,6BAA6B;AACjC;;AAEA;CACC,UAAU;CACV,kBAAkB;AACnB;;AAEA;CACC,UAAU;AACX;;AAEA;IACI,UAAU;IACV,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,oBAAoB;AACxB;;AAEA;IACI,UAAU;IACV,kBAAkB;AACtB\",\"sourcesContent\":[\"/**\\n * Copyright (c) 2014 The xterm.js authors. All rights reserved.\\n * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)\\n * https://github.com/chjj/term.js\\n * @license MIT\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy\\n * of this software and associated documentation files (the \\\"Software\\\"), to deal\\n * in the Software without restriction, including without limitation the rights\\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\n * copies of the Software, and to permit persons to whom the Software is\\n * furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\n * THE SOFTWARE.\\n *\\n * Originally forked from (with the author's permission):\\n * Fabrice Bellard's javascript vt100 for jslinux:\\n * http://bellard.org/jslinux/\\n * Copyright (c) 2011 Fabrice Bellard\\n * The original design remains. The terminal itself\\n * has been extended to include xterm CSI codes, among\\n * other features.\\n */\\n\\n/**\\n * Default styles for xterm.js\\n */\\n\\n.xterm {\\n cursor: text;\\n position: relative;\\n user-select: none;\\n -ms-user-select: none;\\n -webkit-user-select: none;\\n}\\n\\n.xterm.focus,\\n.xterm:focus {\\n outline: none;\\n}\\n\\n.xterm .xterm-helpers {\\n position: absolute;\\n top: 0;\\n /**\\n * The z-index of the helpers must be higher than the canvases in order for\\n * IMEs to appear on top.\\n */\\n z-index: 5;\\n}\\n\\n.xterm .xterm-helper-textarea {\\n padding: 0;\\n border: 0;\\n margin: 0;\\n /* Move textarea out of the screen to the far left, so that the cursor is not visible */\\n position: absolute;\\n opacity: 0;\\n left: -9999em;\\n top: 0;\\n width: 0;\\n height: 0;\\n z-index: -5;\\n /** Prevent wrapping so the IME appears against the textarea at the correct position */\\n white-space: nowrap;\\n overflow: hidden;\\n resize: none;\\n}\\n\\n.xterm .composition-view {\\n /* TODO: Composition position got messed up somewhere */\\n background: #000;\\n color: #FFF;\\n display: none;\\n position: absolute;\\n white-space: nowrap;\\n z-index: 1;\\n}\\n\\n.xterm .composition-view.active {\\n display: block;\\n}\\n\\n.xterm .xterm-viewport {\\n /* On OS X this is required in order for the scroll bar to appear fully opaque */\\n background-color: #000;\\n overflow-y: scroll;\\n cursor: default;\\n position: absolute;\\n right: 0;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n}\\n\\n.xterm .xterm-screen {\\n position: relative;\\n}\\n\\n.xterm .xterm-screen canvas {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\\n\\n.xterm .xterm-scroll-area {\\n visibility: hidden;\\n}\\n\\n.xterm-char-measure-element {\\n display: inline-block;\\n visibility: hidden;\\n position: absolute;\\n top: 0;\\n left: -9999em;\\n line-height: normal;\\n}\\n\\n.xterm.enable-mouse-events {\\n /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */\\n cursor: default;\\n}\\n\\n.xterm.xterm-cursor-pointer,\\n.xterm .xterm-cursor-pointer {\\n cursor: pointer;\\n}\\n\\n.xterm.column-select.focus {\\n /* Column selection mode */\\n cursor: crosshair;\\n}\\n\\n.xterm .xterm-accessibility:not(.debug),\\n.xterm .xterm-message {\\n position: absolute;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n right: 0;\\n z-index: 10;\\n color: transparent;\\n pointer-events: none;\\n}\\n\\n.xterm .xterm-accessibility-tree:not(.debug) *::selection {\\n color: transparent;\\n}\\n\\n.xterm .xterm-accessibility-tree {\\n user-select: text;\\n white-space: pre;\\n}\\n\\n.xterm .live-region {\\n position: absolute;\\n left: -9999px;\\n width: 1px;\\n height: 1px;\\n overflow: hidden;\\n}\\n\\n.xterm-dim {\\n /* Dim should not apply to background, so the opacity of the foreground color is applied\\n * explicitly in the generated class and reset to 1 here */\\n opacity: 1 !important;\\n}\\n\\n.xterm-underline-1 { text-decoration: underline; }\\n.xterm-underline-2 { text-decoration: double underline; }\\n.xterm-underline-3 { text-decoration: wavy underline; }\\n.xterm-underline-4 { text-decoration: dotted underline; }\\n.xterm-underline-5 { text-decoration: dashed underline; }\\n\\n.xterm-overline {\\n text-decoration: overline;\\n}\\n\\n.xterm-overline.xterm-underline-1 { text-decoration: overline underline; }\\n.xterm-overline.xterm-underline-2 { text-decoration: overline double underline; }\\n.xterm-overline.xterm-underline-3 { text-decoration: overline wavy underline; }\\n.xterm-overline.xterm-underline-4 { text-decoration: overline dotted underline; }\\n.xterm-overline.xterm-underline-5 { text-decoration: overline dashed underline; }\\n\\n.xterm-strikethrough {\\n text-decoration: line-through;\\n}\\n\\n.xterm-screen .xterm-decoration-container .xterm-decoration {\\n\\tz-index: 6;\\n\\tposition: absolute;\\n}\\n\\n.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer {\\n\\tz-index: 7;\\n}\\n\\n.xterm-decoration-overview-ruler {\\n z-index: 8;\\n position: absolute;\\n top: 0;\\n right: 0;\\n pointer-events: none;\\n}\\n\\n.xterm-decoration-top {\\n z-index: 2;\\n position: relative;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9AeHRlcm0veHRlcm0vY3NzL3h0ZXJtLmNzcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ21HO0FBQ2pCO0FBQ2xGLDhCQUE4QixzRUFBMkIsQ0FBQywrRUFBcUM7QUFDL0Y7QUFDQSxpckRBQWlyRCxtQkFBbUIseUJBQXlCLHdCQUF3Qiw0QkFBNEIsZ0NBQWdDLEdBQUcsaUNBQWlDLG9CQUFvQixHQUFHLDJCQUEyQix5QkFBeUIsYUFBYSxtSkFBbUosR0FBRyxtQ0FBbUMsaUJBQWlCLGdCQUFnQixnQkFBZ0IsdUhBQXVILGlCQUFpQixvQkFBb0IsYUFBYSxlQUFlLGdCQUFnQixrQkFBa0IsdUhBQXVILHVCQUF1QixtQkFBbUIsR0FBRyw4QkFBOEIscUZBQXFGLGtCQUFrQixvQkFBb0IseUJBQXlCLDBCQUEwQixpQkFBaUIsR0FBRyxxQ0FBcUMscUJBQXFCLEdBQUcsNEJBQTRCLG9IQUFvSCx5QkFBeUIsc0JBQXNCLHlCQUF5QixlQUFlLGNBQWMsYUFBYSxnQkFBZ0IsR0FBRywwQkFBMEIseUJBQXlCLEdBQUcsaUNBQWlDLHlCQUF5QixjQUFjLGFBQWEsR0FBRywrQkFBK0IseUJBQXlCLEdBQUcsaUNBQWlDLDRCQUE0Qix5QkFBeUIseUJBQXlCLGFBQWEsb0JBQW9CLDBCQUEwQixHQUFHLGdDQUFnQyxpSEFBaUgsR0FBRyxnRUFBZ0Usc0JBQXNCLEdBQUcsZ0NBQWdDLHlEQUF5RCxHQUFHLHFFQUFxRSx5QkFBeUIsY0FBYyxhQUFhLGdCQUFnQixlQUFlLGtCQUFrQix5QkFBeUIsMkJBQTJCLEdBQUcsK0RBQStELHVCQUF1QixHQUFHLHNDQUFzQyxzQkFBc0IscUJBQXFCLEdBQUcseUJBQXlCLHlCQUF5QixvQkFBb0IsaUJBQWlCLGtCQUFrQix1QkFBdUIsR0FBRyxnQkFBZ0IsMkxBQTJMLEdBQUcseUJBQXlCLDZCQUE2Qix1QkFBdUIsb0NBQW9DLHVCQUF1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QkFBcUIsZ0NBQWdDLEdBQUcsd0NBQXdDLHNDQUFzQyxzQ0FBc0MsNkNBQTZDLHNDQUFzQywyQ0FBMkMsc0NBQXNDLDZDQUE2QyxzQ0FBc0MsNkNBQTZDLDBCQUEwQixvQ0FBb0MsR0FBRyxpRUFBaUUsZUFBZSx1QkFBdUIsR0FBRyw0RkFBNEYsZUFBZSxHQUFHLHNDQUFzQyxpQkFBaUIseUJBQXlCLGFBQWEsZUFBZSwyQkFBMkIsR0FBRywyQkFBMkIsaUJBQWlCLHlCQUF5QixHQUFHLHFCQUFxQjtBQUMvaWE7QUFDQSxpRUFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vbm9kZV9tb2R1bGVzL0B4dGVybS94dGVybS9jc3MveHRlcm0uY3NzPzQzMzQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDEzLCBDaHJpc3RvcGhlciBKZWZmcmV5IChNSVQgTGljZW5zZSlcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2hqai90ZXJtLmpzXFxuICogQGxpY2Vuc2UgTUlUXFxuICpcXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XFxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXFxcIlNvZnR3YXJlXFxcIiksIHRvIGRlYWxcXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXFxuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XFxuICpcXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxcbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxcbiAqXFxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFxcXCJBUyBJU1xcXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXFxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXFxuICogVEhFIFNPRlRXQVJFLlxcbiAqXFxuICogT3JpZ2luYWxseSBmb3JrZWQgZnJvbSAod2l0aCB0aGUgYXV0aG9yJ3MgcGVybWlzc2lvbik6XFxuICogICBGYWJyaWNlIEJlbGxhcmQncyBqYXZhc2NyaXB0IHZ0MTAwIGZvciBqc2xpbnV4OlxcbiAqICAgaHR0cDovL2JlbGxhcmQub3JnL2pzbGludXgvXFxuICogICBDb3B5cmlnaHQgKGMpIDIwMTEgRmFicmljZSBCZWxsYXJkXFxuICogICBUaGUgb3JpZ2luYWwgZGVzaWduIHJlbWFpbnMuIFRoZSB0ZXJtaW5hbCBpdHNlbGZcXG4gKiAgIGhhcyBiZWVuIGV4dGVuZGVkIHRvIGluY2x1ZGUgeHRlcm0gQ1NJIGNvZGVzLCBhbW9uZ1xcbiAqICAgb3RoZXIgZmVhdHVyZXMuXFxuICovXFxuXFxuLyoqXFxuICogIERlZmF1bHQgc3R5bGVzIGZvciB4dGVybS5qc1xcbiAqL1xcblxcbi54dGVybSB7XFxuICAgIGN1cnNvcjogdGV4dDtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4ueHRlcm0uZm9jdXMsXFxuLnh0ZXJtOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1oZWxwZXJzIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIC8qKlxcbiAgICAgKiBUaGUgei1pbmRleCBvZiB0aGUgaGVscGVycyBtdXN0IGJlIGhpZ2hlciB0aGFuIHRoZSBjYW52YXNlcyBpbiBvcmRlciBmb3JcXG4gICAgICogSU1FcyB0byBhcHBlYXIgb24gdG9wLlxcbiAgICAgKi9cXG4gICAgei1pbmRleDogNTtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEge1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBib3JkZXI6IDA7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgLyogTW92ZSB0ZXh0YXJlYSBvdXQgb2YgdGhlIHNjcmVlbiB0byB0aGUgZmFyIGxlZnQsIHNvIHRoYXQgdGhlIGN1cnNvciBpcyBub3QgdmlzaWJsZSAqL1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIGxlZnQ6IC05OTk5ZW07XFxuICAgIHRvcDogMDtcXG4gICAgd2lkdGg6IDA7XFxuICAgIGhlaWdodDogMDtcXG4gICAgei1pbmRleDogLTU7XFxuICAgIC8qKiBQcmV2ZW50IHdyYXBwaW5nIHNvIHRoZSBJTUUgYXBwZWFycyBhZ2FpbnN0IHRoZSB0ZXh0YXJlYSBhdCB0aGUgY29ycmVjdCBwb3NpdGlvbiAqL1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICByZXNpemU6IG5vbmU7XFxufVxcblxcbi54dGVybSAuY29tcG9zaXRpb24tdmlldyB7XFxuICAgIC8qIFRPRE86IENvbXBvc2l0aW9uIHBvc2l0aW9uIGdvdCBtZXNzZWQgdXAgc29tZXdoZXJlICovXFxuICAgIGJhY2tncm91bmQ6ICMwMDA7XFxuICAgIGNvbG9yOiAjRkZGO1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIHotaW5kZXg6IDE7XFxufVxcblxcbi54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7XFxuICAgIC8qIE9uIE9TIFggdGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciBmb3IgdGhlIHNjcm9sbCBiYXIgdG8gYXBwZWFyIGZ1bGx5IG9wYXF1ZSAqL1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XFxuICAgIGN1cnNvcjogZGVmYXVsdDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgdG9wOiAwO1xcbiAgICBib3R0b206IDA7XFxufVxcblxcbi54dGVybSAueHRlcm0tc2NyZWVuIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHRvcDogMDtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAtOTk5OWVtO1xcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbn1cXG5cXG4ueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7XFxuICAgIC8qIFdoZW4gbW91c2UgZXZlbnRzIGFyZSBlbmFibGVkIChlZy4gdG11eCksIHJldmVydCB0byB0aGUgc3RhbmRhcmQgcG9pbnRlciBjdXJzb3IgKi9cXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIsXFxuLnh0ZXJtIC54dGVybS1jdXJzb3ItcG9pbnRlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMge1xcbiAgICAvKiBDb2x1bW4gc2VsZWN0aW9uIG1vZGUgKi9cXG4gICAgY3Vyc29yOiBjcm9zc2hhaXI7XFxufVxcblxcbi54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eTpub3QoLmRlYnVnKSxcXG4ueHRlcm0gLnh0ZXJtLW1lc3NhZ2Uge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHRvcDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgei1pbmRleDogMTA7XFxuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eS10cmVlOm5vdCguZGVidWcpICo6OnNlbGVjdGlvbiB7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eS10cmVlIHtcXG4gIHVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgd2hpdGUtc3BhY2U6IHByZTtcXG59XFxuXFxuLnh0ZXJtIC5saXZlLXJlZ2lvbiB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogLTk5OTlweDtcXG4gICAgd2lkdGg6IDFweDtcXG4gICAgaGVpZ2h0OiAxcHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi54dGVybS1kaW0ge1xcbiAgICAvKiBEaW0gc2hvdWxkIG5vdCBhcHBseSB0byBiYWNrZ3JvdW5kLCBzbyB0aGUgb3BhY2l0eSBvZiB0aGUgZm9yZWdyb3VuZCBjb2xvciBpcyBhcHBsaWVkXFxuICAgICAqIGV4cGxpY2l0bHkgaW4gdGhlIGdlbmVyYXRlZCBjbGFzcyBhbmQgcmVzZXQgdG8gMSBoZXJlICovXFxuICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcXG59XFxuXFxuLnh0ZXJtLXVuZGVybGluZS0xIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tdW5kZXJsaW5lLTIgeyB0ZXh0LWRlY29yYXRpb246IGRvdWJsZSB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tdW5kZXJsaW5lLTMgeyB0ZXh0LWRlY29yYXRpb246IHdhdnkgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLXVuZGVybGluZS00IHsgdGV4dC1kZWNvcmF0aW9uOiBkb3R0ZWQgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLXVuZGVybGluZS01IHsgdGV4dC1kZWNvcmF0aW9uOiBkYXNoZWQgdW5kZXJsaW5lOyB9XFxuXFxuLnh0ZXJtLW92ZXJsaW5lIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTtcXG59XFxuXFxuLnh0ZXJtLW92ZXJsaW5lLnh0ZXJtLXVuZGVybGluZS0xIHsgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tb3ZlcmxpbmUueHRlcm0tdW5kZXJsaW5lLTIgeyB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lIGRvdWJsZSB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tb3ZlcmxpbmUueHRlcm0tdW5kZXJsaW5lLTMgeyB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lIHdhdnkgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLW92ZXJsaW5lLnh0ZXJtLXVuZGVybGluZS00IHsgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSBkb3R0ZWQgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLW92ZXJsaW5lLnh0ZXJtLXVuZGVybGluZS01IHsgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSBkYXNoZWQgdW5kZXJsaW5lOyB9XFxuXFxuLnh0ZXJtLXN0cmlrZXRocm91Z2gge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXG59XFxuXFxuLnh0ZXJtLXNjcmVlbiAueHRlcm0tZGVjb3JhdGlvbi1jb250YWluZXIgLnh0ZXJtLWRlY29yYXRpb24ge1xcblxcdHotaW5kZXg6IDY7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcbn1cXG5cXG4ueHRlcm0tc2NyZWVuIC54dGVybS1kZWNvcmF0aW9uLWNvbnRhaW5lciAueHRlcm0tZGVjb3JhdGlvbi54dGVybS1kZWNvcmF0aW9uLXRvcC1sYXllciB7XFxuXFx0ei1pbmRleDogNztcXG59XFxuXFxuLnh0ZXJtLWRlY29yYXRpb24tb3ZlcnZpZXctcnVsZXIge1xcbiAgICB6LWluZGV4OiA4O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4ueHRlcm0tZGVjb3JhdGlvbi10b3Age1xcbiAgICB6LWluZGV4OiAyO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9AeHRlcm0veHRlcm0vY3NzL3h0ZXJtLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStCRTs7QUFFRjs7RUFFRTs7QUFFRjtJQUNJLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHFCQUFxQjtJQUNyQix5QkFBeUI7QUFDN0I7O0FBRUE7O0lBRUksYUFBYTtBQUNqQjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixNQUFNO0lBQ047OztNQUdFO0lBQ0YsVUFBVTtBQUNkOztBQUVBO0lBQ0ksVUFBVTtJQUNWLFNBQVM7SUFDVCxTQUFTO0lBQ1QsdUZBQXVGO0lBQ3ZGLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsYUFBYTtJQUNiLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULFdBQVc7SUFDWCxzRkFBc0Y7SUFDdEYsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixZQUFZO0FBQ2hCOztBQUVBO0lBQ0ksdURBQXVEO0lBQ3ZELGdCQUFnQjtJQUNoQixXQUFXO0lBQ1gsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsVUFBVTtBQUNkOztBQUVBO0lBQ0ksY0FBYztBQUNsQjs7QUFFQTtJQUNJLGdGQUFnRjtJQUNoRixzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLE9BQU87SUFDUCxNQUFNO0lBQ04sU0FBUztBQUNiOztBQUVBO0lBQ0ksa0JBQWtCO0FBQ3RCOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLE9BQU87SUFDUCxNQUFNO0FBQ1Y7O0FBRUE7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixNQUFNO0lBQ04sYUFBYTtJQUNiLG1CQUFtQjtBQUN2Qjs7QUFFQTtJQUNJLG9GQUFvRjtJQUNwRixlQUFlO0FBQ25COztBQUVBOztJQUVJLGVBQWU7QUFDbkI7O0FBRUE7SUFDSSwwQkFBMEI7SUFDMUIsaUJBQWlCO0FBQ3JCOztBQUVBOztJQUVJLGtCQUFrQjtJQUNsQixPQUFPO0lBQ1AsTUFBTTtJQUNOLFNBQVM7SUFDVCxRQUFRO0lBQ1IsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixvQkFBb0I7QUFDeEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsZ0JBQWdCO0FBQ2xCOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixVQUFVO0lBQ1YsV0FBVztJQUNYLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJOzhEQUMwRDtJQUMxRCxxQkFBcUI7QUFDekI7O0FBRUEscUJBQXFCLDBCQUEwQixFQUFFO0FBQ2pELHFCQUFxQixpQ0FBaUMsRUFBRTtBQUN4RCxxQkFBcUIsK0JBQStCLEVBQUU7QUFDdEQscUJBQXFCLGlDQUFpQyxFQUFFO0FBQ3hELHFCQUFxQixpQ0FBaUMsRUFBRTs7QUFFeEQ7SUFDSSx5QkFBeUI7QUFDN0I7O0FBRUEsb0NBQW9DLG1DQUFtQyxFQUFFO0FBQ3pFLG9DQUFvQywwQ0FBMEMsRUFBRTtBQUNoRixvQ0FBb0Msd0NBQXdDLEVBQUU7QUFDOUUsb0NBQW9DLDBDQUEwQyxFQUFFO0FBQ2hGLG9DQUFvQywwQ0FBMEMsRUFBRTs7QUFFaEY7SUFDSSw2QkFBNkI7QUFDakM7O0FBRUE7Q0FDQyxVQUFVO0NBQ1Ysa0JBQWtCO0FBQ25COztBQUVBO0NBQ0MsVUFBVTtBQUNYOztBQUVBO0lBQ0ksVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixNQUFNO0lBQ04sUUFBUTtJQUNSLG9CQUFvQjtBQUN4Qjs7QUFFQTtJQUNJLFVBQVU7SUFDVixrQkFBa0I7QUFDdEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSB4dGVybS5qcyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDEzLCBDaHJpc3RvcGhlciBKZWZmcmV5IChNSVQgTGljZW5zZSlcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2hqai90ZXJtLmpzXFxuICogQGxpY2Vuc2UgTUlUXFxuICpcXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XFxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXFxcIlNvZnR3YXJlXFxcIiksIHRvIGRlYWxcXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXFxuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XFxuICpcXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxcbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxcbiAqXFxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFxcXCJBUyBJU1xcXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXFxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXFxuICogVEhFIFNPRlRXQVJFLlxcbiAqXFxuICogT3JpZ2luYWxseSBmb3JrZWQgZnJvbSAod2l0aCB0aGUgYXV0aG9yJ3MgcGVybWlzc2lvbik6XFxuICogICBGYWJyaWNlIEJlbGxhcmQncyBqYXZhc2NyaXB0IHZ0MTAwIGZvciBqc2xpbnV4OlxcbiAqICAgaHR0cDovL2JlbGxhcmQub3JnL2pzbGludXgvXFxuICogICBDb3B5cmlnaHQgKGMpIDIwMTEgRmFicmljZSBCZWxsYXJkXFxuICogICBUaGUgb3JpZ2luYWwgZGVzaWduIHJlbWFpbnMuIFRoZSB0ZXJtaW5hbCBpdHNlbGZcXG4gKiAgIGhhcyBiZWVuIGV4dGVuZGVkIHRvIGluY2x1ZGUgeHRlcm0gQ1NJIGNvZGVzLCBhbW9uZ1xcbiAqICAgb3RoZXIgZmVhdHVyZXMuXFxuICovXFxuXFxuLyoqXFxuICogIERlZmF1bHQgc3R5bGVzIGZvciB4dGVybS5qc1xcbiAqL1xcblxcbi54dGVybSB7XFxuICAgIGN1cnNvcjogdGV4dDtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4ueHRlcm0uZm9jdXMsXFxuLnh0ZXJtOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1oZWxwZXJzIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIC8qKlxcbiAgICAgKiBUaGUgei1pbmRleCBvZiB0aGUgaGVscGVycyBtdXN0IGJlIGhpZ2hlciB0aGFuIHRoZSBjYW52YXNlcyBpbiBvcmRlciBmb3JcXG4gICAgICogSU1FcyB0byBhcHBlYXIgb24gdG9wLlxcbiAgICAgKi9cXG4gICAgei1pbmRleDogNTtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEge1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBib3JkZXI6IDA7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgLyogTW92ZSB0ZXh0YXJlYSBvdXQgb2YgdGhlIHNjcmVlbiB0byB0aGUgZmFyIGxlZnQsIHNvIHRoYXQgdGhlIGN1cnNvciBpcyBub3QgdmlzaWJsZSAqL1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIGxlZnQ6IC05OTk5ZW07XFxuICAgIHRvcDogMDtcXG4gICAgd2lkdGg6IDA7XFxuICAgIGhlaWdodDogMDtcXG4gICAgei1pbmRleDogLTU7XFxuICAgIC8qKiBQcmV2ZW50IHdyYXBwaW5nIHNvIHRoZSBJTUUgYXBwZWFycyBhZ2FpbnN0IHRoZSB0ZXh0YXJlYSBhdCB0aGUgY29ycmVjdCBwb3NpdGlvbiAqL1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICByZXNpemU6IG5vbmU7XFxufVxcblxcbi54dGVybSAuY29tcG9zaXRpb24tdmlldyB7XFxuICAgIC8qIFRPRE86IENvbXBvc2l0aW9uIHBvc2l0aW9uIGdvdCBtZXNzZWQgdXAgc29tZXdoZXJlICovXFxuICAgIGJhY2tncm91bmQ6ICMwMDA7XFxuICAgIGNvbG9yOiAjRkZGO1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIHotaW5kZXg6IDE7XFxufVxcblxcbi54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnh0ZXJtIC54dGVybS12aWV3cG9ydCB7XFxuICAgIC8qIE9uIE9TIFggdGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlciBmb3IgdGhlIHNjcm9sbCBiYXIgdG8gYXBwZWFyIGZ1bGx5IG9wYXF1ZSAqL1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XFxuICAgIGN1cnNvcjogZGVmYXVsdDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgdG9wOiAwO1xcbiAgICBib3R0b206IDA7XFxufVxcblxcbi54dGVybSAueHRlcm0tc2NyZWVuIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHRvcDogMDtcXG59XFxuXFxuLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAwO1xcbiAgICBsZWZ0OiAtOTk5OWVtO1xcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbn1cXG5cXG4ueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7XFxuICAgIC8qIFdoZW4gbW91c2UgZXZlbnRzIGFyZSBlbmFibGVkIChlZy4gdG11eCksIHJldmVydCB0byB0aGUgc3RhbmRhcmQgcG9pbnRlciBjdXJzb3IgKi9cXG4gICAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIsXFxuLnh0ZXJtIC54dGVybS1jdXJzb3ItcG9pbnRlciB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMge1xcbiAgICAvKiBDb2x1bW4gc2VsZWN0aW9uIG1vZGUgKi9cXG4gICAgY3Vyc29yOiBjcm9zc2hhaXI7XFxufVxcblxcbi54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eTpub3QoLmRlYnVnKSxcXG4ueHRlcm0gLnh0ZXJtLW1lc3NhZ2Uge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGxlZnQ6IDA7XFxuICAgIHRvcDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgei1pbmRleDogMTA7XFxuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eS10cmVlOm5vdCguZGVidWcpICo6OnNlbGVjdGlvbiB7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi54dGVybSAueHRlcm0tYWNjZXNzaWJpbGl0eS10cmVlIHtcXG4gIHVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgd2hpdGUtc3BhY2U6IHByZTtcXG59XFxuXFxuLnh0ZXJtIC5saXZlLXJlZ2lvbiB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogLTk5OTlweDtcXG4gICAgd2lkdGg6IDFweDtcXG4gICAgaGVpZ2h0OiAxcHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi54dGVybS1kaW0ge1xcbiAgICAvKiBEaW0gc2hvdWxkIG5vdCBhcHBseSB0byBiYWNrZ3JvdW5kLCBzbyB0aGUgb3BhY2l0eSBvZiB0aGUgZm9yZWdyb3VuZCBjb2xvciBpcyBhcHBsaWVkXFxuICAgICAqIGV4cGxpY2l0bHkgaW4gdGhlIGdlbmVyYXRlZCBjbGFzcyBhbmQgcmVzZXQgdG8gMSBoZXJlICovXFxuICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcXG59XFxuXFxuLnh0ZXJtLXVuZGVybGluZS0xIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tdW5kZXJsaW5lLTIgeyB0ZXh0LWRlY29yYXRpb246IGRvdWJsZSB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tdW5kZXJsaW5lLTMgeyB0ZXh0LWRlY29yYXRpb246IHdhdnkgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLXVuZGVybGluZS00IHsgdGV4dC1kZWNvcmF0aW9uOiBkb3R0ZWQgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLXVuZGVybGluZS01IHsgdGV4dC1kZWNvcmF0aW9uOiBkYXNoZWQgdW5kZXJsaW5lOyB9XFxuXFxuLnh0ZXJtLW92ZXJsaW5lIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTtcXG59XFxuXFxuLnh0ZXJtLW92ZXJsaW5lLnh0ZXJtLXVuZGVybGluZS0xIHsgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tb3ZlcmxpbmUueHRlcm0tdW5kZXJsaW5lLTIgeyB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lIGRvdWJsZSB1bmRlcmxpbmU7IH1cXG4ueHRlcm0tb3ZlcmxpbmUueHRlcm0tdW5kZXJsaW5lLTMgeyB0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lIHdhdnkgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLW92ZXJsaW5lLnh0ZXJtLXVuZGVybGluZS00IHsgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSBkb3R0ZWQgdW5kZXJsaW5lOyB9XFxuLnh0ZXJtLW92ZXJsaW5lLnh0ZXJtLXVuZGVybGluZS01IHsgdGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSBkYXNoZWQgdW5kZXJsaW5lOyB9XFxuXFxuLnh0ZXJtLXN0cmlrZXRocm91Z2gge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXG59XFxuXFxuLnh0ZXJtLXNjcmVlbiAueHRlcm0tZGVjb3JhdGlvbi1jb250YWluZXIgLnh0ZXJtLWRlY29yYXRpb24ge1xcblxcdHotaW5kZXg6IDY7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcbn1cXG5cXG4ueHRlcm0tc2NyZWVuIC54dGVybS1kZWNvcmF0aW9uLWNvbnRhaW5lciAueHRlcm0tZGVjb3JhdGlvbi54dGVybS1kZWNvcmF0aW9uLXRvcC1sYXllciB7XFxuXFx0ei1pbmRleDogNztcXG59XFxuXFxuLnh0ZXJtLWRlY29yYXRpb24tb3ZlcnZpZXctcnVsZXIge1xcbiAgICB6LWluZGV4OiA4O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4ueHRlcm0tZGVjb3JhdGlvbi10b3Age1xcbiAgICB6LWluZGV4OiAyO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/@xterm/xterm/css/xterm.css\n"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/api.js": +/*!*****************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/api.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0EscUZBQXFGO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHFCQUFxQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzRkFBc0YscUJBQXFCO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixpREFBaUQscUJBQXFCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzREFBc0QscUJBQXFCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9nby1zc2gtd2ViLWNsaWVudC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!************************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/sourceMaps.js\n"); + +/***/ }), + +/***/ "./node_modules/@xterm/xterm/css/xterm.css": +/*!*************************************************!*\ + !*** ./node_modules/@xterm/xterm/css/xterm.css ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _css_loader_dist_cjs_js_xterm_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../css-loader/dist/cjs.js!./xterm.css */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/@xterm/xterm/css/xterm.css\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_xterm_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_xterm_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _css_loader_dist_cjs_js_xterm_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _css_loader_dist_cjs_js_xterm_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHh0ZXJtL3h0ZXJtL2Nzcy94dGVybS5jc3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsTUFBd0Y7QUFDeEYsTUFBOEU7QUFDOUUsTUFBcUY7QUFDckYsTUFBd0c7QUFDeEcsTUFBaUc7QUFDakcsTUFBaUc7QUFDakcsTUFBNEY7QUFDNUY7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEIsd0ZBQW1CO0FBQy9DLHdCQUF3QixxR0FBYTtBQUNyQyxpQkFBaUIsMEZBQWE7QUFDOUIsaUJBQWlCLGtGQUFNO0FBQ3ZCLDZCQUE2Qix5RkFBa0I7O0FBRS9DLGFBQWEsNkZBQUcsQ0FBQyx5RUFBTzs7OztBQUlzQztBQUM5RCxPQUFPLGlFQUFlLHlFQUFPLElBQUksZ0ZBQWMsR0FBRyxnRkFBYyxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9nby1zc2gtd2ViLWNsaWVudC8uL25vZGVfbW9kdWxlcy9AeHRlcm0veHRlcm0vY3NzL3h0ZXJtLmNzcz81YzMzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3h0ZXJtLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4veHRlcm0uY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@xterm/xterm/css/xterm.css\n"); + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": +/*!****************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! + \****************************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw2QkFBNkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9nby1zc2gtd2ViLWNsaWVudC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcz8yZGJhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\n"); + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": +/*!********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! + \********************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcz9iMjE0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/insertBySelector.js\n"); + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": +/*!**********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzP2RlNmMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/insertStyleElement.js\n"); + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLGNBQWMsS0FBd0MsR0FBRyxzQkFBaUIsR0FBRyxDQUFJO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9nby1zc2gtd2ViLWNsaWVudC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcz9kZGNlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\n"); + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": +/*!***************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! + \***************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanM/ZTQ3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/styleDomAPI.js\n"); + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": +/*!*********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanM/MWRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/styleTagTransform.js\n"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval-source-map devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./index.js"); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/front/index.html b/front/index.html index 1a39973..fe81842 100644 --- a/front/index.html +++ b/front/index.html @@ -1,12 +1,14 @@ - - - Go SSH Web Client - - - - -
- - - \ No newline at end of file + + + Go SSH Web Client + + + +
+ + + diff --git a/front/index.js b/front/index.js index 6a2748e..4c29f0a 100644 --- a/front/index.js +++ b/front/index.js @@ -1,6 +1,8 @@ -import { Terminal } from 'xterm'; -import { AttachAddon } from 'xterm-addon-attach'; -import { FitAddon } from 'xterm-addon-fit'; +import { Terminal } from '@xterm/xterm'; +import { AttachAddon } from '@xterm/addon-attach'; +import { FitAddon } from '@xterm/addon-fit'; + +import '@xterm/xterm/css/xterm.css'; const terminal = new Terminal(); const fitAddon = new FitAddon(); diff --git a/front/package-lock.json b/front/package-lock.json index d37218b..098f431 100644 --- a/front/package-lock.json +++ b/front/package-lock.json @@ -9,16 +9,21 @@ "version": "0.0.1", "license": "MIT", "dependencies": { - "xterm": "^4.17.0", - "xterm-addon-attach": "^0.6.0", - "xterm-addon-fit": "^0.5.0" + "@xterm/addon-attach": "0.11.0", + "@xterm/addon-fit": "0.10.0", + "@xterm/xterm": "5.5.0" }, "devDependencies": { + "css-loader": "^7.1.2", "eslint": "^8.10.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.25.4", + "style-loader": "^4.0.0", "webpack": "^5.69.1", "webpack-cli": "^4.9.2" + }, + "engines": { + "node": ">=18 <=20" } }, "node_modules/@discoveryjs/json-ext": { @@ -305,6 +310,30 @@ } } }, + "node_modules/@xterm/addon-attach": { + "version": "0.11.0", + "resolved": "https://bnpm.byted.org/@xterm/addon-attach/-/addon-attach-0.11.0.tgz", + "integrity": "sha512-JboCN0QAY6ZLY/SSB/Zl2cQ5zW1Eh4X3fH7BnuR1NB7xGRhzbqU2Npmpiw/3zFlxDaU88vtKzok44JKi2L2V2Q==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/addon-fit": { + "version": "0.10.0", + "resolved": "https://bnpm.byted.org/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", + "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://bnpm.byted.org/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", + "license": "MIT" + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -622,6 +651,61 @@ "node": ">= 8" } }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://bnpm.byted.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://bnpm.byted.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://bnpm.byted.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -1441,6 +1525,18 @@ "node": ">=10.17.0" } }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://bnpm.byted.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -1928,6 +2024,18 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://bnpm.byted.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2148,9 +2256,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "node_modules/pkg-dir": { @@ -2165,6 +2273,98 @@ "node": ">=8" } }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://bnpm.byted.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://bnpm.byted.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://bnpm.byted.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://bnpm.byted.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://bnpm.byted.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://bnpm.byted.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2387,6 +2587,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://bnpm.byted.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -2465,6 +2674,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-loader": { + "version": "4.0.0", + "resolved": "https://bnpm.byted.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "dev": true, + "engines": { + "node": ">= 18.12.0" + }, + "peerDependencies": { + "webpack": "^5.27.0" + } + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -2628,6 +2849,12 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -2819,27 +3046,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true - }, - "node_modules/xterm": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.17.0.tgz", - "integrity": "sha512-WGXlIHvLvZKtwMdFaL6kUwp+c9abd2Pcakp/GmuefBuOtGCu9fP9tBDPKyL/A17N+5tt44EYk3YsBbvkPBubMw==" - }, - "node_modules/xterm-addon-attach": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xterm-addon-attach/-/xterm-addon-attach-0.6.0.tgz", - "integrity": "sha512-Mo8r3HTjI/EZfczVCwRU6jh438B4WLXxdFO86OB7bx0jGhwh2GdF4ifx/rP+OB+Cb2vmLhhVIZ00/7x3YSP3dg==", - "peerDependencies": { - "xterm": "^4.0.0" - } - }, - "node_modules/xterm-addon-fit": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz", - "integrity": "sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==", - "peerDependencies": { - "xterm": "^4.0.0" - } } }, "dependencies": { @@ -3104,6 +3310,23 @@ "dev": true, "requires": {} }, + "@xterm/addon-attach": { + "version": "0.11.0", + "resolved": "https://bnpm.byted.org/@xterm/addon-attach/-/addon-attach-0.11.0.tgz", + "integrity": "sha512-JboCN0QAY6ZLY/SSB/Zl2cQ5zW1Eh4X3fH7BnuR1NB7xGRhzbqU2Npmpiw/3zFlxDaU88vtKzok44JKi2L2V2Q==", + "requires": {} + }, + "@xterm/addon-fit": { + "version": "0.10.0", + "resolved": "https://bnpm.byted.org/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", + "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", + "requires": {} + }, + "@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://bnpm.byted.org/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -3345,6 +3568,36 @@ "which": "^2.0.1" } }, + "css-loader": { + "version": "7.1.2", + "resolved": "https://bnpm.byted.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.7.3", + "resolved": "https://bnpm.byted.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true + } + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://bnpm.byted.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", @@ -3971,6 +4224,13 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://bnpm.byted.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -4319,6 +4579,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://bnpm.byted.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4482,9 +4748,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.1", + "resolved": "https://bnpm.byted.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "pkg-dir": { @@ -4496,6 +4762,69 @@ "find-up": "^4.0.0" } }, + "postcss": { + "version": "8.5.6", + "resolved": "https://bnpm.byted.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://bnpm.byted.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://bnpm.byted.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://bnpm.byted.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^7.0.0" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://bnpm.byted.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://bnpm.byted.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://bnpm.byted.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4646,6 +4975,12 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://bnpm.byted.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -4703,6 +5038,13 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "style-loader": { + "version": "4.0.0", + "resolved": "https://bnpm.byted.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "dev": true, + "requires": {} + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4811,6 +5153,12 @@ "punycode": "^2.1.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://bnpm.byted.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -4942,23 +5290,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true - }, - "xterm": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.17.0.tgz", - "integrity": "sha512-WGXlIHvLvZKtwMdFaL6kUwp+c9abd2Pcakp/GmuefBuOtGCu9fP9tBDPKyL/A17N+5tt44EYk3YsBbvkPBubMw==" - }, - "xterm-addon-attach": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xterm-addon-attach/-/xterm-addon-attach-0.6.0.tgz", - "integrity": "sha512-Mo8r3HTjI/EZfczVCwRU6jh438B4WLXxdFO86OB7bx0jGhwh2GdF4ifx/rP+OB+Cb2vmLhhVIZ00/7x3YSP3dg==", - "requires": {} - }, - "xterm-addon-fit": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz", - "integrity": "sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==", - "requires": {} } } } diff --git a/front/package.json b/front/package.json index 4bfc941..75a0609 100644 --- a/front/package.json +++ b/front/package.json @@ -4,7 +4,8 @@ "description": "Using Go, WebSocket and xterm.js to be a SSH client.", "main": "index.js", "scripts": { - "build": "webpack" + "build": "webpack --mode production", + "dev": "webpack --mode development" }, "repository": { "type": "git", @@ -21,15 +22,20 @@ }, "homepage": "https://github.com/wuchihsu/go-ssh-web-client#readme", "dependencies": { - "xterm": "^4.17.0", - "xterm-addon-attach": "^0.6.0", - "xterm-addon-fit": "^0.5.0" + "@xterm/addon-attach": "0.11.0", + "@xterm/addon-fit": "0.10.0", + "@xterm/xterm": "5.5.0" }, "devDependencies": { + "css-loader": "^7.1.2", "eslint": "^8.10.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.25.4", + "style-loader": "^4.0.0", "webpack": "^5.69.1", "webpack-cli": "^4.9.2" + }, + "engines": { + "node": ">=18 <=20" } -} +} \ No newline at end of file diff --git a/front/webpack.config.js b/front/webpack.config.js index 038e909..891531c 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -1,7 +1,23 @@ -module.exports = { - mode: 'production', - entry: ['./index.js'], - output: { - filename: 'bundle.js' - } -}; \ No newline at end of file +module.exports = (_, argv) => { + const isDev = argv && argv.mode === 'development'; + return { + mode: isDev ? 'development' : 'production', + entry: ['./index.js'], + output: { + filename: 'bundle.js' + }, + module: { + rules: [ + { + test: /\.css$/i, + use: ['style-loader', 'css-loader'], + }, + ], + }, + devtool: isDev ? 'eval-source-map' : false, + watch: isDev, + watchOptions: { + ignored: /node_modules/ + } + }; +}; diff --git a/go.mod b/go.mod index 4d8f8e2..8ac9b9c 100644 --- a/go.mod +++ b/go.mod @@ -2,10 +2,10 @@ module github.com/wuchihsu/go-ssh-web-client go 1.17 -require golang.org/x/crypto v0.0.0-20220214200702-86341886e292 - require ( - github.com/BurntSushi/toml v1.0.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect + github.com/BurntSushi/toml v1.0.0 + github.com/gorilla/websocket v1.5.0 + golang.org/x/crypto v0.0.0-20220214200702-86341886e292 ) + +require golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect diff --git a/go.sum b/go.sum index 9e7fb31..9a510b7 100644 --- a/go.sum +++ b/go.sum @@ -4,5 +4,12 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/handler.go b/handler.go index 90a20da..4b28efc 100644 --- a/handler.go +++ b/handler.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "io" - "log" "net/http" "os" "time" @@ -62,8 +61,6 @@ func (c *sshClient) getWindowSize() (wdSize *windowSize, err error) { return } - // log.Println("msg:", string(msg)) - wdSize = new(windowSize) if err = json.Unmarshal(msg, wdSize); err != nil { err = fmt.Errorf("json.Unmarshal: %w", err) @@ -120,15 +117,11 @@ func (c *sshClient) wsRead() error { return fmt.Errorf("connReader.Read: %w", err) } - // log.Println("data:", string(data)) - var wdSize windowSize if err := json.Unmarshal(data[:n], &wdSize); err != nil { return fmt.Errorf("json.Unmarshal: %w", err) } - // log.Println("wdSize:", wdSize) - if err := c.sess.WindowChange(wdSize.High, wdSize.Width); err != nil { return fmt.Errorf("sess.WindowChange: %w", err) } @@ -140,27 +133,30 @@ func (c *sshClient) bridgeWSAndSSH() { wdSize, err := c.getWindowSize() if err != nil { - log.Println("bridgeWSAndSSH: getWindowSize:", err) + logError("bridgeWSAndSSH: getWindowSize:", err) return } - // log.Println("wdSize:", wdSize) - var auth ssh.AuthMethod if c.secret != "" { auth = ssh.Password(c.secret) } else { - key, err := os.ReadFile(c.keyfile) - if err != nil { - log.Println("bridgeWSAndSSH: os.ReadFile:", err) - return - } - privateKey, err := ssh.ParsePrivateKey(key) - if err != nil { - log.Println("bridgeWSAndSSH: ssh.ParsePrivateKey:", err) - return + if c.keyfile != "" { + key, err := os.ReadFile(c.keyfile) + if err != nil { + logError("bridgeWSAndSSH: os.ReadFile: %s", err) + return + } + privateKey, err := ssh.ParsePrivateKey(key) + if err != nil { + logError("bridgeWSAndSSH: ssh.ParsePrivateKey:", err) + return + } + auth = ssh.PublicKeys(privateKey) + } else { + auth = nil } - auth = ssh.PublicKeys(privateKey) + } config := &ssh.ClientConfig{ @@ -174,14 +170,14 @@ func (c *sshClient) bridgeWSAndSSH() { } c.client, err = ssh.Dial("tcp", c.addr, config) if err != nil { - log.Println("bridgeWSAndSSH: ssh.Dial:", err) + logError("bridgeWSAndSSH: ssh.Dial:", err) return } defer c.client.Close() c.sess, err = c.client.NewSession() if err != nil { - log.Println("bridgeWSAndSSH: client.NewSession:", err) + logError("bridgeWSAndSSH: client.NewSession:", err) return } defer c.sess.Close() @@ -189,38 +185,41 @@ func (c *sshClient) bridgeWSAndSSH() { c.sess.Stderr = os.Stderr // TODO: check proper Stderr output c.sessOut, err = c.sess.StdoutPipe() if err != nil { - log.Println("bridgeWSAndSSH: session.StdoutPipe:", err) + logError("bridgeWSAndSSH: session.StdoutPipe:", err) return } c.sessIn, err = c.sess.StdinPipe() if err != nil { - log.Println("bridgeWSAndSSH: session.StdinPipe:", err) + logError("bridgeWSAndSSH: session.StdinPipe:", err) return } defer c.sessIn.Close() if err := c.sess.RequestPty("xterm", wdSize.High, wdSize.Width, terminalModes); err != nil { - log.Println("bridgeWSAndSSH: session.RequestPty:", err) + logError("bridgeWSAndSSH: session.RequestPty:", err) return } if err := c.sess.Shell(); err != nil { - log.Println("bridgeWSAndSSH: session.Shell:", err) + logError("bridgeWSAndSSH: session.Shell:", err) return } - log.Println("started a login shell on the remote host") - defer log.Println("closed a login shell on the remote host") + logInfo("started a login shell on the remote host") + + // TODO: Send data to websocket if SSH connection closed! + defer logInfo("closed a login shell on the remote host") go func() { if err := c.wsRead(); err != nil { - log.Println("bridgeWSAndSSH: wsRead:", err) + logError("bridgeWSAndSSH: wsRead:", err) } }() go func() { if err := c.wsWrite(); err != nil { - log.Println("bridgeWSAndSSH: wsWrite:", err) + // TODO: Send data to websocket if SSH connection closed! + logError("bridgeWSAndSSH: wsWrite:", err) } }() @@ -238,7 +237,7 @@ type sshHandler struct { func (h *sshHandler) webSocket(w http.ResponseWriter, req *http.Request) { conn, err := upgrader.Upgrade(w, req, nil) if err != nil { - log.Println("upgrader.Upgrade:", err) + logError("upgrader.Upgrade:", err) return } diff --git a/helper.go b/helper.go new file mode 100644 index 0000000..fd96766 --- /dev/null +++ b/helper.go @@ -0,0 +1,11 @@ +package main + +import "os" + +func getPort() string { + httpPort := os.Getenv("PORT") + if httpPort == "" { + httpPort = "8080" + } + return httpPort +} diff --git a/log.go b/log.go new file mode 100644 index 0000000..df28a6e --- /dev/null +++ b/log.go @@ -0,0 +1,26 @@ +package main + +import ( + "fmt" + "log" +) + +// func to print warn log with color yellow +func logWarn(msg string, args ...interface{}) { + log.Printf("\033[33mwarn: %s\033[0m", fmt.Sprintf(msg, args...)) +} + +// func to print info log with color green +func logInfo(msg string, args ...interface{}) { + log.Printf("\033[32minfo: %s\033[0m", fmt.Sprintf(msg, args...)) +} + +// func to print debug log with color blue +func logDebug(msg string, args ...interface{}) { + log.Printf("\033[34mdebug: %s\033[0m", fmt.Sprintf(msg, args...)) +} + +// func to print error log with color red +func logError(msg string, args ...interface{}) { + log.Printf("\033[31merror: %s\033[0m", fmt.Sprintf(msg, args...)) +} diff --git a/main.go b/main.go index 2aec6d3..3285e1e 100644 --- a/main.go +++ b/main.go @@ -54,22 +54,24 @@ func main() { flag.Parse() + logInfo("start ssh web client") + var cfg config var handler *sshHandler if _, err := toml.DecodeFile(configPath, &cfg); errors.Is(err, os.ErrNotExist) { if host == "" { - log.Fatal("host can not be empty") + logWarn("host can not be empty") } if user == "" { - log.Fatal("user can not be empty") + logWarn("user can not be empty") } if password == "" && identityFile == "" { - log.Fatal("password can not be empty") + logWarn("password can not be empty") } addr := fmt.Sprintf("%s:%d", host, port) handler = &sshHandler{addr: addr, user: user, secret: password} } else if err != nil { - log.Fatal("could not parse config file: ", err) + logError("could not parse config file", err) } else { addr := fmt.Sprintf("%s:%d", cfg.Host, cfg.Port) if password != "" { @@ -81,6 +83,5 @@ func main() { http.Handle("/", http.FileServer(http.Dir("./front/"))) http.HandleFunc("/web-socket/ssh", handler.webSocket) - addr := fmt.Sprintf("%s:%d", bind, listen) - log.Fatal(http.ListenAndServe(addr, nil)) + log.Fatal(http.ListenAndServe(":"+getPort(), nil)) } diff --git a/scripts/backend-dev.sh b/scripts/backend-dev.sh new file mode 100755 index 0000000..3ab06be --- /dev/null +++ b/scripts/backend-dev.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# dev frontend live reload +cd front +npm run dev \ No newline at end of file diff --git a/scripts/build-docker.sh b/scripts/build-docker.sh new file mode 100755 index 0000000..824952e --- /dev/null +++ b/scripts/build-docker.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build -t prakasa1904/go-ssh-web-client:alpha . \ No newline at end of file diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..5b5cfe6 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# build frontend +cd front +npm install +npm run build + +# build backend +cd .. +go build -o app . \ No newline at end of file diff --git a/scripts/docker-dev.sh b/scripts/docker-dev.sh new file mode 100755 index 0000000..43b4e2a --- /dev/null +++ b/scripts/docker-dev.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# docker down and delete container +docker stop go-ssh && docker rm go-ssh || echo "go-ssh container not found" + +docker run --name go-ssh \ + -v `pwd`/config.toml:/root/config.toml \ + -p 8080:8080 \ + prakasa1904/go-ssh-web-client:alpha \ No newline at end of file diff --git a/scripts/frontend-dev.sh b/scripts/frontend-dev.sh new file mode 100755 index 0000000..3ab06be --- /dev/null +++ b/scripts/frontend-dev.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# dev frontend live reload +cd front +npm run dev \ No newline at end of file From 69733cc3e8ac7312848fabd92f17d0d668750348 Mon Sep 17 00:00:00 2001 From: Nedya Prakasa Date: Tue, 16 Dec 2025 17:49:14 +0700 Subject: [PATCH 2/6] fix: run backend dev script --- scripts/backend-dev.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/backend-dev.sh b/scripts/backend-dev.sh index 3ab06be..2b04728 100755 --- a/scripts/backend-dev.sh +++ b/scripts/backend-dev.sh @@ -1,5 +1,4 @@ #!/bin/bash -# dev frontend live reload -cd front -npm run dev \ No newline at end of file +# dev backend +go run . \ No newline at end of file From d201114b8ddd6ce6fd6900a28b4945c04a47cb74 Mon Sep 17 00:00:00 2001 From: Nedya Prakasa Date: Tue, 16 Dec 2025 17:51:28 +0700 Subject: [PATCH 3/6] fix: fixing docker script --- scripts/build-docker.sh | 3 --- scripts/docker-build.sh | 3 +++ scripts/docker-dev.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) delete mode 100755 scripts/build-docker.sh create mode 100755 scripts/docker-build.sh diff --git a/scripts/build-docker.sh b/scripts/build-docker.sh deleted file mode 100755 index 824952e..0000000 --- a/scripts/build-docker.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -docker build -t prakasa1904/go-ssh-web-client:alpha . \ No newline at end of file diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh new file mode 100755 index 0000000..df6e646 --- /dev/null +++ b/scripts/docker-build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build -t wuchihsu/go-ssh-web-client . \ No newline at end of file diff --git a/scripts/docker-dev.sh b/scripts/docker-dev.sh index 43b4e2a..5098dda 100755 --- a/scripts/docker-dev.sh +++ b/scripts/docker-dev.sh @@ -5,4 +5,4 @@ docker stop go-ssh && docker rm go-ssh || echo "go-ssh container not found" docker run --name go-ssh \ -v `pwd`/config.toml:/root/config.toml \ -p 8080:8080 \ - prakasa1904/go-ssh-web-client:alpha \ No newline at end of file + wuchihsu/go-ssh-web-client \ No newline at end of file From 948388df85fc2d021c80cedb30a101d9082e7c14 Mon Sep 17 00:00:00 2001 From: Nedya Prakasa Date: Tue, 16 Dec 2025 18:01:04 +0700 Subject: [PATCH 4/6] docs: update typo in document --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fa90e1d..b71815b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A simple SSH web client using Go, WebSocket and Xterm.js. ## Getting Started -After cloning the project, copy [config.toml.sample](config.toml.sample) to config.toml. Modify the host, port, user and password attributes to match the target SSH server in [config.toml.sample](config.toml.sample), then save the file config.toml. +After cloning the project, copy [config.toml.sample](config.toml.sample) to `config.toml`. Modify the host, port, user and password attributes to match the target SSH server in `config.toml`. There are two ways to install and run the project, using build script and using Docker. From 0e9c98beaf1972203c022cb7fc52819595584345 Mon Sep 17 00:00:00 2001 From: Nedya Prakasa Date: Tue, 16 Dec 2025 18:06:27 +0700 Subject: [PATCH 5/6] fix: support wss if open under https --- front/dist/bundle.js | 2 +- front/index.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/front/dist/bundle.js b/front/dist/bundle.js index 0cf50e6..e24eb11 100644 --- a/front/dist/bundle.js +++ b/front/dist/bundle.js @@ -16,7 +16,7 @@ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _xterm_xterm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @xterm/xterm */ \"./node_modules/@xterm/xterm/lib/xterm.js\");\n/* harmony import */ var _xterm_xterm__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_xterm_xterm__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @xterm/addon-attach */ \"./node_modules/@xterm/addon-attach/lib/addon-attach.js\");\n/* harmony import */ var _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @xterm/addon-fit */ \"./node_modules/@xterm/addon-fit/lib/addon-fit.js\");\n/* harmony import */ var _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _xterm_xterm_css_xterm_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @xterm/xterm/css/xterm.css */ \"./node_modules/@xterm/xterm/css/xterm.css\");\n\n\n\n\n\n\nconst terminal = new _xterm_xterm__WEBPACK_IMPORTED_MODULE_0__.Terminal();\nconst fitAddon = new _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__.FitAddon();\nterminal.loadAddon(fitAddon);\nterminal.open(document.getElementById('terminal'));\nfitAddon.fit();\n\nconst webSocket = new WebSocket('ws://' + window.location.host + '/web-socket/ssh');\n\nconst sendSize = () => {\n const windowSize = {high: terminal.rows, width: terminal.cols};\n const blob = new Blob([JSON.stringify(windowSize)], {type : 'application/json'});\n webSocket.send(blob);\n}\n\nwebSocket.onopen = sendSize;\n\nconst resizeScreen = () => {\n fitAddon.fit();\n sendSize();\n}\nwindow.addEventListener('resize', resizeScreen, false);\n\nconst attachAddon = new _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__.AttachAddon(webSocket);\nterminal.loadAddon(attachAddon);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3QztBQUNVO0FBQ047O0FBRVI7O0FBRXBDLHFCQUFxQixrREFBUTtBQUM3QixxQkFBcUIsc0RBQVE7QUFDN0I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esc0JBQXNCO0FBQ3RCLHVEQUF1RCwwQkFBMEI7QUFDakY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qiw0REFBVztBQUNuQyIsInNvdXJjZXMiOlsid2VicGFjazovL2dvLXNzaC13ZWItY2xpZW50Ly4vaW5kZXguanM/NDFmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXJtaW5hbCB9IGZyb20gJ0B4dGVybS94dGVybSc7XG5pbXBvcnQgeyBBdHRhY2hBZGRvbiB9IGZyb20gJ0B4dGVybS9hZGRvbi1hdHRhY2gnO1xuaW1wb3J0IHsgRml0QWRkb24gfSBmcm9tICdAeHRlcm0vYWRkb24tZml0JztcblxuaW1wb3J0ICdAeHRlcm0veHRlcm0vY3NzL3h0ZXJtLmNzcyc7XG5cbmNvbnN0IHRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKCk7XG5jb25zdCBmaXRBZGRvbiA9IG5ldyBGaXRBZGRvbigpO1xudGVybWluYWwubG9hZEFkZG9uKGZpdEFkZG9uKTtcbnRlcm1pbmFsLm9wZW4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlcm1pbmFsJykpO1xuZml0QWRkb24uZml0KCk7XG5cbmNvbnN0IHdlYlNvY2tldCA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy93ZWItc29ja2V0L3NzaCcpO1xuXG5jb25zdCBzZW5kU2l6ZSA9ICgpID0+IHtcbiAgY29uc3Qgd2luZG93U2l6ZSA9IHtoaWdoOiB0ZXJtaW5hbC5yb3dzLCB3aWR0aDogdGVybWluYWwuY29sc307XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkod2luZG93U2l6ZSldLCB7dHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJ30pO1xuICB3ZWJTb2NrZXQuc2VuZChibG9iKTtcbn1cblxud2ViU29ja2V0Lm9ub3BlbiA9IHNlbmRTaXplO1xuXG5jb25zdCByZXNpemVTY3JlZW4gPSAoKSA9PiB7XG4gIGZpdEFkZG9uLmZpdCgpO1xuICBzZW5kU2l6ZSgpO1xufVxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZVNjcmVlbiwgZmFsc2UpO1xuXG5jb25zdCBhdHRhY2hBZGRvbiA9IG5ldyBBdHRhY2hBZGRvbih3ZWJTb2NrZXQpO1xudGVybWluYWwubG9hZEFkZG9uKGF0dGFjaEFkZG9uKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _xterm_xterm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @xterm/xterm */ \"./node_modules/@xterm/xterm/lib/xterm.js\");\n/* harmony import */ var _xterm_xterm__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_xterm_xterm__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @xterm/addon-attach */ \"./node_modules/@xterm/addon-attach/lib/addon-attach.js\");\n/* harmony import */ var _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @xterm/addon-fit */ \"./node_modules/@xterm/addon-fit/lib/addon-fit.js\");\n/* harmony import */ var _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _xterm_xterm_css_xterm_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @xterm/xterm/css/xterm.css */ \"./node_modules/@xterm/xterm/css/xterm.css\");\n\n\n\n\n\n\nconst terminal = new _xterm_xterm__WEBPACK_IMPORTED_MODULE_0__.Terminal();\nconst fitAddon = new _xterm_addon_fit__WEBPACK_IMPORTED_MODULE_2__.FitAddon();\nterminal.loadAddon(fitAddon);\nterminal.open(document.getElementById('terminal'));\nfitAddon.fit();\n\nconst webSocketProtocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://';\nconst webSocket = new WebSocket(webSocketProtocol + window.location.host + '/web-socket/ssh');\n\nconst sendSize = () => {\n const windowSize = {high: terminal.rows, width: terminal.cols};\n const blob = new Blob([JSON.stringify(windowSize)], {type : 'application/json'});\n webSocket.send(blob);\n}\n\nwebSocket.onopen = sendSize;\n\nconst resizeScreen = () => {\n fitAddon.fit();\n sendSize();\n}\nwindow.addEventListener('resize', resizeScreen, false);\n\nconst attachAddon = new _xterm_addon_attach__WEBPACK_IMPORTED_MODULE_1__.AttachAddon(webSocket);\nterminal.loadAddon(attachAddon);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF3QztBQUNVO0FBQ047O0FBRVI7O0FBRXBDLHFCQUFxQixrREFBUTtBQUM3QixxQkFBcUIsc0RBQVE7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0I7QUFDdEIsdURBQXVELDBCQUEwQjtBQUNqRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLDREQUFXO0FBQ25DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ28tc3NoLXdlYi1jbGllbnQvLi9pbmRleC5qcz80MWY1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlcm1pbmFsIH0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcbmltcG9ydCB7IEF0dGFjaEFkZG9uIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLWF0dGFjaCc7XG5pbXBvcnQgeyBGaXRBZGRvbiB9IGZyb20gJ0B4dGVybS9hZGRvbi1maXQnO1xuXG5pbXBvcnQgJ0B4dGVybS94dGVybS9jc3MveHRlcm0uY3NzJztcblxuY29uc3QgdGVybWluYWwgPSBuZXcgVGVybWluYWwoKTtcbmNvbnN0IGZpdEFkZG9uID0gbmV3IEZpdEFkZG9uKCk7XG50ZXJtaW5hbC5sb2FkQWRkb24oZml0QWRkb24pO1xudGVybWluYWwub3Blbihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVybWluYWwnKSk7XG5maXRBZGRvbi5maXQoKTtcblxuY29uc3Qgd2ViU29ja2V0UHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonID8gJ3dzczovLycgOiAnd3M6Ly8nO1xuY29uc3Qgd2ViU29ja2V0ID0gbmV3IFdlYlNvY2tldCh3ZWJTb2NrZXRQcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy93ZWItc29ja2V0L3NzaCcpO1xuXG5jb25zdCBzZW5kU2l6ZSA9ICgpID0+IHtcbiAgY29uc3Qgd2luZG93U2l6ZSA9IHtoaWdoOiB0ZXJtaW5hbC5yb3dzLCB3aWR0aDogdGVybWluYWwuY29sc307XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkod2luZG93U2l6ZSldLCB7dHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJ30pO1xuICB3ZWJTb2NrZXQuc2VuZChibG9iKTtcbn1cblxud2ViU29ja2V0Lm9ub3BlbiA9IHNlbmRTaXplO1xuXG5jb25zdCByZXNpemVTY3JlZW4gPSAoKSA9PiB7XG4gIGZpdEFkZG9uLmZpdCgpO1xuICBzZW5kU2l6ZSgpO1xufVxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZVNjcmVlbiwgZmFsc2UpO1xuXG5jb25zdCBhdHRhY2hBZGRvbiA9IG5ldyBBdHRhY2hBZGRvbih3ZWJTb2NrZXQpO1xudGVybWluYWwubG9hZEFkZG9uKGF0dGFjaEFkZG9uKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./index.js\n"); /***/ }), diff --git a/front/index.js b/front/index.js index 4c29f0a..1718d19 100644 --- a/front/index.js +++ b/front/index.js @@ -10,7 +10,8 @@ terminal.loadAddon(fitAddon); terminal.open(document.getElementById('terminal')); fitAddon.fit(); -const webSocket = new WebSocket('ws://' + window.location.host + '/web-socket/ssh'); +const webSocketProtocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://'; +const webSocket = new WebSocket(webSocketProtocol + window.location.host + '/web-socket/ssh'); const sendSize = () => { const windowSize = {high: terminal.rows, width: terminal.cols}; From 1ef21cefb4f2b9002f7af2008d0e819ee16abb94 Mon Sep 17 00:00:00 2001 From: Nedya Prakasa Date: Mon, 22 Dec 2025 15:35:45 +0700 Subject: [PATCH 6/6] fix: run frontend dev missing install deps --- scripts/frontend-dev.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/frontend-dev.sh b/scripts/frontend-dev.sh index 3ab06be..04d1b19 100755 --- a/scripts/frontend-dev.sh +++ b/scripts/frontend-dev.sh @@ -2,4 +2,5 @@ # dev frontend live reload cd front +npm install npm run dev \ No newline at end of file