suneditor.min.js 2.2 MB

12
  1. !function(e){var t={};function n(i){if(t[i])return t[i].exports;var l=t[i]={i:i,l:!1,exports:{}};return e[i].call(l.exports,l,l.exports,n),l.l=!0,l.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)n.d(i,l,function(t){return e[t]}.bind(null,l));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="XJR1")}({"1kvd":function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"dialog",add:function(e){const t=e.context;t.dialog={kind:"",updateModal:!1,_closeSignal:!1};let n=e.util.createElement("DIV");n.className="se-dialog sun-editor-common";let i=e.util.createElement("DIV");i.className="se-dialog-back",i.style.display="none";let l=e.util.createElement("DIV");l.className="se-dialog-inner",l.style.display="none",n.appendChild(i),n.appendChild(l),t.dialog.modalArea=n,t.dialog.back=i,t.dialog.modal=l,t.dialog.modal.addEventListener("mousedown",this._onMouseDown_dialog.bind(e)),t.dialog.modal.addEventListener("click",this._onClick_dialog.bind(e)),t.element.relative.appendChild(n),n=null,i=null,l=null},_onMouseDown_dialog:function(e){/se-dialog-inner/.test(e.target.className)?this.context.dialog._closeSignal=!0:this.context.dialog._closeSignal=!1},_onClick_dialog:function(e){(/close/.test(e.target.getAttribute("data-command"))||this.context.dialog._closeSignal)&&this.plugins.dialog.close.call(this)},open:function(e,t){if(this.modalForm)return!1;this.plugins.dialog._bindClose&&(this._d.removeEventListener("keydown",this.plugins.dialog._bindClose),this.plugins.dialog._bindClose=null),this.plugins.dialog._bindClose=function(e){/27/.test(e.keyCode)&&this.plugins.dialog.close.call(this)}.bind(this),this._d.addEventListener("keydown",this.plugins.dialog._bindClose),this.context.dialog.updateModal=t,"full"===this.options.popupDisplay?this.context.dialog.modalArea.style.position="fixed":this.context.dialog.modalArea.style.position="absolute",this.context.dialog.kind=e,this.modalForm=this.context[e].modal;const n=this.context[e].focusElement;"function"==typeof this.plugins[e].on&&this.plugins[e].on.call(this,t),this.context.dialog.modalArea.style.display="block",this.context.dialog.back.style.display="block",this.context.dialog.modal.style.display="block",this.modalForm.style.display="block",n&&n.focus()},_bindClose:null,close:function(){this.plugins.dialog._bindClose&&(this._d.removeEventListener("keydown",this.plugins.dialog._bindClose),this.plugins.dialog._bindClose=null);const e=this.context.dialog.kind;this.modalForm.style.display="none",this.context.dialog.back.style.display="none",this.context.dialog.modalArea.style.display="none",this.context.dialog.updateModal=!1,"function"==typeof this.plugins[e].init&&this.plugins[e].init.call(this),this.context.dialog.kind="",this.modalForm=null,this.focus()}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"dialog",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},"3FqI":function(e,t,n){},JhlZ:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"fileBrowser",_xmlHttp:null,_loading:null,add:function(e){const t=e.context;t.fileBrowser={_closeSignal:!1,area:null,header:null,tagArea:null,body:null,list:null,tagElements:null,items:[],selectedTags:[],selectorHandler:null,contextPlugin:"",columnSize:4};let n=e.util.createElement("DIV");n.className="se-file-browser sun-editor-common";let i=e.util.createElement("DIV");i.className="se-file-browser-back";let l=e.util.createElement("DIV");l.className="se-file-browser-inner",l.innerHTML=this.set_browser(e),n.appendChild(i),n.appendChild(l),this._loading=n.querySelector(".se-loading-box"),t.fileBrowser.area=n,t.fileBrowser.header=l.querySelector(".se-file-browser-header"),t.fileBrowser.titleArea=l.querySelector(".se-file-browser-title"),t.fileBrowser.tagArea=l.querySelector(".se-file-browser-tags"),t.fileBrowser.body=l.querySelector(".se-file-browser-body"),t.fileBrowser.list=l.querySelector(".se-file-browser-list"),t.fileBrowser.tagArea.addEventListener("click",this.onClickTag.bind(e)),t.fileBrowser.list.addEventListener("click",this.onClickFile.bind(e)),l.addEventListener("mousedown",this._onMouseDown_browser.bind(e)),l.addEventListener("click",this._onClick_browser.bind(e)),t.element.relative.appendChild(n),n=null,i=null,l=null},set_browser:function(e){return'<div class="se-file-browser-content"><div class="se-file-browser-header"><button type="button" data-command="close" class="se-btn se-file-browser-close" class="close" aria-label="Close" title="'+e.lang.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-file-browser-title"></span><div class="se-file-browser-tags"></div></div><div class="se-file-browser-body"><div class="se-loading-box sun-editor-common"><div class="se-loading-effect"></div></div><div class="se-file-browser-list"></div></div></div>'},_onMouseDown_browser:function(e){/se-file-browser-inner/.test(e.target.className)?this.context.fileBrowser._closeSignal=!0:this.context.fileBrowser._closeSignal=!1},_onClick_browser:function(e){e.stopPropagation(),(/close/.test(e.target.getAttribute("data-command"))||this.context.fileBrowser._closeSignal)&&this.plugins.fileBrowser.close.call(this)},open:function(e,t){this.plugins.fileBrowser._bindClose&&(this._d.removeEventListener("keydown",this.plugins.fileBrowser._bindClose),this.plugins.fileBrowser._bindClose=null),this.plugins.fileBrowser._bindClose=function(e){/27/.test(e.keyCode)&&this.plugins.fileBrowser.close.call(this)}.bind(this),this._d.addEventListener("keydown",this.plugins.fileBrowser._bindClose);const n=this.context.fileBrowser;n.contextPlugin=e,n.selectorHandler=t;const i=this.context[e],l=i.listClass;this.util.hasClass(n.list,l)||(n.list.className="se-file-browser-list "+l),"full"===this.options.popupDisplay?n.area.style.position="fixed":n.area.style.position="absolute",n.titleArea.textContent=i.title,n.area.style.display="block",this.plugins.fileBrowser._drawFileList.call(this,this.context[e].url,this.context[e].header)},_bindClose:null,close:function(){const e=this.plugins.fileBrowser;e._xmlHttp&&e._xmlHttp.abort(),e._bindClose&&(this._d.removeEventListener("keydown",e._bindClose),e._bindClose=null);const t=this.context.fileBrowser;t.area.style.display="none",t.selectorHandler=null,t.selectedTags=[],t.items=[],t.list.innerHTML=t.tagArea.innerHTML=t.titleArea.textContent="","function"==typeof this.plugins[t.contextPlugin].init&&this.plugins[t.contextPlugin].init.call(this),t.contextPlugin=""},showBrowserLoading:function(){this._loading.style.display="block"},closeBrowserLoading:function(){this._loading.style.display="none"},_drawFileList:function(e,t){const n=this.plugins.fileBrowser,i=n._xmlHttp=this.util.getXMLHttpRequest();if(i.onreadystatechange=n._callBackGet.bind(this,i),i.open("get",e,!0),null!==t&&"object"==typeof t&&this._w.Object.keys(t).length>0)for(let e in t)i.setRequestHeader(e,t[e]);i.send(null),this.plugins.fileBrowser.showBrowserLoading()},_callBackGet:function(e){if(4===e.readyState)if(this.plugins.fileBrowser._xmlHttp=null,200===e.status)try{this.plugins.fileBrowser._drawListItem.call(this,JSON.parse(e.responseText).result,!0)}catch(e){throw Error('[SUNEDITOR.fileBrowser.drawList.fail] cause : "'+e.message+'"')}finally{this.plugins.fileBrowser.closeBrowserLoading(),this.context.fileBrowser.body.style.maxHeight=this._w.innerHeight-this.context.fileBrowser.header.offsetHeight-50+"px"}else if(this.plugins.fileBrowser.closeBrowserLoading(),0!==e.status){const t=e.responseText?JSON.parse(e.responseText):e,n="[SUNEDITOR.fileBrowser.get.serverException] status: "+e.status+", response: "+(t.errorMessage||e.responseText);throw Error(n)}},_drawListItem:function(e,t){const n=this.context.fileBrowser,i=this.context[n.contextPlugin],l=[],o=e.length,s=i.columnSize||n.columnSize,a=s<=1?1:Math.round(o/s)||1,r=i.itemTemplateHandler;let c="",d='<div class="se-file-item-column">',u=1;for(let n,i,h=0;h<o;h++)if(n=e[h],i=n.tag?"string"==typeof n.tag?n.tag.split(","):n.tag:[],i=n.tag=i.map((function(e){return e.trim()})),d+=r(n),(h+1)%a==0&&u<s&&h+1<o&&(u++,d+='</div><div class="se-file-item-column">'),t&&i.length>0)for(let e,t=0,n=i.length;t<n;t++)e=i[t],e&&-1===l.indexOf(e)&&(l.push(e),c+='<a title="'+e+'">'+e+"</a>");d+="</div>",n.list.innerHTML=d,t&&(n.items=e,n.tagArea.innerHTML=c,n.tagElements=n.tagArea.querySelectorAll("A"))},onClickTag:function(e){const t=e.target;if(!this.util.isAnchor(t))return;const n=t.textContent,i=this.plugins.fileBrowser,l=this.context.fileBrowser,o=l.tagArea.querySelector('a[title="'+n+'"]'),s=l.selectedTags,a=s.indexOf(n);a>-1?(s.splice(a,1),this.util.removeClass(o,"on")):(s.push(n),this.util.addClass(o,"on")),i._drawListItem.call(this,0===s.length?l.items:l.items.filter((function(e){return e.tag.some((function(e){return s.indexOf(e)>-1}))})),!1)},onClickFile:function(e){e.preventDefault(),e.stopPropagation();const t=this.context.fileBrowser,n=t.list;let i=e.target,l=null;if(i===n)return;for(;n!==i.parentNode&&(l=i.getAttribute("data-command"),!l);)i=i.parentNode;if(!l)return;const o=t.selectorHandler||this.context[t.contextPlugin].selectorHandler;this.plugins.fileBrowser.close.call(this),o(i)}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"fileBrowser",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},P6u4:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={code:"en",toolbar:{default:"Default",save:"Save",font:"Font",formats:"Formats",fontSize:"Size",bold:"Bold",underline:"Underline",italic:"Italic",strike:"Strike",subscript:"Subscript",superscript:"Superscript",removeFormat:"Remove Format",fontColor:"Font Color",hiliteColor:"Highlight Color",indent:"Indent",outdent:"Outdent",align:"Align",alignLeft:"Align left",alignRight:"Align right",alignCenter:"Align center",alignJustify:"Align justify",list:"List",orderList:"Ordered list",unorderList:"Unordered list",horizontalRule:"Horizontal line",hr_solid:"Solid",hr_dotted:"Dotted",hr_dashed:"Dashed",table:"Table",link:"Link",math:"Math",image:"Image",video:"Video",audio:"Audio",fullScreen:"Full screen",showBlocks:"Show blocks",codeView:"Code view",undo:"Undo",redo:"Redo",preview:"Preview",print:"print",tag_p:"Paragraph",tag_div:"Normal (DIV)",tag_h:"Header",tag_blockquote:"Quote",tag_pre:"Code",template:"Template",lineHeight:"Line height",paragraphStyle:"Paragraph style",textStyle:"Text style",imageGallery:"Image gallery",mention:"Mention"},dialogBox:{linkBox:{title:"Insert Link",url:"URL to link",text:"Text to display",newWindowCheck:"Open in new window",downloadLinkCheck:"Download link",bookmark:"Bookmark"},mathBox:{title:"Math",inputLabel:"Mathematical Notation",fontSizeLabel:"Font Size",previewLabel:"Preview"},imageBox:{title:"Insert image",file:"Select from files",url:"Image URL",altText:"Alternative text"},videoBox:{title:"Insert Video",file:"Select from files",url:"Media embed URL, YouTube/Vimeo"},audioBox:{title:"Insert Audio",file:"Select from files",url:"Audio URL"},browser:{tags:"Tags",search:"Search"},caption:"Insert description",close:"Close",submitButton:"Submit",revertButton:"Revert",proportion:"Constrain proportions",basic:"Basic",left:"Left",right:"Right",center:"Center",width:"Width",height:"Height",size:"Size",ratio:"Ratio"},controller:{edit:"Edit",unlink:"Unlink",remove:"Remove",insertRowAbove:"Insert row above",insertRowBelow:"Insert row below",deleteRow:"Delete row",insertColumnBefore:"Insert column before",insertColumnAfter:"Insert column after",deleteColumn:"Delete column",fixedColumnWidth:"Fixed column width",resize100:"Resize 100%",resize75:"Resize 75%",resize50:"Resize 50%",resize25:"Resize 25%",autoSize:"Auto size",mirrorHorizontal:"Mirror, Horizontal",mirrorVertical:"Mirror, Vertical",rotateLeft:"Rotate left",rotateRight:"Rotate right",maxSize:"Max size",minSize:"Min size",tableHeader:"Table header",mergeCells:"Merge cells",splitCells:"Split Cells",HorizontalSplit:"Horizontal split",VerticalSplit:"Vertical split"},menu:{spaced:"Spaced",bordered:"Bordered",neon:"Neon",translucent:"Translucent",shadow:"Shadow",code:"Code"}};return void 0===t&&(e.SUNEDITOR_LANG||Object.defineProperty(e,"SUNEDITOR_LANG",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_LANG,"en",{enumerable:!0,writable:!0,configurable:!0,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_LANG a window with a document");return l(e)}:l(i)},WUQj:function(e,t,n){},XJR1:function(e,t,n){"use strict";n.r(t);n("3FqI"),n("WUQj");var i={name:"colorPicker",add:function(e){const t=e.context;t.colorPicker={colorListHTML:"",_colorInput:"",_defaultColor:"#000",_styleProperty:"color",_currentColor:"",_colorList:[]},t.colorPicker.colorListHTML=this.createColorList(e,this._makeColorList)},createColorList:function(e,t){const n=e.options,i=e.lang,l=n.colorList&&0!==n.colorList.length?n.colorList:["#ff0000","#ff5e00","#ffe400","#abf200","#00d8ff","#0055ff","#6600ff","#ff00dd","#000000","#ffd8d8","#fae0d4","#faf4c0","#e4f7ba","#d4f4fa","#d9e5ff","#e8d9ff","#ffd9fa","#f1f1f1","#ffa7a7","#ffc19e","#faed7d","#cef279","#b2ebf4","#b2ccff","#d1b2ff","#ffb2f5","#bdbdbd","#f15f5f","#f29661","#e5d85c","#bce55c","#5cd1e5","#6699ff","#a366ff","#f261df","#8c8c8c","#980000","#993800","#998a00","#6b9900","#008299","#003399","#3d0099","#990085","#353535","#670000","#662500","#665c00","#476600","#005766","#002266","#290066","#660058","#222222"];let o=[],s='<div class="se-list-inner">';for(let e,n=0,i=l.length;n<i;n++)e=l[n],e&&("string"==typeof e&&(o.push(e),n<i-1)||(o.length>0&&(s+='<div class="se-selector-color">'+t(o)+"</div>",o=[]),"object"==typeof e&&(s+='<div class="se-selector-color">'+t(e)+"</div>")));return s+='<form class="se-form-group"><input type="text" maxlength="9" class="_se_color_picker_input se-color-input"/><button type="submit" class="se-btn-primary _se_color_picker_submit" title="'+i.dialogBox.submitButton+'">'+e.icons.checked+'</button><button type="button" class="se-btn _se_color_picker_remove" title="'+i.toolbar.removeFormat+'">'+e.icons.erase+"</button></form></div>",s},_makeColorList:function(e){let t="";t+='<ul class="se-color-pallet">';for(let n,i=0,l=e.length;i<l;i++)n=e[i],"string"==typeof n&&(t+='<li><button type="button" data-value="'+n+'" title="'+n+'" style="background-color:'+n+';"></button></li>');return t+="</ul>",t},init:function(e,t){const n=this.plugins.colorPicker;let i=t||(n.getColorInNode.call(this,e)||this.context.colorPicker._defaultColor);i=n.isHexColor(i)?i:n.rgb2hex(i)||i;const l=this.context.colorPicker._colorList;if(l)for(let e=0,t=l.length;e<t;e++)i.toLowerCase()===l[e].getAttribute("data-value").toLowerCase()?this.util.addClass(l[e],"active"):this.util.removeClass(l[e],"active");n.setInputText.call(this,n.colorName2hex.call(this,i))},setCurrentColor:function(e){this.context.colorPicker._currentColor=e,this.context.colorPicker._colorInput.style.borderColor=e},setInputText:function(e){e=/^#/.test(e)?e:"#"+e,this.context.colorPicker._colorInput.value=e,this.plugins.colorPicker.setCurrentColor.call(this,e)},getColorInNode:function(e){let t="";const n=this.context.colorPicker._styleProperty;for(;e&&!this.util.isWysiwygDiv(e)&&0===t.length;)1===e.nodeType&&e.style[n]&&(t=e.style[n]),e=e.parentNode;return t},isHexColor:function(e){return/^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(e)},rgb2hex:function(e){const t=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&4===t.length?"#"+("0"+parseInt(t[1],10).toString(16)).slice(-2)+("0"+parseInt(t[2],10).toString(16)).slice(-2)+("0"+parseInt(t[3],10).toString(16)).slice(-2):""},colorName2hex:function(e){if(/^#/.test(e))return e;var t=this.util.createElement("div");t.style.display="none",t.style.color=e;var n=this._w.getComputedStyle(this._d.body.appendChild(t)).color.match(/\d+/g).map((function(e){return parseInt(e,10)}));return this.util.removeItem(t),n.length>=3&&"#"+((1<<24)+(n[0]<<16)+(n[1]<<8)+n[2]).toString(16).substr(1)}},l={name:"fontColor",display:"submenu",add:function(e,t){e.addModule([i]);const n=e.context;n.fontColor={previewEl:null,colorInput:null,colorList:null};let l=this.setSubmenu(e);n.fontColor.colorInput=l.querySelector("._se_color_picker_input"),n.fontColor.colorInput.addEventListener("keyup",this.onChangeInput.bind(e)),l.querySelector("._se_color_picker_submit").addEventListener("click",this.submit.bind(e)),l.querySelector("._se_color_picker_remove").addEventListener("click",this.remove.bind(e)),l.addEventListener("click",this.pickup.bind(e)),n.fontColor.colorList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null},setSubmenu:function(e){const t=e.context.colorPicker.colorListHTML,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML=t,n},on:function(){const e=this.context.colorPicker,t=this.context.fontColor;e._colorInput=t.colorInput;const n=this.wwComputedStyle.color;e._defaultColor=n?this.plugins.colorPicker.isHexColor(n)?n:this.plugins.colorPicker.rgb2hex(n):"#333333",e._styleProperty="color",e._colorList=t.colorList,this.plugins.colorPicker.init.call(this,this.getSelectionNode(),null)},onChangeInput:function(e){this.plugins.colorPicker.setCurrentColor.call(this,e.target.value)},submit:function(){this.plugins.fontColor.applyColor.call(this,this.context.colorPicker._currentColor)},pickup:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.fontColor.applyColor.call(this,e.target.getAttribute("data-value"))},remove:function(){this.nodeChange(null,["color"],["span"],!0),this.submenuOff()},applyColor:function(e){if(!e)return;const t=this.util.createElement("SPAN");t.style.color=e,this.nodeChange(t,["color"],null,null),this.submenuOff()}},o={name:"hiliteColor",display:"submenu",add:function(e,t){e.addModule([i]);const n=e.context;n.hiliteColor={previewEl:null,colorInput:null,colorList:null};let l=this.setSubmenu(e);n.hiliteColor.colorInput=l.querySelector("._se_color_picker_input"),n.hiliteColor.colorInput.addEventListener("keyup",this.onChangeInput.bind(e)),l.querySelector("._se_color_picker_submit").addEventListener("click",this.submit.bind(e)),l.querySelector("._se_color_picker_remove").addEventListener("click",this.remove.bind(e)),l.addEventListener("click",this.pickup.bind(e)),n.hiliteColor.colorList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null},setSubmenu:function(e){const t=e.context.colorPicker.colorListHTML,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML=t,n},on:function(){const e=this.context.colorPicker,t=this.context.hiliteColor;e._colorInput=t.colorInput;const n=this.wwComputedStyle.backgroundColor;e._defaultColor=n?this.plugins.colorPicker.isHexColor(n)?n:this.plugins.colorPicker.rgb2hex(n):"#ffffff",e._styleProperty="backgroundColor",e._colorList=t.colorList,this.plugins.colorPicker.init.call(this,this.getSelectionNode(),null)},onChangeInput:function(e){this.plugins.colorPicker.setCurrentColor.call(this,e.target.value)},submit:function(){this.plugins.hiliteColor.applyColor.call(this,this.context.colorPicker._currentColor)},pickup:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.hiliteColor.applyColor.call(this,e.target.getAttribute("data-value"))},remove:function(){this.nodeChange(null,["background-color"],["span"],!0),this.submenuOff()},applyColor:function(e){if(!e)return;const t=this.util.createElement("SPAN");t.style.backgroundColor=e,this.nodeChange(t,["background-color"],null,null),this.submenuOff()}},s={name:"template",display:"submenu",add:function(e,t){e.context.template={};let n=this.setSubmenu(e);n.querySelector("ul").addEventListener("click",this.pickup.bind(e)),e.initMenuTarget(this.name,t,n),n=null},setSubmenu:function(e){const t=e.options.templates;if(!t||0===t.length)throw Error('[SUNEDITOR.plugins.template.fail] To use the "template" plugin, please define the "templates" option.');const n=e.util.createElement("DIV");n.className="se-list-layer";let i='<div class="se-submenu se-list-inner"><ul class="se-list-basic">';for(let e,n=0,l=t.length;n<l;n++)e=t[n],i+='<li><button type="button" class="se-btn-list" data-value="'+n+'" title="'+e.name+'">'+e.name+"</button></li>";return i+="</ul></div>",n.innerHTML=i,n},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=this.options.templates[e.target.getAttribute("data-value")];if(!t.html)throw this.submenuOff(),Error('[SUNEDITOR.template.fail] cause : "templates[i].html not found"');this.setContents(t.html),this.submenuOff()}},a=n("1kvd"),r=n.n(a),c={name:"selectMenu",add:function(e){e.context.selectMenu={caller:{},callerContext:null}},setForm:function(){return'<div class="se-select-list"></div>'},createList:function(e,t,n){e.form.innerHTML="<ul>"+n+"</ul>",e.items=t,e.menus=e.form.querySelectorAll("li")},initEvent:function(e,t){const n=t.querySelector(".se-select-list"),i=this.context.selectMenu.caller[e]={form:n,items:[],menus:[],index:-1,item:null,clickMethod:null,callerName:e};n.addEventListener("mousedown",this.plugins.selectMenu.onMousedown_list),n.addEventListener("mousemove",this.plugins.selectMenu.onMouseMove_list.bind(this,i)),n.addEventListener("click",this.plugins.selectMenu.onClick_list.bind(this,i))},onMousedown_list:function(e){e.preventDefault(),e.stopPropagation()},onMouseMove_list:function(e,t){this.util.addClass(e.form,"__se_select-menu-mouse-move");const n=t.target.getAttribute("data-index");n&&(e.index=1*n)},onClick_list:function(e,t){const n=t.target.getAttribute("data-index");n&&e.clickMethod.call(this,e.items[n])},moveItem:function(e,t){this.util.removeClass(e.form,"__se_select-menu-mouse-move"),t=e.index+t;const n=e.menus,i=n.length,l=e.index=t>=i?0:t<0?i-1:t;for(let e=0;e<i;e++)e===l?this.util.addClass(n[e],"active"):this.util.removeClass(n[e],"active");e.item=e.items[l]},getItem:function(e,t){return t=!t||t<0?e.index:t,e.items[t]},on:function(e,t){const n=this.context.selectMenu.caller[e];this.context.selectMenu.callerContext=n,n.clickMethod=t,n.callerName=e},open:function(e,t){const n=e.form;n.style.visibility="hidden",n.style.display="block",t(n),n.style.visibility=""},close:function(e){e.form.style.display="none",e.items=[],e.menus=[],e.index=-1,e.item=null},init:function(e){e&&(e.items=[],e.menus=[],e.index=-1,e.item=null,e.callerName="",this.context.selectMenu.callerContext=null)}},d={name:"anchor",add:function(e){e.addModule([c]),e.context.anchor={caller:{},forms:this.setDialogForm(e),host:(e._w.location.origin+e._w.location.pathname).replace(/\/$/,""),callerContext:null}},setDialogForm:function(e){const t=e.lang,n=e.options.linkRel,i=(e.options.linkRelDefault.default||"").split(" "),l=e.icons,o=e.util.createElement("DIV");let s='<div class="se-dialog-body"><div class="se-dialog-form"><label>'+t.dialogBox.linkBox.url+'</label><div class="se-dialog-form-files"><input class="se-input-form se-input-url" type="text" placeholder="'+(e.options.protocol||"")+'" /><button type="button" class="se-btn se-dialog-files-edge-button _se_bookmark_button" title="'+t.dialogBox.linkBox.bookmark+'">'+l.bookmark+"</button>"+e.plugins.selectMenu.setForm()+'</div><div class="se-anchor-preview-form"><span class="se-svg se-anchor-preview-icon _se_anchor_bookmark_icon">'+l.bookmark+'</span><span class="se-svg se-anchor-preview-icon _se_anchor_download_icon">'+l.download+'</span><pre class="se-link-preview"></pre></div></div><div class="se-dialog-form"><label>'+t.dialogBox.linkBox.text+'</label><input class="se-input-form _se_anchor_text" type="text" /></div><div class="se-dialog-form-footer"><label><input type="checkbox" class="se-dialog-btn-check _se_anchor_check" />&nbsp;'+t.dialogBox.linkBox.newWindowCheck+'</label><label><input type="checkbox" class="se-dialog-btn-check _se_anchor_download" />&nbsp;'+t.dialogBox.linkBox.downloadLinkCheck+"</label>";if(n.length>0){s+='<div class="se-anchor-rel"><button type="button" class="se-btn se-btn-select se-anchor-rel-btn">&lt;rel&gt;</button><div class="se-anchor-rel-wrapper"><pre class="se-link-preview se-anchor-rel-preview"></pre></div><div class="se-list-layer"><div class="se-list-inner"><ul class="se-list-basic se-list-checked">';for(let e,t=0,o=n.length;t<o;t++)e=n[t],s+='<li><button type="button" class="se-btn-list'+(i.indexOf(e)>-1?" se-checked":"")+'" data-command="'+e+'" title="'+e+'"><span class="se-svg">'+l.checked+"</span>"+e+"</button></li>";s+="</ul></div></div></div>"}return s+="</div></div>",o.innerHTML=s,o},initEvent:function(e,t){const n=this.plugins.anchor,i=this.context.anchor.caller[e]={modal:t,urlInput:null,linkDefaultRel:this.options.linkRelDefault,defaultRel:this.options.linkRelDefault.default||"",currentRel:[],linkAnchor:null,linkValue:"",_change:!1,callerName:e};"string"==typeof i.linkDefaultRel.default&&(i.linkDefaultRel.default=i.linkDefaultRel.default.trim()),"string"==typeof i.linkDefaultRel.check_new_window&&(i.linkDefaultRel.check_new_window=i.linkDefaultRel.check_new_window.trim()),"string"==typeof i.linkDefaultRel.check_bookmark&&(i.linkDefaultRel.check_bookmark=i.linkDefaultRel.check_bookmark.trim()),i.urlInput=t.querySelector(".se-input-url"),i.anchorText=t.querySelector("._se_anchor_text"),i.newWindowCheck=t.querySelector("._se_anchor_check"),i.downloadCheck=t.querySelector("._se_anchor_download"),i.download=t.querySelector("._se_anchor_download_icon"),i.preview=t.querySelector(".se-link-preview"),i.bookmark=t.querySelector("._se_anchor_bookmark_icon"),i.bookmarkButton=t.querySelector("._se_bookmark_button"),this.plugins.selectMenu.initEvent.call(this,e,t);const l=this.context.selectMenu.caller[e];this.options.linkRel.length>0&&(i.relButton=t.querySelector(".se-anchor-rel-btn"),i.relList=t.querySelector(".se-list-layer"),i.relPreview=t.querySelector(".se-anchor-rel-preview"),i.relButton.addEventListener("click",n.onClick_relButton.bind(this,i)),i.relList.addEventListener("click",n.onClick_relList.bind(this,i))),i.newWindowCheck.addEventListener("change",n.onChange_newWindowCheck.bind(this,i)),i.downloadCheck.addEventListener("change",n.onChange_downloadCheck.bind(this,i)),i.anchorText.addEventListener("input",n.onChangeAnchorText.bind(this,i)),i.urlInput.addEventListener("input",n.onChangeUrlInput.bind(this,i)),i.urlInput.addEventListener("keydown",n.onKeyDownUrlInput.bind(this,l)),i.urlInput.addEventListener("focus",n.onFocusUrlInput.bind(this,i,l)),i.urlInput.addEventListener("blur",n.onBlurUrlInput.bind(this,l)),i.bookmarkButton.addEventListener("click",n.onClick_bookmarkButton.bind(this,i))},on:function(e,t){if(t){if(e.linkAnchor){this.context.dialog.updateModal=!0;const t=e.linkAnchor.href;e.linkValue=e.preview.textContent=e.urlInput.value=/\#.+$/.test(t)?t.substr(t.lastIndexOf("#")):t,e.anchorText.value=e.linkAnchor.textContent.trim()||e.linkAnchor.getAttribute("alt"),e.newWindowCheck.checked=!!/_blank/i.test(e.linkAnchor.target),e.downloadCheck.checked=e.linkAnchor.download}}else this.plugins.anchor.init.call(this,e),e.anchorText.value=this.getSelection().toString();this.context.anchor.callerContext=e,this.plugins.anchor.setRel.call(this,e,t&&e.linkAnchor?e.linkAnchor.rel:e.defaultRel),this.plugins.anchor.setLinkPreview.call(this,e,e.linkValue),this.plugins.selectMenu.on.call(this,e.callerName,this.plugins.anchor.setHeaderBookmark)},_closeRelMenu:null,toggleRelList:function(e,t){if(t){const t=e.relButton,n=e.relList;this.util.addClass(t,"active"),n.style.visibility="hidden",n.style.display="block",this.options.rtl?n.style.left=t.offsetLeft-n.offsetWidth-1+"px":n.style.left=t.offsetLeft+t.offsetWidth+1+"px",n.style.top=t.offsetTop+t.offsetHeight/2-n.offsetHeight/2+"px",n.style.visibility="",this.plugins.anchor._closeRelMenu=function(e,t,n){n&&(e.relButton.contains(n.target)||e.relList.contains(n.target))||(this.util.removeClass(t,"active"),e.relList.style.display="none",this.modalForm.removeEventListener("click",this.plugins.anchor._closeRelMenu),this.plugins.anchor._closeRelMenu=null)}.bind(this,e,t),this.modalForm.addEventListener("click",this.plugins.anchor._closeRelMenu)}else this.plugins.anchor._closeRelMenu&&this.plugins.anchor._closeRelMenu()},onClick_relButton:function(e,t){this.plugins.anchor.toggleRelList.call(this,e,!this.util.hasClass(t.target,"active"))},onClick_relList:function(e,t){const n=t.target,i=n.getAttribute("data-command");if(!i)return;const l=e.currentRel,o=this.util.toggleClass(n,"se-checked"),s=l.indexOf(i);o?-1===s&&l.push(i):s>-1&&l.splice(s,1),e.relPreview.title=e.relPreview.textContent=l.join(" ")},setRel:function(e,t){const n=e.relList,i=e.currentRel=t?t.split(" "):[];if(!n)return;const l=n.querySelectorAll("button");for(let e,t=0,n=l.length;t<n;t++)e=l[t].getAttribute("data-command"),i.indexOf(e)>-1?this.util.addClass(l[t],"se-checked"):this.util.removeClass(l[t],"se-checked");e.relPreview.title=e.relPreview.textContent=i.join(" ")},createHeaderList:function(e,t,n){const i=this.util.getListChildren(this.context.element.wysiwyg,(function(e){return/h[1-6]/i.test(e.nodeName)}));if(0===i.length)return;const l=new this._w.RegExp("^"+n.replace(/^#/,""),"i"),o=[];let s="";for(let e,t=0,n=i.length;t<n;t++)e=i[t],l.test(e.textContent)&&(o.push(e),s+='<li class="se-select-item" data-index="'+t+'">'+e.textContent+"</li>");0===o.length?this.plugins.selectMenu.close.call(this,t):(this.plugins.selectMenu.createList(t,o,s),this.plugins.selectMenu.open.call(this,t,this.plugins.anchor._setMenuListPosition.bind(this,e)))},_setMenuListPosition:function(e,t){t.style.top=e.urlInput.offsetHeight+1+"px"},onKeyDownUrlInput:function(e,t){switch(t.keyCode){case 38:t.preventDefault(),t.stopPropagation(),this.plugins.selectMenu.moveItem.call(this,e,-1);break;case 40:t.preventDefault(),t.stopPropagation(),this.plugins.selectMenu.moveItem.call(this,e,1);break;case 13:e.index>-1&&(t.preventDefault(),t.stopPropagation(),this.plugins.anchor.setHeaderBookmark.call(this,this.plugins.selectMenu.getItem(e,null)))}},setHeaderBookmark:function(e){const t=this.context.anchor.callerContext,n=e.id||"h_"+this._w.Math.random().toString().replace(/.+\./,"");e.id=n,t.urlInput.value="#"+n,t.anchorText.value.trim()&&t._change||(t.anchorText.value=e.textContent),this.plugins.anchor.setLinkPreview.call(this,t,t.urlInput.value),this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext),this.context.anchor.callerContext.urlInput.focus()},onChangeAnchorText:function(e,t){e._change=!!t.target.value.trim()},onChangeUrlInput:function(e,t){const n=t.target.value.trim();this.plugins.anchor.setLinkPreview.call(this,e,n),/^#/.test(n)?this.plugins.anchor.createHeaderList.call(this,e,this.context.selectMenu.callerContext,n):this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext)},onFocusUrlInput:function(e,t){const n=e.urlInput.value;/^#/.test(n)&&this.plugins.anchor.createHeaderList.call(this,e,t,n)},onBlurUrlInput:function(e){this.plugins.selectMenu.close.call(this,e)},setLinkPreview:function(e,t){const n=e.preview,i=this.options.linkProtocol,l=/^(mailto\:|tel\:|sms\:|https*\:\/\/|#)/.test(t),o=!!i&&this._w.RegExp("^"+t.substr(0,i.length)).test(i);e.linkValue=n.textContent=t?!i||l||o?l?t:/^www\./.test(t)?"http://"+t:this.context.anchor.host+(/^\//.test(t)?"":"/")+t:i+t:"",0===t.indexOf("#")?(e.bookmark.style.display="block",this.util.addClass(e.bookmarkButton,"active")):(e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active")),-1===t.indexOf("#")&&e.downloadCheck.checked?e.download.style.display="block":e.download.style.display="none"},setCtx:function(e,t){e&&(t.linkAnchor=e,t.linkValue=e.href,t.currentRel=e.rel.split(" "))},updateAnchor:function(e,t,n,i,l){!/^\#/.test(t)&&i.downloadCheck.checked?e.setAttribute("download",n||t):e.removeAttribute("download"),i.newWindowCheck.checked?e.target="_blank":e.removeAttribute("target");const o=i.currentRel.join(" ");o?e.rel=o:e.removeAttribute("rel"),e.href=t,e.setAttribute("alt",n),l?0===e.children.length&&(e.textContent=""):e.textContent=n},createAnchor:function(e,t){if(0===e.linkValue.length)return null;const n=e.linkValue,i=e.anchorText,l=0===i.value.length?n:i.value,o=e.linkAnchor||this.util.createElement("A");return this.plugins.anchor.updateAnchor(o,n,l,e,t),e.linkValue=e.preview.textContent=e.urlInput.value=e.anchorText.value="",o},onClick_bookmarkButton:function(e){let t=e.urlInput.value;/^\#/.test(t)?(t=t.substr(1),e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active"),this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext)):(t="#"+t,e.bookmark.style.display="block",this.util.addClass(e.bookmarkButton,"active"),e.downloadCheck.checked=!1,e.download.style.display="none",this.plugins.anchor.createHeaderList.call(this,e,this.context.selectMenu.callerContext,t)),e.urlInput.value=t,this.plugins.anchor.setLinkPreview.call(this,e,t),e.urlInput.focus()},onChange_newWindowCheck:function(e,t){"string"==typeof e.linkDefaultRel.check_new_window&&(t.target.checked?this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relMerge.call(this,e,e.linkDefaultRel.check_new_window)):this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relDelete.call(this,e,e.linkDefaultRel.check_new_window)))},onChange_downloadCheck:function(e,t){t.target.checked?(e.download.style.display="block",e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active"),e.linkValue=e.preview.textContent=e.urlInput.value=e.urlInput.value.replace(/^\#+/,""),"string"==typeof e.linkDefaultRel.check_bookmark&&this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relMerge.call(this,e,e.linkDefaultRel.check_bookmark))):(e.download.style.display="none","string"==typeof e.linkDefaultRel.check_bookmark&&this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relDelete.call(this,e,e.linkDefaultRel.check_bookmark)))},_relMerge:function(e,t){const n=e.currentRel;if(!t)return n.join(" ");if(/^only\:/.test(t))return t=t.replace(/^only\:/,"").trim(),e.currentRel=t.split(" "),t;const i=t.split(" ");for(let e,t=0,l=i.length;t<l;t++)e=n.indexOf(i[t]),-1===e&&n.push(i[t]);return n.join(" ")},_relDelete:function(e,t){if(!t)return e.currentRel.join(" ");/^only\:/.test(t)&&(t=t.replace(/^only\:/,"").trim());const n=e.currentRel.join(" ").replace(this._w.RegExp(t+"\\s*"),"");return e.currentRel=n.split(" "),n},init:function(e){e.linkAnchor=null,e.linkValue=e.preview.textContent=e.urlInput.value="",e.anchorText.value="",e.newWindowCheck.checked=!1,e.downloadCheck.checked=!1,e._change=!1,this.plugins.anchor.setRel.call(this,e,e.defaultRel),e.relList&&this.plugins.anchor.toggleRelList.call(this,e,!1),this.context.anchor.callerContext=null,this.plugins.selectMenu.init.call(this,this.context.selectMenu.callerContext)}},u={name:"link",display:"dialog",add:function(e){e.addModule([r.a,d]);const t=e.context,n=t.link={focusElement:null,_linkAnchor:null,anchorCtx:null};let i=this.setDialog(e);n.modal=i;let l=this.setController_LinkButton(e);n.linkController=l,i.querySelector("form").addEventListener("submit",this.submit.bind(e)),l.addEventListener("click",this.onClick_linkController.bind(e)),t.dialog.modal.appendChild(i),t.element.relative.appendChild(l),e.plugins.anchor.initEvent.call(e,"link",i),n.focusElement=t.anchor.caller.link.urlInput,i=null,l=null},setDialog:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.icons;n.className="se-dialog-content",n.style.display="none";let l='<form><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+t.dialogBox.close+'">'+i.cancel+'</button><span class="se-modal-title">'+t.dialogBox.linkBox.title+"</span></div>"+e.context.anchor.forms.innerHTML+'<div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+t.dialogBox.submitButton+'"><span>'+t.dialogBox.submitButton+"</span></button></div></form>";return n.innerHTML=l,n},setController_LinkButton:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-link",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><span><a target="_blank" href=""></a>&nbsp;</span><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">'+n.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="unlink" tabindex="-1" class="se-btn se-tooltip">'+n.unlink+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.unlink+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},open:function(){this.plugins.dialog.open.call(this,"link","link"===this.currentControllerName)},submit:function(e){this.showLoading(),e.preventDefault(),e.stopPropagation();try{const e=this.plugins.anchor.createAnchor.call(this,this.context.anchor.caller.link,!1);if(this.context.dialog.updateModal){const e=this.context.link._linkAnchor.childNodes[0];this.setRange(e,0,e,e.textContent.length)}else{const t=this.getSelectedElements();if(t.length>1){const n=this.util.createElement(t[0].nodeName);if(n.appendChild(e),!this.insertNode(n,null,!0))return}else if(!this.insertNode(e,null,!0))return;this.setRange(e.childNodes[0],0,e.childNodes[0],e.textContent.length)}}finally{this.plugins.dialog.close.call(this),this.closeLoading(),this.history.push(!1)}return!1},active:function(e){if(e){if(this.util.isAnchor(e)&&null===e.getAttribute("data-image-link"))return this.controllerArray.indexOf(this.context.link.linkController)<0&&this.plugins.link.call_controller.call(this,e),!0}else this.controllerArray.indexOf(this.context.link.linkController)>-1&&this.controllersOff();return!1},on:function(e){this.plugins.anchor.on.call(this,this.context.anchor.caller.link,e)},call_controller:function(e){this.editLink=this.context.link._linkAnchor=this.context.anchor.caller.link.linkAnchor=e;const t=this.context.link.linkController,n=t.querySelector("a");n.href=e.href,n.title=e.textContent,n.textContent=e.textContent,this.util.addClass(e,"on"),this.setControllerPosition(t,e,"bottom",{left:0,top:0}),this.controllersOn(t,e,"link",this.util.removeClass.bind(this.util,this.context.link._linkAnchor,"on"))},onClick_linkController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")||e.target.parentNode.getAttribute("data-command");if(t){if(e.preventDefault(),/update/.test(t))this.plugins.dialog.open.call(this,"link",!0);else if(/unlink/.test(t)){const e=this.util.getChildElement(this.context.link._linkAnchor,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1),t=this.util.getChildElement(this.context.link._linkAnchor,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0);this.setRange(e,0,t,t.textContent.length),this.nodeChange(null,null,["A"],!1)}else this.util.removeItem(this.context.link._linkAnchor),this.context.anchor.caller.link.linkAnchor=null,this.focus(),this.history.push(!1);this.controllersOff()}},init:function(){this.context.link.linkController.style.display="none",this.plugins.anchor.init.call(this,this.context.anchor.caller.link)}},h=n("ZED3"),p=n.n(h),g=n("ee5k"),m=n.n(g),f=n("gjS+"),_=n.n(f),b={name:"image",display:"dialog",add:function(e){e.addModule([r.a,d,p.a,m.a,_.a]);const t=e.options,n=e.context,i=n.image={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,sizeUnit:t._imageSizeUnit,_linkElement:"",_altText:"",_align:"none",_floatClassRegExp:"__se__float\\-[a-z]+",_v_src:{_linkValue:""},svgDefaultSize:"30%",base64RenderIndex:0,_element:null,_cover:null,_container:null,inputX:null,inputY:null,_element_w:1,_element_h:1,_element_l:0,_element_t:0,_defaultSizeX:"auto",_defaultSizeY:"auto",_origin_w:"auto"===t.imageWidth?"":t.imageWidth,_origin_h:"auto"===t.imageHeight?"":t.imageHeight,_proportionChecked:!0,_resizing:t.imageResizing,_resizeDotHide:!t.imageHeightShow,_rotation:t.imageRotation,_onlyPercentage:t.imageSizeOnlyPercentage,_ratio:!1,_ratioX:1,_ratioY:1,_captionShow:!0,_captionChecked:!1,_caption:null,captionCheckEl:null};let l=this.setDialog(e);i.modal=l,i.imgInputFile=l.querySelector("._se_image_file"),i.imgUrlFile=l.querySelector("._se_image_url"),i.focusElement=i.imgInputFile||i.imgUrlFile,i.altText=l.querySelector("._se_image_alt"),i.captionCheckEl=l.querySelector("._se_image_check_caption"),i.previewSrc=l.querySelector("._se_tab_content_image .se-link-preview"),l.querySelector(".se-dialog-tabs").addEventListener("click",this.openTab.bind(e)),l.querySelector("form").addEventListener("submit",this.submit.bind(e)),i.imgInputFile&&l.querySelector(".se-file-remove").addEventListener("click",this._removeSelectedFiles.bind(i.imgInputFile,i.imgUrlFile,i.previewSrc)),i.imgUrlFile&&i.imgUrlFile.addEventListener("input",this._onLinkPreview.bind(i.previewSrc,i._v_src,t.linkProtocol)),i.imgInputFile&&i.imgUrlFile&&i.imgInputFile.addEventListener("change",this._fileInputChange.bind(i));const o=l.querySelector(".__se__gallery");o&&o.addEventListener("click",this._openGallery.bind(e)),i.proportion={},i.inputX={},i.inputY={},t.imageResizing&&(i.proportion=l.querySelector("._se_image_check_proportion"),i.inputX=l.querySelector("._se_image_size_x"),i.inputY=l.querySelector("._se_image_size_y"),i.inputX.value=t.imageWidth,i.inputY.value=t.imageHeight,i.inputX.addEventListener("keyup",this.setInputSize.bind(e,"x")),i.inputY.addEventListener("keyup",this.setInputSize.bind(e,"y")),i.inputX.addEventListener("change",this.setRatio.bind(e)),i.inputY.addEventListener("change",this.setRatio.bind(e)),i.proportion.addEventListener("change",this.setRatio.bind(e)),l.querySelector(".se-dialog-btn-revert").addEventListener("click",this.sizeRevert.bind(e))),n.dialog.modal.appendChild(l),e.plugins.anchor.initEvent.call(e,"image",l.querySelector("._se_tab_content_url")),i.anchorCtx=e.context.anchor.caller.image,l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content se-dialog-image",i.style.display="none";let l='<div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" class="close" aria-label="Close" title="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.imageBox.title+'</span></div><div class="se-dialog-tabs"><button type="button" class="_se_tab_link active" data-tab-link="image">'+n.toolbar.image+'</button><button type="button" class="_se_tab_link" data-tab-link="url">'+n.toolbar.link+'</button></div><form method="post" enctype="multipart/form-data"><div class="_se_tab_content _se_tab_content_image"><div class="se-dialog-body"><div style="border-bottom: 1px dashed #ccc;">';if(t.imageFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.imageBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_image_file" type="file" accept="'+t.imageAccept+'"'+(t.imageMultipleFile?' multiple="multiple"':"")+'/><button type="button" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.imageUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.imageBox.url+'</label><div class="se-dialog-form-files"><input class="se-input-form se-input-url _se_image_url" type="text" />'+(t.imageGalleryUrl&&e.plugins.imageGallery?'<button type="button" class="se-btn se-dialog-files-edge-button __se__gallery" title="'+n.toolbar.imageGallery+'">'+e.icons.image_gallery+"</button>":"")+'</div><pre class="se-link-preview"></pre></div>'),l+='</div><div class="se-dialog-form"><label>'+n.dialogBox.imageBox.altText+'</label><input class="se-input-form _se_image_alt" type="text" /></div>',t.imageResizing){const i=t.imageSizeOnlyPercentage,o=i?' style="display: none !important;"':"",s=t.imageHeightShow?"":' style="display: none !important;"';l+='<div class="se-dialog-form">',i||!t.imageHeightShow?l+='<div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.size+"</label></div>":l+='<div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.width+'</label><label class="se-dialog-size-x">&nbsp;</label><label class="size-h">'+n.dialogBox.height+"</label></div>",l+='<input class="se-input-control _se_image_size_x" placeholder="auto"'+(i?' type="number" min="1"':'type="text"')+(i?' max="100"':"")+' /><label class="se-dialog-size-x"'+s+">"+(i?"%":"x")+'</label><input type="text" class="se-input-control _se_image_size_y" placeholder="auto"'+o+(i?' max="100"':"")+s+"/><label"+o+s+'><input type="checkbox" class="se-dialog-btn-check _se_image_check_proportion" checked/>&nbsp;'+n.dialogBox.proportion+'</label><button type="button" title="'+n.dialogBox.revertButton+'" class="se-btn se-dialog-btn-revert" style="float: right;">'+e.icons.revert+"</button></div>"}return l+='<div class="se-dialog-form se-dialog-form-footer"><label><input type="checkbox" class="se-dialog-btn-check _se_image_check_caption" />&nbsp;'+n.dialogBox.caption+'</label></div></div></div><div class="_se_tab_content _se_tab_content_url" style="display: none">'+e.context.anchor.forms.innerHTML+'</div><div class="se-dialog-footer"><div><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="none" checked>'+n.dialogBox.basic+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="left">'+n.dialogBox.left+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="center">'+n.dialogBox.center+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="right">'+n.dialogBox.right+'</label></div><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},_fileInputChange:function(){this.imgInputFile.value?(this.imgUrlFile.setAttribute("disabled",!0),this.previewSrc.style.textDecoration="line-through"):(this.imgUrlFile.removeAttribute("disabled"),this.previewSrc.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_openGallery:function(){this.callPlugin("imageGallery",this.plugins.imageGallery.open.bind(this,this.plugins.image._setUrlInput.bind(this.context.image)),null)},_setUrlInput:function(e){this.altText.value=e.alt,this._v_src._linkValue=this.previewSrc.textContent=this.imgUrlFile.value=e.src,this.imgUrlFile.focus()},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},fileTags:["img"],select:function(e){this.plugins.image.onModifyMode.call(this,e,this.plugins.resizing.call_controller_resize.call(this,e,"image"))},destroy:function(e){const t=e||this.context.image._element,n=this.util.getParentElement(t,this.util.isMediaComponent)||t,i=1*t.getAttribute("data-index");let l=n.previousElementSibling||n.nextElementSibling;const o=n.parentNode;this.util.removeItem(n),this.plugins.image.init.call(this),this.controllersOff(),o!==this.context.element.wysiwyg&&this.util.removeItemAllParents(o,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(l),this.plugins.fileManager.deleteInfo.call(this,"image",i,this.functions.onImageUpload),this.history.push(!1)},on:function(e){const t=this.context.image;e?t.imgInputFile&&this.options.imageMultipleFile&&t.imgInputFile.removeAttribute("multiple"):(t.inputX.value=t._origin_w=this.options.imageWidth===t._defaultSizeX?"":this.options.imageWidth,t.inputY.value=t._origin_h=this.options.imageHeight===t._defaultSizeY?"":this.options.imageHeight,t.imgInputFile&&this.options.imageMultipleFile&&t.imgInputFile.setAttribute("multiple","multiple")),this.plugins.anchor.on.call(this,t.anchorCtx,e)},open:function(){this.plugins.dialog.open.call(this,"image","image"===this.currentControllerName)},openTab:function(e){const t=this.context.image.modal,n="init"===e?t.querySelector("._se_tab_link"):e.target;if(!/^BUTTON$/i.test(n.tagName))return!1;const i=n.getAttribute("data-tab-link");let l,o,s;for(o=t.getElementsByClassName("_se_tab_content"),l=0;l<o.length;l++)o[l].style.display="none";for(s=t.getElementsByClassName("_se_tab_link"),l=0;l<s.length;l++)this.util.removeClass(s[l],"active");return t.querySelector("._se_tab_content_"+i).style.display="block",this.util.addClass(n,"active"),"image"===i&&this.context.image.focusElement?this.context.image.focusElement.focus():"url"===i&&this.context.anchor.caller.image.urlInput.focus(),!1},submit:function(e){const t=this.context.image,n=this.plugins.image;e.preventDefault(),e.stopPropagation(),t._altText=t.altText.value,t._align=t.modal.querySelector('input[name="suneditor_image_radio"]:checked').value,t._captionChecked=t.captionCheckEl.checked,t._resizing&&(t._proportionChecked=t.proportion.checked);try{this.context.dialog.updateModal&&n.update_image.call(this,!1,!0,!1),t.imgInputFile&&t.imgInputFile.files.length>0?(this.showLoading(),n.submitAction.call(this,this.context.image.imgInputFile.files)):t.imgUrlFile&&t._v_src._linkValue.length>0&&(this.showLoading(),n.onRender_imgUrl.call(this))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.image.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/image/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.imageUploadSizeLimit;if(i>0){let e=0;const n=this.context.image._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.imageUpload.fail] Size of uploadable total images: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onImageUploadError||this.functions.onImageUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.image;l._uploadFileLength=n.length;const o={anchor:this.plugins.anchor.createAnchor.call(this,l.anchorCtx,!0),inputWidth:l.inputX.value,inputHeight:l.inputY.value,align:l._align,isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onImageUploadBefore){const e=this.functions.onImageUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.image.register.call(this,o,e):this.plugins.image.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();this._w.Array.isArray(e)&&e.length>0&&(n=e)}this.plugins.image.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onImageUploadError||this.functions.onImageUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.image.error] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.image.error.call(this,t,null);const n=this.options.imageUploadUrl,i=this.context.dialog.updateModal?1:t.length;if("string"==typeof n&&n.length>0){const l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.imageUploadHeader,l,this.plugins.image.callBack_imgUpload.bind(this,e),this.functions.onImageUploadError)}else this.plugins.image.setup_reader.call(this,t,e.anchor,e.inputWidth,e.inputHeight,e.align,i,e.isUpdate)},callBack_imgUpload:function(e,t){if("function"==typeof this.functions.imageUploadHandler)this.functions.imageUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.image.error.call(this,n.errorMessage,n):this.plugins.image.register.call(this,e,n)}},register:function(e,t){const n=t.result;for(let t,i=0,l=n.length;i<l;i++){if(t={name:n[i].name,size:n[i].size},e.isUpdate){this.plugins.image.update_src.call(this,n[i].url,e.element,t);break}this.plugins.image.create_image.call(this,n[i].url,e.anchor,e.inputWidth,e.inputHeight,e.align,t)}this.closeLoading()},setup_reader:function(e,t,n,i,l,o,s){try{this.context.image.base64RenderIndex=o;const a=this._w.FileReader,r=[o];this.context.image.inputX.value=n,this.context.image.inputY.value=i;for(let c,d,u=0;u<o;u++)c=new a,d=e[u],c.onload=function(e,o,s,a,c){r[c]={result:e.result,file:a},0==--this.context.image.base64RenderIndex&&(this.plugins.image.onRender_imgBase64.call(this,o,r,s,t,n,i,l),this.closeLoading())}.bind(this,c,s,this.context.image._element,d,u),c.readAsDataURL(d)}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.image.setup_reader.fail] cause : "'+e.message+'"')}},onRender_imgBase64:function(e,t,n,i,l,o,s){const a=this.plugins.image.update_src,r=this.plugins.image.create_image;for(let c=0,d=t.length;c<d;c++)e?(this.context.image._element.setAttribute("data-file-name",t[c].file.name),this.context.image._element.setAttribute("data-file-size",t[c].file.size),a.call(this,t[c].result,n,t[c].file)):r.call(this,t[c].result,i,l,o,s,t[c].file)},onRender_imgUrl:function(){const e=this.context.image;if(0===e._v_src._linkValue.length)return!1;try{const t={name:e._v_src._linkValue.split("/").pop(),size:0};this.context.dialog.updateModal?this.plugins.image.update_src.call(this,e._v_src._linkValue,e._element,t):this.plugins.image.create_image.call(this,e._v_src._linkValue,this.plugins.anchor.createAnchor.call(this,e.anchorCtx,!0),e.inputX.value,e.inputY.value,e._align,t)}catch(e){throw Error('[SUNEDITOR.image.URLRendering.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},onRender_link:function(e,t){return t?(t.setAttribute("data-image-link","image"),e.setAttribute("data-image-link",t.href),t.appendChild(e),t):e},setInputSize:function(e,t){t&&32===t.keyCode?t.preventDefault():this.plugins.resizing._module_setInputSize.call(this,this.context.image,e)},setRatio:function(){this.plugins.resizing._module_setRatio.call(this,this.context.image)},checkFileInfo:function(){const e=this.plugins.image,t=this.context.image,n=function(n){e.onModifyMode.call(this,n,null),e.openModify.call(this,!0),t.inputX.value=t._origin_w,t.inputY.value=t._origin_h;const i=this.util.getFormatElement(n);i&&(t._align=i.style.textAlign||i.style.float);this.util.getParentElement(n,this.util.isAnchor)&&!t.anchorCtx.linkValue&&(t.anchorCtx.linkValue=" "),e.update_image.call(this,!0,!1,!0)}.bind(this);this.plugins.fileManager.checkInfo.call(this,"image",["img"],this.functions.onImageUpload,n,!0)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"image",this.functions.onImageUpload)},create_image:function(e,t,n,i,l,o){const s=this.plugins.image,a=this.context.image;this.context.resizing._resize_plugin="image";let r=this.util.createElement("IMG");r.src=e,r.alt=a._altText,r.setAttribute("data-rotate","0"),t=s.onRender_link.call(this,r,t),a._resizing&&r.setAttribute("data-proportion",a._proportionChecked);const c=this.plugins.component.set_cover.call(this,t),d=this.plugins.component.set_container.call(this,c,"se-image-container");a._captionChecked&&(a._caption=this.plugins.component.create_caption.call(this),a._caption.setAttribute("contenteditable",!1),c.appendChild(a._caption)),a._element=r,a._cover=c,a._container=d,s.applySize.call(this,n,i),s.setAlign.call(this,l,r,c,d),r.onload=s._image_create_onload.bind(this,r,a.svgDefaultSize,d),this.insertComponent(d,!0,!0,!0)&&this.plugins.fileManager.setInfo.call(this,"image",r,this.functions.onImageUpload,o,!0),this.context.resizing._resize_plugin=""},_image_create_onload:function(e,t,n){if(0===e.offsetWidth&&this.plugins.image.applySize.call(this,t,""),this.options.mediaAutoSelect)this.selectComponent(e,"image");else{const e=this.appendFormatTag(n,null);this.setRange(e,0,e,0)}},update_image:function(e,t,n){const i=this.context.image;let l,o=i._element,s=i._cover,a=i._container,r=!1;null===s&&(r=!0,o=i._element.cloneNode(!0),s=this.plugins.component.set_cover.call(this,o)),null===a?(s=s.cloneNode(!0),o=s.querySelector("img"),r=!0,a=this.plugins.component.set_container.call(this,s,"se-image-container")):r&&(a.innerHTML="",a.appendChild(s),i._cover=s,i._element=o,r=!1);const c=this.util.isNumber(i.inputX.value)?i.inputX.value+i.sizeUnit:i.inputX.value,d=this.util.isNumber(i.inputY.value)?i.inputY.value+i.sizeUnit:i.inputY.value;l=/%$/.test(o.style.width)?c!==a.style.width||d!==a.style.height:c!==o.style.width||d!==o.style.height,o.alt=i._altText;let u=!1;i._captionChecked?i._caption||(i._caption=this.plugins.component.create_caption.call(this),s.appendChild(i._caption),u=!0):i._caption&&(this.util.removeItem(i._caption),i._caption=null,u=!0);const h=this.plugins.anchor.createAnchor.call(this,i.anchorCtx,!0);if(h)i._linkElement=i._linkElement===h?h.cloneNode(!1):h,s.insertBefore(this.plugins.image.onRender_link.call(this,o,i._linkElement),i._caption);else if(null!==i._linkElement){const e=o;if(e.setAttribute("data-image-link",""),s.contains(i._linkElement)){const t=e.cloneNode(!0);s.removeChild(i._linkElement),s.insertBefore(t,i._caption),o=t}}if(r){const e=this.util.isRangeFormatElement(i._element.parentNode)||this.util.isWysiwygDiv(i._element.parentNode)?i._element:/^A$/i.test(i._element.parentNode.nodeName)?i._element.parentNode:this.util.getFormatElement(i._element)||i._element;if(this.util.isFormatElement(e)&&e.childNodes.length>0)e.parentNode.insertBefore(a,e),this.util.removeItem(i._element),this.util.removeEmptyNode(e,null),0===e.children.length&&(e.innerHTML=this.util.htmlRemoveWhiteSpace(e.innerHTML));else if(this.util.isFormatElement(e.parentNode)){const t=e.parentNode;t.parentNode.insertBefore(a,e.previousSibling?t.nextElementSibling:t),this.util.removeItem(e)}else e.parentNode.replaceChild(a,e);o=a.querySelector("img"),i._element=o,i._cover=s,i._container=a}(u||!i._onlyPercentage&&l)&&!e&&(/\d+/.test(o.style.height)||this.context.resizing._rotateVertical&&i._captionChecked)&&(/%$/.test(i.inputX.value)||/%$/.test(i.inputY.value)?this.plugins.resizing.resetTransform.call(this,o):this.plugins.resizing.setTransformSize.call(this,o,this.util.getNumber(i.inputX.value,0),this.util.getNumber(i.inputY.value,0))),i._resizing&&(o.setAttribute("data-proportion",i._proportionChecked),l&&this.plugins.image.applySize.call(this)),this.plugins.image.setAlign.call(this,null,o,null,null),e&&this.plugins.fileManager.setInfo.call(this,"image",o,this.functions.onImageUpload,null,!0),t&&this.selectComponent(o,"image"),n||this.history.push(!1)},update_src:function(e,t,n){t.src=e,this._w.setTimeout(this.plugins.fileManager.setInfo.bind(this,"image",t,this.functions.onImageUpload,n,!0)),this.selectComponent(t,"image")},onModifyMode:function(e,t){if(!e)return;const n=this.context.image;n._linkElement=n.anchorCtx.linkAnchor=/^A$/i.test(e.parentNode.nodeName)?e.parentNode:null,n._element=e,n._cover=this.util.getParentElement(e,"FIGURE"),n._container=this.util.getParentElement(e,this.util.isMediaComponent),n._caption=this.util.getChildElement(n._cover,"FIGCAPTION"),n._align=e.style.float||e.getAttribute("data-align")||"none",e.style.float="",this.plugins.anchor.setCtx(n._linkElement,n.anchorCtx),t&&(n._element_w=t.w,n._element_h=t.h,n._element_t=t.t,n._element_l=t.l);let i,l,o=n._element.getAttribute("data-size")||n._element.getAttribute("data-origin");o?(o=o.split(","),i=o[0],l=o[1]):t&&(i=t.w,l=t.h),n._origin_w=i||e.style.width||e.width||"",n._origin_h=l||e.style.height||e.height||""},openModify:function(e){const t=this.context.image;t.imgUrlFile&&(t._v_src._linkValue=t.previewSrc.textContent=t.imgUrlFile.value=t._element.src),t._altText=t.altText.value=t._element.alt,t.modal.querySelector('input[name="suneditor_image_radio"][value="'+t._align+'"]').checked=!0,t._align=t.modal.querySelector('input[name="suneditor_image_radio"]:checked').value,t._captionChecked=t.captionCheckEl.checked=!!t._caption,t._resizing&&this.plugins.resizing._module_setModifyInputSize.call(this,t,this.plugins.image),e||this.plugins.dialog.open.call(this,"image",!0)},applySize:function(e,t){const n=this.context.image;return e||(e=n.inputX.value||this.options.imageWidth),t||(t=n.inputY.value||this.options.imageHeight),n._onlyPercentage&&e||/%$/.test(e)?(this.plugins.image.setPercentSize.call(this,e,t),!0):(e&&"auto"!==e||t&&"auto"!==t?this.plugins.image.setSize.call(this,e,t,!1):this.plugins.image.setAutoSize.call(this),!1)},sizeRevert:function(){this.plugins.resizing._module_sizeRevert.call(this,this.context.image)},setSize:function(e,t,n,i){const l=this.context.image,o=/^(rw|lw)$/.test(i);/^(th|bh)$/.test(i)||(l._element.style.width=this.util.isNumber(e)?e+l.sizeUnit:e,this.plugins.image.cancelPercentAttr.call(this)),o||(l._element.style.height=this.util.isNumber(t)?t+l.sizeUnit:/%$/.test(t)?"":t),"center"===l._align&&this.plugins.image.setAlign.call(this,null,null,null,null),n||l._element.removeAttribute("data-percentage"),this.plugins.resizing._module_saveCurrentSize.call(this,l)},setAutoSize:function(){const e=this.context.image;this.plugins.resizing.resetTransform.call(this,e._element),this.plugins.image.cancelPercentAttr.call(this),e._element.style.maxWidth="",e._element.style.width="",e._element.style.height="",e._cover.style.width="",e._cover.style.height="",this.plugins.image.setAlign.call(this,null,null,null,null),e._element.setAttribute("data-percentage","auto,auto"),this.plugins.resizing._module_saveCurrentSize.call(this,e)},setOriginSize:function(){const e=this.context.image;e._element.removeAttribute("data-percentage"),this.plugins.resizing.resetTransform.call(this,e._element),this.plugins.image.cancelPercentAttr.call(this);const t=(e._element.getAttribute("data-origin")||"").split(","),n=t[0],i=t[1];t&&(e._onlyPercentage||/%$/.test(n)&&(/%$/.test(i)||!/\d/.test(i))?this.plugins.image.setPercentSize.call(this,n,i):this.plugins.image.setSize.call(this,n,i),this.plugins.resizing._module_saveCurrentSize.call(this,e))},setPercentSize:function(e,t){const n=this.context.image;t=!t||/%$/.test(t)||this.util.getNumber(t,0)?this.util.isNumber(t)?t+n.sizeUnit:t||"":this.util.isNumber(t)?t+"%":t;const i=/%$/.test(t);n._container.style.width=this.util.isNumber(e)?e+"%":e,n._container.style.height="",n._cover.style.width="100%",n._cover.style.height=i?t:"",n._element.style.width="100%",n._element.style.height=i?"":t,n._element.style.maxWidth="","center"===n._align&&this.plugins.image.setAlign.call(this,null,null,null,null),n._element.setAttribute("data-percentage",e+","+t),this.plugins.resizing.setCaptionPosition.call(this,n._element),this.plugins.resizing._module_saveCurrentSize.call(this,n)},cancelPercentAttr:function(){const e=this.context.image;e._cover.style.width="",e._cover.style.height="",e._container.style.width="",e._container.style.height="",this.util.removeClass(e._container,this.context.image._floatClassRegExp),this.util.addClass(e._container,"__se__float-"+e._align),"center"===e._align&&this.plugins.image.setAlign.call(this,null,null,null,null)},setAlign:function(e,t,n,i){const l=this.context.image;e||(e=l._align),t||(t=l._element),n||(n=l._cover),i||(i=l._container),n.style.margin=e&&"none"!==e?"auto":"0",/%$/.test(t.style.width)&&"center"===e?(i.style.minWidth="100%",n.style.width=i.style.width):(i.style.minWidth="",n.style.width=this.context.resizing._rotateVertical?t.style.height||t.offsetHeight:t.style.width&&"auto"!==t.style.width?t.style.width||"100%":""),this.util.hasClass(i,"__se__float-"+e)||(this.util.removeClass(i,l._floatClassRegExp),this.util.addClass(i,"__se__float-"+e)),t.setAttribute("data-align",e)},init:function(){const e=this.context.image;e.imgInputFile&&(e.imgInputFile.value=""),e.imgUrlFile&&(e._v_src._linkValue=e.previewSrc.textContent=e.imgUrlFile.value=""),e.imgInputFile&&e.imgUrlFile&&(e.imgUrlFile.removeAttribute("disabled"),e.previewSrc.style.textDecoration=""),e.altText.value="",e.modal.querySelector('input[name="suneditor_image_radio"][value="none"]').checked=!0,e.captionCheckEl.checked=!1,e._element=null,this.plugins.image.openTab.call(this,"init"),e._resizing&&(e.inputX.value=this.options.imageWidth===e._defaultSizeX?"":this.options.imageWidth,e.inputY.value=this.options.imageHeight===e._defaultSizeY?"":this.options.imageHeight,e.proportion.checked=!0,e._ratio=!1,e._ratioX=1,e._ratioY=1),this.plugins.anchor.init.call(this,e.anchorCtx)}},v={name:"video",display:"dialog",add:function(e){e.addModule([r.a,p.a,m.a,_.a]);const t=e.options,n=e.context,i=n.video={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,sizeUnit:t._videoSizeUnit,_align:"none",_floatClassRegExp:"__se__float\\-[a-z]+",_youtubeQuery:t.youtubeQuery,_videoRatio:100*t.videoRatio+"%",_defaultRatio:100*t.videoRatio+"%",_linkValue:"",_element:null,_cover:null,_container:null,inputX:null,inputY:null,_element_w:1,_element_h:1,_element_l:0,_element_t:0,_defaultSizeX:"100%",_defaultSizeY:100*t.videoRatio+"%",_origin_w:"100%"===t.videoWidth?"":t.videoWidth,_origin_h:"56.25%"===t.videoHeight?"":t.videoHeight,_proportionChecked:!0,_resizing:t.videoResizing,_resizeDotHide:!t.videoHeightShow,_rotation:t.videoRotation,_onlyPercentage:t.videoSizeOnlyPercentage,_ratio:!1,_ratioX:1,_ratioY:1,_captionShow:!1};let l=this.setDialog(e);i.modal=l,i.videoInputFile=l.querySelector("._se_video_file"),i.videoUrlFile=l.querySelector(".se-input-url"),i.focusElement=i.videoUrlFile||i.videoInputFile,i.preview=l.querySelector(".se-link-preview"),l.querySelector("form").addEventListener("submit",this.submit.bind(e)),i.videoInputFile&&l.querySelector(".se-dialog-files-edge-button").addEventListener("click",this._removeSelectedFiles.bind(i.videoInputFile,i.videoUrlFile,i.preview)),i.videoInputFile&&i.videoUrlFile&&i.videoInputFile.addEventListener("change",this._fileInputChange.bind(i)),i.videoUrlFile&&i.videoUrlFile.addEventListener("input",this._onLinkPreview.bind(i.preview,i,t.linkProtocol)),i.proportion={},i.videoRatioOption={},i.inputX={},i.inputY={},t.videoResizing&&(i.proportion=l.querySelector("._se_video_check_proportion"),i.videoRatioOption=l.querySelector(".se-video-ratio"),i.inputX=l.querySelector("._se_video_size_x"),i.inputY=l.querySelector("._se_video_size_y"),i.inputX.value=t.videoWidth,i.inputY.value=t.videoHeight,i.inputX.addEventListener("keyup",this.setInputSize.bind(e,"x")),i.inputY.addEventListener("keyup",this.setInputSize.bind(e,"y")),i.inputX.addEventListener("change",this.setRatio.bind(e)),i.inputY.addEventListener("change",this.setRatio.bind(e)),i.proportion.addEventListener("change",this.setRatio.bind(e)),i.videoRatioOption.addEventListener("change",this.setVideoRatio.bind(e)),l.querySelector(".se-dialog-btn-revert").addEventListener("click",this.sizeRevert.bind(e))),n.dialog.modal.appendChild(l),l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content",i.style.display="none";let l='<form method="post" enctype="multipart/form-data"><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.videoBox.title+'</span></div><div class="se-dialog-body">';if(t.videoFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.videoBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_video_file" type="file" accept="'+t.videoAccept+'"'+(t.videoMultipleFile?' multiple="multiple"':"")+'/><button type="button" data-command="filesRemove" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.videoUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.videoBox.url+'</label><input class="se-input-form se-input-url" type="text" /><pre class="se-link-preview"></pre></div>'),t.videoResizing){const i=t.videoRatioList||[{name:"16:9",value:.5625},{name:"4:3",value:.75},{name:"21:9",value:.4285}],o=t.videoRatio,s=t.videoSizeOnlyPercentage,a=s?' style="display: none !important;"':"",r=t.videoHeightShow?"":' style="display: none !important;"',c=t.videoRatioShow?"":' style="display: none !important;"',d=s||t.videoHeightShow||t.videoRatioShow?"":' style="display: none !important;"';l+='<div class="se-dialog-form"><div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.width+'</label><label class="se-dialog-size-x">&nbsp;</label><label class="size-h"'+r+">"+n.dialogBox.height+'</label><label class="size-h"'+c+">("+n.dialogBox.ratio+')</label></div><input class="se-input-control _se_video_size_x" placeholder="100%"'+(s?' type="number" min="1"':'type="text"')+(s?' max="100"':"")+'/><label class="se-dialog-size-x"'+d+">"+(s?"%":"x")+'</label><input class="se-input-control _se_video_size_y" placeholder="'+100*t.videoRatio+'%"'+(s?' type="number" min="1"':'type="text"')+(s?' max="100"':"")+r+'/><select class="se-input-select se-video-ratio" title="'+n.dialogBox.ratio+'"'+c+">",r||(l+='<option value=""> - </option>');for(let e=0,t=i.length;e<t;e++)l+='<option value="'+i[e].value+'"'+(o.toString()===i[e].value.toString()?" selected":"")+">"+i[e].name+"</option>";l+='</select><button type="button" title="'+n.dialogBox.revertButton+'" class="se-btn se-dialog-btn-revert" style="float: right;">'+e.icons.revert+'</button></div><div class="se-dialog-form se-dialog-form-footer"'+a+d+'><label><input type="checkbox" class="se-dialog-btn-check _se_video_check_proportion" checked/>&nbsp;'+n.dialogBox.proportion+"</label></div>"}return l+='</div><div class="se-dialog-footer"><div><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="none" checked>'+n.dialogBox.basic+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="left">'+n.dialogBox.left+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="center">'+n.dialogBox.center+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="right">'+n.dialogBox.right+'</label></div><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},_fileInputChange:function(){this.videoInputFile.value?(this.videoUrlFile.setAttribute("disabled",!0),this.preview.style.textDecoration="line-through"):(this.videoUrlFile.removeAttribute("disabled"),this.preview.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();/^<iframe.*\/iframe>$/.test(i)?(e._linkValue=i,this.textContent='<IFrame :src=".."></IFrame>'):e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},_setTagAttrs:function(e){e.setAttribute("controls",!0);const t=this.options.videoTagAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},createVideoTag:function(){const e=this.util.createElement("VIDEO");return this.plugins.video._setTagAttrs.call(this,e),e},_setIframeAttrs:function(e){e.frameBorder="0",e.allowFullscreen=!0;const t=this.options.videoIframeAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},createIframeTag:function(){const e=this.util.createElement("IFRAME");return this.plugins.video._setIframeAttrs.call(this,e),e},fileTags:["iframe","video"],select:function(e){this.plugins.video.onModifyMode.call(this,e,this.plugins.resizing.call_controller_resize.call(this,e,"video"))},destroy:function(e){const t=e||this.context.video._element,n=this.context.video._container,i=1*t.getAttribute("data-index");let l=n.previousElementSibling||n.nextElementSibling;const o=n.parentNode;this.util.removeItem(n),this.plugins.video.init.call(this),this.controllersOff(),o!==this.context.element.wysiwyg&&this.util.removeItemAllParents(o,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(l),this.plugins.fileManager.deleteInfo.call(this,"video",i,this.functions.onVideoUpload),this.history.push(!1)},on:function(e){const t=this.context.video;e?t.videoInputFile&&this.options.videoMultipleFile&&t.videoInputFile.removeAttribute("multiple"):(t.inputX.value=t._origin_w=this.options.videoWidth===t._defaultSizeX?"":this.options.videoWidth,t.inputY.value=t._origin_h=this.options.videoHeight===t._defaultSizeY?"":this.options.videoHeight,t.proportion.disabled=!0,t.videoInputFile&&this.options.videoMultipleFile&&t.videoInputFile.setAttribute("multiple","multiple")),t._resizing&&this.plugins.video.setVideoRatioSelect.call(this,t._origin_h||t._defaultRatio)},open:function(){this.plugins.dialog.open.call(this,"video","video"===this.currentControllerName)},setVideoRatio:function(e){const t=this.context.video,n=e.target.options[e.target.selectedIndex].value;t._defaultSizeY=t._videoRatio=n?100*n+"%":t._defaultSizeY,t.inputY.placeholder=n?100*n+"%":"",t.inputY.value=""},setInputSize:function(e,t){if(t&&32===t.keyCode)return void t.preventDefault();const n=this.context.video;this.plugins.resizing._module_setInputSize.call(this,n,e),"y"===e&&this.plugins.video.setVideoRatioSelect.call(this,t.target.value||n._defaultRatio)},setRatio:function(){this.plugins.resizing._module_setRatio.call(this,this.context.video)},submit:function(e){const t=this.context.video,n=this.plugins.video;e.preventDefault(),e.stopPropagation(),t._align=t.modal.querySelector('input[name="suneditor_video_radio"]:checked').value;try{t.videoInputFile&&t.videoInputFile.files.length>0?(this.showLoading(),n.submitAction.call(this,this.context.video.videoInputFile.files)):t.videoUrlFile&&t._linkValue.length>0&&(this.showLoading(),n.setup_url.call(this))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.video.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/video/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.videoUploadSizeLimit;if(i>0){let e=0;const n=this.context.video._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.videoUpload.fail] Size of uploadable total videos: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onVideoUploadError||this.functions.onVideoUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.video;l._uploadFileLength=n.length;const o={inputWidth:l.inputX.value,inputHeight:l.inputY.value,align:l._align,isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onVideoUploadBefore){const e=this.functions.onVideoUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.video.register.call(this,o,e):this.plugins.video.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();"object"==typeof e&&e.length>0&&(n=e)}this.plugins.video.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onVideoUploadError||this.functions.onVideoUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.video.error] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.video.error.call(this,t,null);const n=this.options.videoUploadUrl,i=this.context.dialog.updateModal?1:t.length;if(!("string"==typeof n&&n.length>0))throw Error('[SUNEDITOR.videoUpload.fail] cause : There is no "videoUploadUrl" option.');{const l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.videoUploadHeader,l,this.plugins.video.callBack_videoUpload.bind(this,e),this.functions.onVideoUploadError)}},callBack_videoUpload:function(e,t){if("function"==typeof this.functions.videoUploadHandler)this.functions.videoUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.video.error.call(this,n.errorMessage,n):this.plugins.video.register.call(this,e,n)}},register:function(e,t){const n=t.result,i=this.plugins.video.createVideoTag.call(this);for(let t,l=0,o=n.length;l<o;l++)t={name:n[l].name,size:n[l].size},this.plugins.video.create_video.call(this,e.isUpdate?e.element:i.cloneNode(!1),n[l].url,e.inputWidth,e.inputHeight,e.align,t,e.isUpdate);this.closeLoading()},setup_url:function(){try{const e=this.context.video;let t=e._linkValue;if(0===t.length)return!1;if(/^<iframe.*\/iframe>$/.test(t)){if(t=(new this._w.DOMParser).parseFromString(t,"text/html").querySelector("iframe").src,0===t.length)return!1}if(/youtu\.?be/.test(t)){if(/^http/.test(t)||(t="https://"+t),t=t.replace("watch?v=",""),/^\/\/.+\/embed\//.test(t)||(t=t.replace(t.match(/\/\/.+\//)[0],"//www.youtube.com/embed/").replace("&","?&")),e._youtubeQuery.length>0)if(/\?/.test(t)){const n=t.split("?");t=n[0]+"?"+e._youtubeQuery+"&"+n[1]}else t+="?"+e._youtubeQuery}else/vimeo\.com/.test(t)&&(t.endsWith("/")&&(t=t.slice(0,-1)),t="https://player.vimeo.com/video/"+t.slice(t.lastIndexOf("/")+1));this.plugins.video.create_video.call(this,this.plugins.video.createIframeTag.call(this),t,e.inputX.value,e.inputY.value,e._align,null,this.context.dialog.updateModal)}catch(e){throw Error('[SUNEDITOR.video.upload.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},create_video:function(e,t,n,i,l,o,s){this.context.resizing._resize_plugin="video";const a=this.context.video;let r=null,c=null,d=!1;if(s){if((e=a._element).src!==t){d=!0;const n=/youtu\.?be/.test(t),i=/vimeo\.com/.test(t);if(!n&&!i||/^iframe$/i.test(e.nodeName))if(n||i||/^videoo$/i.test(e.nodeName))e.src=t;else{const n=this.plugins.video.createVideoTag.call(this);n.src=t,e.parentNode.replaceChild(n,e),a._element=e=n}else{const n=this.plugins.video.createIframeTag.call(this);n.src=t,e.parentNode.replaceChild(n,e),a._element=e=n}}c=a._container,r=this.util.getParentElement(e,"FIGURE")}else d=!0,e.src=t,a._element=e,r=this.plugins.component.set_cover.call(this,e),c=this.plugins.component.set_container.call(this,r,"se-video-container");a._cover=r,a._container=c;const u=this.plugins.resizing._module_getSizeX.call(this,a)!==(n||a._defaultSizeX)||this.plugins.resizing._module_getSizeY.call(this,a)!==(i||a._videoRatio),h=!s||u;a._resizing&&(this.context.video._proportionChecked=a.proportion.checked,e.setAttribute("data-proportion",a._proportionChecked));let p=!1;h&&(p=this.plugins.video.applySize.call(this)),p&&"center"===l||this.plugins.video.setAlign.call(this,null,e,r,c);let g=!0;if(s)a._resizing&&this.context.resizing._rotateVertical&&h&&this.plugins.resizing.setTransformSize.call(this,e,null,null);else if(g=this.insertComponent(c,!1,!0,!this.options.mediaAutoSelect),!this.options.mediaAutoSelect){const e=this.appendFormatTag(c,null);this.setRange(e,0,e,0)}g&&(d&&this.plugins.fileManager.setInfo.call(this,"video",e,this.functions.onVideoUpload,o,!0),s&&(this.selectComponent(e,"video"),this.history.push(!1))),this.context.resizing._resize_plugin=""},_update_videoCover:function(e){if(!e)return;const t=this.context.video;/^video$/i.test(e.nodeName)?this.plugins.video._setTagAttrs.call(this,e):this.plugins.video._setIframeAttrs.call(this,e);const n=this.util.getParentElement(e,this.util.isMediaComponent)||this.util.getParentElement(e,function(e){return this.isWysiwygDiv(e.parentNode)}.bind(this.util)),i=e;t._element=e=e.cloneNode(!0);const l=t._cover=this.plugins.component.set_cover.call(this,e),o=t._container=this.plugins.component.set_container.call(this,l,"se-video-container");try{const s=n.querySelector("figcaption");let a=null;s&&(a=this.util.createElement("DIV"),a.innerHTML=s.innerHTML,this.util.removeItem(s));const r=(e.getAttribute("data-size")||e.getAttribute("data-origin")||"").split(",");this.plugins.video.applySize.call(this,r[0]||i.style.width||i.width||"",r[1]||i.style.height||i.height||"");const c=this.util.getFormatElement(i);c&&(t._align=c.style.textAlign||c.style.float),this.plugins.video.setAlign.call(this,null,e,l,o),this.util.isFormatElement(n)&&n.childNodes.length>0?(n.parentNode.insertBefore(o,n),this.util.removeItem(i),this.util.removeEmptyNode(n,null),0===n.children.length&&(n.innerHTML=this.util.htmlRemoveWhiteSpace(n.innerHTML))):n.parentNode.replaceChild(o,n),a&&n.parentNode.insertBefore(a,o.nextElementSibling)}catch(e){console.warn("[SUNEDITOR.video.error] Maybe the video tag is nested.",e)}this.plugins.fileManager.setInfo.call(this,"video",e,this.functions.onVideoUpload,null,!0)},onModifyMode:function(e,t){const n=this.context.video;n._element=e,n._cover=this.util.getParentElement(e,"FIGURE"),n._container=this.util.getParentElement(e,this.util.isMediaComponent),n._align=e.style.float||e.getAttribute("data-align")||"none",e.style.float="",t&&(n._element_w=t.w,n._element_h=t.h,n._element_t=t.t,n._element_l=t.l);let i,l,o=n._element.getAttribute("data-size")||n._element.getAttribute("data-origin");o?(o=o.split(","),i=o[0],l=o[1]):t&&(i=t.w,l=t.h),n._origin_w=i||e.style.width||e.width||"",n._origin_h=l||e.style.height||e.height||""},openModify:function(e){const t=this.context.video;if(t.videoUrlFile&&(t._linkValue=t.preview.textContent=t.videoUrlFile.value=t._element.src||(t._element.querySelector("source")||"").src||""),t.modal.querySelector('input[name="suneditor_video_radio"][value="'+t._align+'"]').checked=!0,t._resizing){this.plugins.resizing._module_setModifyInputSize.call(this,t,this.plugins.video);const e=t._videoRatio=this.plugins.resizing._module_getSizeY.call(this,t);this.plugins.video.setVideoRatioSelect.call(this,e)||(t.inputY.value=t._onlyPercentage?this.util.getNumber(e,2):e)}e||this.plugins.dialog.open.call(this,"video",!0)},setVideoRatioSelect:function(e){let t=!1;const n=this.context.video,i=n.videoRatioOption.options;/%$/.test(e)||n._onlyPercentage?e=this.util.getNumber(e,2)/100+"":(!this.util.isNumber(e)||1*e>=1)&&(e=""),n.inputY.placeholder="";for(let l=0,o=i.length;l<o;l++)i[l].value===e?(t=i[l].selected=!0,n.inputY.placeholder=e?100*e+"%":""):i[l].selected=!1;return t},checkFileInfo:function(){this.plugins.fileManager.checkInfo.call(this,"video",["iframe","video"],this.functions.onVideoUpload,this.plugins.video._update_videoCover.bind(this),!0)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"video",this.functions.onVideoUpload)},applySize:function(e,t){const n=this.context.video;return e||(e=n.inputX.value||this.options.videoWidth),t||(t=n.inputY.value||this.options.videoHeight),n._onlyPercentage||/%$/.test(e)||!e?(this.plugins.video.setPercentSize.call(this,e||"100%",t||(/%$/.test(n._videoRatio)?n._videoRatio:n._defaultRatio)),!0):(e&&"auto"!==e||t&&"auto"!==t?this.plugins.video.setSize.call(this,e,t||n._videoRatio||n._defaultRatio,!1):this.plugins.video.setAutoSize.call(this),!1)},sizeRevert:function(){this.plugins.resizing._module_sizeRevert.call(this,this.context.video)},setSize:function(e,t,n,i){const l=this.context.video,o=/^(rw|lw)$/.test(i),s=/^(th|bh)$/.test(i);s||(e=this.util.getNumber(e,0)),o||(t=this.util.isNumber(t)?t+l.sizeUnit:t||""),s||(l._element.style.width=e?e+l.sizeUnit:""),o||(l._cover.style.paddingBottom=l._cover.style.height=t),s||/%$/.test(e)||(l._cover.style.width="",l._container.style.width=""),o||/%$/.test(t)?l._element.style.height="":l._element.style.height=t,n||l._element.removeAttribute("data-percentage"),this.plugins.resizing._module_saveCurrentSize.call(this,l)},setAutoSize:function(){this.plugins.video.setPercentSize.call(this,100,this.context.video._defaultRatio)},setOriginSize:function(e){const t=this.context.video;t._element.removeAttribute("data-percentage"),this.plugins.resizing.resetTransform.call(this,t._element),this.plugins.video.cancelPercentAttr.call(this);const n=((e?t._element.getAttribute("data-size"):"")||t._element.getAttribute("data-origin")||"").split(",");if(n){const e=n[0],i=n[1];t._onlyPercentage||/%$/.test(e)&&(/%$/.test(i)||!/\d/.test(i))?this.plugins.video.setPercentSize.call(this,e,i):this.plugins.video.setSize.call(this,e,i),this.plugins.resizing._module_saveCurrentSize.call(this,t)}},setPercentSize:function(e,t){const n=this.context.video;t=!t||/%$/.test(t)||this.util.getNumber(t,0)?this.util.isNumber(t)?t+n.sizeUnit:t||n._defaultRatio:this.util.isNumber(t)?t+"%":t,n._container.style.width=this.util.isNumber(e)?e+"%":e,n._container.style.height="",n._cover.style.width="100%",n._cover.style.height=t,n._cover.style.paddingBottom=t,n._element.style.width="100%",n._element.style.height="100%",n._element.style.maxWidth="","center"===n._align&&this.plugins.video.setAlign.call(this,null,null,null,null),n._element.setAttribute("data-percentage",e+","+t),this.plugins.resizing._module_saveCurrentSize.call(this,n)},cancelPercentAttr:function(){const e=this.context.video;e._cover.style.width="",e._cover.style.height="",e._cover.style.paddingBottom="",e._container.style.width="",e._container.style.height="",this.util.removeClass(e._container,this.context.video._floatClassRegExp),this.util.addClass(e._container,"__se__float-"+e._align),"center"===e._align&&this.plugins.video.setAlign.call(this,null,null,null,null)},setAlign:function(e,t,n,i){const l=this.context.video;e||(e=l._align),t||(t=l._element),n||(n=l._cover),i||(i=l._container),n.style.margin=e&&"none"!==e?"auto":"0",/%$/.test(t.style.width)&&"center"===e?(i.style.minWidth="100%",n.style.width=i.style.width,n.style.height=n.style.height,n.style.paddingBottom=/%$/.test(n.style.height)?this.util.getNumber(this.util.getNumber(n.style.height,2)/100*this.util.getNumber(n.style.width,2),2)+"%":n.style.height):(i.style.minWidth="",n.style.width=this.context.resizing._rotateVertical?t.style.height||t.offsetHeight:t.style.width||"100%",n.style.paddingBottom=n.style.height),this.util.hasClass(i,"__se__float-"+e)||(this.util.removeClass(i,l._floatClassRegExp),this.util.addClass(i,"__se__float-"+e)),t.setAttribute("data-align",e)},init:function(){const e=this.context.video;e.videoInputFile&&(e.videoInputFile.value=""),e.videoUrlFile&&(e._linkValue=e.preview.textContent=e.videoUrlFile.value=""),e.videoInputFile&&e.videoUrlFile&&(e.videoUrlFile.removeAttribute("disabled"),e.preview.style.textDecoration=""),e._origin_w=this.options.videoWidth,e._origin_h=this.options.videoHeight,e.modal.querySelector('input[name="suneditor_video_radio"][value="none"]').checked=!0,e._resizing&&(e.inputX.value=this.options.videoWidth===e._defaultSizeX?"":this.options.videoWidth,e.inputY.value=this.options.videoHeight===e._defaultSizeY?"":this.options.videoHeight,e.proportion.checked=!0,e.proportion.disabled=!0,this.plugins.video.setVideoRatioSelect.call(this,e._defaultRatio))}},y={name:"audio",display:"dialog",add:function(e){e.addModule([r.a,p.a,_.a]);const t=e.context,n=t.audio={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,targetSelect:null,_origin_w:e.options.audioWidth,_origin_h:e.options.audioHeight,_linkValue:"",_element:null,_cover:null,_container:null};let i=this.setDialog(e);n.modal=i,n.audioInputFile=i.querySelector("._se_audio_files"),n.audioUrlFile=i.querySelector(".se-input-url"),n.focusElement=n.audioInputFile||n.audioUrlFile,n.preview=i.querySelector(".se-link-preview");let l=this.setController(e);n.controller=l,i.querySelector("form").addEventListener("submit",this.submit.bind(e)),n.audioInputFile&&i.querySelector(".se-dialog-files-edge-button").addEventListener("click",this._removeSelectedFiles.bind(n.audioInputFile,n.audioUrlFile,n.preview)),n.audioInputFile&&n.audioUrlFile&&n.audioInputFile.addEventListener("change",this._fileInputChange.bind(n)),l.addEventListener("click",this.onClick_controller.bind(e)),n.audioUrlFile&&n.audioUrlFile.addEventListener("input",this._onLinkPreview.bind(n.preview,n,e.options.linkProtocol)),t.dialog.modal.appendChild(i),t.element.relative.appendChild(l),i=null,l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content",i.style.display="none";let l='<form method="post" enctype="multipart/form-data"><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.audioBox.title+'</span></div><div class="se-dialog-body">';return t.audioFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.audioBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_audio_files" type="file" accept="'+t.audioAccept+'"'+(t.audioMultipleFile?' multiple="multiple"':"")+'/><button type="button" data-command="filesRemove" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.audioUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.audioBox.url+'</label><input class="se-input-form se-input-url" type="text" /><pre class="se-link-preview"></pre></div>'),l+='</div><div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},setController:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-link",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-tooltip">'+n.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},_fileInputChange:function(){this.audioInputFile.value?(this.audioUrlFile.setAttribute("disabled",!0),this.preview.style.textDecoration="line-through"):(this.audioUrlFile.removeAttribute("disabled"),this.preview.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_createAudioTag:function(){const e=this.util.createElement("AUDIO");this.plugins.audio._setTagAttrs.call(this,e);const t=this.context.audio._origin_w,n=this.context.audio._origin_h;return e.setAttribute("origin-size",t+","+n),e.style.cssText=(t?"width:"+t+"; ":"")+(n?"height:"+n+";":""),e},_setTagAttrs:function(e){e.setAttribute("controls",!0);const t=this.options.audioTagAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},fileTags:["audio"],select:function(e){this.plugins.audio.onModifyMode.call(this,e)},destroy:function(e){e=e||this.context.audio._element;const t=this.util.getParentElement(e,this.util.isComponent)||e,n=1*e.getAttribute("data-index"),i=t.previousElementSibling||t.nextElementSibling,l=t.parentNode;this.util.removeItem(t),this.plugins.audio.init.call(this),this.controllersOff(),l!==this.context.element.wysiwyg&&this.util.removeItemAllParents(l,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(i),this.plugins.fileManager.deleteInfo.call(this,"audio",n,this.functions.onAudioUpload),this.history.push(!1)},checkFileInfo:function(){this.plugins.fileManager.checkInfo.call(this,"audio",["audio"],this.functions.onAudioUpload,this.plugins.audio.updateCover.bind(this),!1)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"audio",this.functions.onAudioUpload)},on:function(e){const t=this.context.audio;e?t._element?(this.context.dialog.updateModal=!0,t._linkValue=t.preview.textContent=t.audioUrlFile.value=t._element.src,t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.removeAttribute("multiple")):t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.removeAttribute("multiple"):(this.plugins.audio.init.call(this),t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.setAttribute("multiple","multiple"))},open:function(){this.plugins.dialog.open.call(this,"audio","audio"===this.currentControllerName)},submit:function(e){const t=this.context.audio;e.preventDefault(),e.stopPropagation();try{t.audioInputFile&&t.audioInputFile.files.length>0?(this.showLoading(),this.plugins.audio.submitAction.call(this,t.audioInputFile.files)):t.audioUrlFile&&t._linkValue.length>0&&(this.showLoading(),this.plugins.audio.setupUrl.call(this,t._linkValue))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.audio.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/audio/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.audioUploadSizeLimit;if(i>0){let e=0;const n=this.context.audio._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.audioUpload.fail] Size of uploadable total audios: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onAudioUploadError||this.functions.onAudioUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.audio;l._uploadFileLength=n.length;const o={isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onAudioUploadBefore){const e=this.functions.onAudioUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.audio.register.call(this,o,e):this.plugins.audio.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();"object"==typeof e&&e.length>0&&(n=e)}this.plugins.audio.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onAudioUploadError||this.functions.onAudioUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.audio.exception] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.audio.error.call(this,t,null);const n=this.options.audioUploadUrl,i=this.context.dialog.updateModal?1:t.length,l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.audioUploadHeader,l,this.plugins.audio.callBack_upload.bind(this,e),this.functions.onAudioUploadError)},callBack_upload:function(e,t){if("function"==typeof this.functions.audioUploadHandler)this.functions.audioUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.audio.error.call(this,n.errorMessage,n):this.plugins.audio.register.call(this,e,n)}},register:function(e,t){const n=t.result;for(let t,i,l=0,o=n.length;l<o;l++)i=e.isUpdate?e.element:this.plugins.audio._createAudioTag.call(this),t={name:n[l].name,size:n[l].size},this.plugins.audio.create_audio.call(this,i,n[l].url,t,e.isUpdate);this.closeLoading()},setupUrl:function(e){try{if(0===e.length)return!1;this.plugins.audio.create_audio.call(this,this.plugins.audio._createAudioTag.call(this),e,null,this.context.dialog.updateModal)}catch(e){throw Error('[SUNEDITOR.audio.audio.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},create_audio:function(e,t,n,i){const l=this.context.audio;if(i){if(l._element&&(e=l._element),!e||e.src===t)return void this.selectComponent(e,"audio");e.src=t,this.selectComponent(e,"audio")}else{e.src=t;const n=this.plugins.component.set_cover.call(this,e),i=this.plugins.component.set_container.call(this,n,"");if(!this.insertComponent(i,!1,!0,!this.options.mediaAutoSelect))return void this.focus();if(!this.options.mediaAutoSelect){const e=this.appendFormatTag(i,null);this.setRange(e,0,e,0)}}this.plugins.fileManager.setInfo.call(this,"audio",e,this.functions.onAudioUpload,n,!1),i&&this.history.push(!1)},updateCover:function(e){const t=this.context.audio;this.plugins.audio._setTagAttrs.call(this,e);const n=this.util.getParentElement(e,this.util.isMediaComponent)||this.util.getParentElement(e,function(e){return this.isWysiwygDiv(e.parentNode)}.bind(this.util)),i=e;t._element=e=e.cloneNode(!1);const l=this.plugins.component.set_cover.call(this,e),o=this.plugins.component.set_container.call(this,l,"se-audio-container");try{this.util.isFormatElement(n)&&n.childNodes.length>0?(n.parentNode.insertBefore(o,n),this.util.removeItem(i),this.util.removeEmptyNode(n,null),0===n.children.length&&(n.innerHTML=this.util.htmlRemoveWhiteSpace(n.innerHTML))):n.parentNode.replaceChild(o,n)}catch(e){console.warn("[SUNEDITOR.audio.error] Maybe the audio tag is nested.",e)}this.plugins.fileManager.setInfo.call(this,"audio",e,this.functions.onAudioUpload,null,!1)},onModifyMode:function(e){const t=this.context.audio;this.setControllerPosition(t.controller,e,"bottom",{left:0,top:0}),this.controllersOn(t.controller,e,this.plugins.audio.onControllerOff.bind(this,e),"audio"),this.util.addClass(e,"active"),t._element=e,t._cover=this.util.getParentElement(e,"FIGURE"),t._container=this.util.getParentElement(e,this.util.isComponent)},openModify:function(e){if(this.context.audio.audioUrlFile){const e=this.context.audio;e._linkValue=e.preview.textContent=e.audioUrlFile.value=e._element.src}e||this.plugins.dialog.open.call(this,"audio",!0)},onClick_controller:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command");t&&(e.preventDefault(),/update/.test(t)?this.plugins.audio.openModify.call(this,!1):this.plugins.audio.destroy.call(this,this.context.audio._element),this.controllersOff())},onControllerOff:function(e){this.util.removeClass(e,"active"),this.context.audio.controller.style.display="none"},init:function(){if(this.context.dialog.updateModal)return;const e=this.context.audio;e.audioInputFile&&(e.audioInputFile.value=""),e.audioUrlFile&&(e._linkValue=e.preview.textContent=e.audioUrlFile.value=""),e.audioInputFile&&e.audioUrlFile&&(e.audioUrlFile.removeAttribute("disabled"),e.preview.style.textDecoration=""),e._element=null}},C={name:"math",display:"dialog",add:function(e){e.addModule([r.a]);const t=e.context;t.math={focusElement:null,previewElement:null,fontSizeElement:null,defaultFontSize:"",_mathExp:null};let n=this.setDialog(e);t.math.modal=n,t.math.focusElement=n.querySelector(".se-math-exp"),t.math.previewElement=n.querySelector(".se-math-preview"),t.math.fontSizeElement=n.querySelector(".se-math-size"),t.math.focusElement.addEventListener("keyup",this._renderMathExp.bind(e,t.math),!1),t.math.focusElement.addEventListener("change",this._renderMathExp.bind(e,t.math),!1),t.math.fontSizeElement.addEventListener("change",function(e){this.fontSize=e.target.value}.bind(t.math.previewElement.style),!1);let i=this.setController_MathButton(e);t.math.mathController=i,t.math._mathExp=null,n.querySelector("form").addEventListener("submit",this.submit.bind(e),!1),i.addEventListener("click",this.onClick_mathController.bind(e)),t.math.previewElement.style.fontSize=t.math.defaultFontSize,t.dialog.modal.appendChild(n),t.element.relative.appendChild(i),n=null,i=null},setDialog:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.options.mathFontSize;let l=i[0].value;n.className="se-dialog-content",n.style.display="none";let o='<form><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" aria-label="Close" title="'+t.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+t.dialogBox.mathBox.title+'</span></div><div class="se-dialog-body"><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.inputLabel+' (<a href="https://katex.org/docs/supported.html" target="_blank">KaTeX</a>)</label><textarea class="se-input-form se-math-exp" type="text"></textarea></div><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.fontSizeLabel+'</label><select class="se-input-select se-math-size">';for(let e,t=0,n=i.length;t<n;t++)e=i[t],e.default&&(l=e.value),o+='<option value="'+e.value+'"'+(e.default?" selected":"")+">"+e.text+"</option>";return o+='</select></div><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.previewLabel+'</label><p class="se-math-preview"></p></div></div><div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+t.dialogBox.submitButton+'"><span>'+t.dialogBox.submitButton+"</span></button></div></form>",e.context.math.defaultFontSize=l,n.innerHTML=o,n},setController_MathButton:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-controller se-controller-link",n.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">'+e.icons.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">'+e.icons.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",n},open:function(){this.plugins.dialog.open.call(this,"math","math"===this.currentControllerName)},managedTags:function(){return{className:"katex",method:function(e){if(!e.getAttribute("data-exp")||!this.options.katex)return;const t=this._d.createRange().createContextualFragment(this.plugins.math._renderer.call(this,this.util.HTMLDecoder(e.getAttribute("data-exp"))));e.innerHTML=t.querySelector(".katex").innerHTML}}},_renderer:function(e){const t=this.options.katex;return t.src.renderToString(e,t.options)},_renderMathExp:function(e,t){e.previewElement.innerHTML=this.plugins.math._renderer.call(this,t.target.value)},submit:function(e){this.showLoading(),e.preventDefault(),e.stopPropagation();const t=function(){if(0===this.context.math.focusElement.value.trim().length)return!1;const e=this.context.math,t=e.focusElement.value,n=e.previewElement.querySelector(".katex");if(!n)return!1;if(n.className="__se__katex "+n.className,n.setAttribute("contenteditable",!1),n.setAttribute("data-exp",this.util.HTMLEncoder(t)),n.setAttribute("data-font-size",e.fontSizeElement.value),n.style.fontSize=e.fontSizeElement.value,this.context.dialog.updateModal){const t=this.util.getParentElement(e._mathExp,".katex");t.parentNode.replaceChild(n,t),this.setRange(n,0,n,1)}else{const e=this.getSelectedElements();if(e.length>1){const t=this.util.createElement(e[0].nodeName);if(t.appendChild(n),!this.insertNode(t,null,!0))return!1}else if(!this.insertNode(n,null,!0))return!1;const t=this.util.createTextNode(this.util.zeroWidthSpace);n.parentNode.insertBefore(t,n.nextSibling),this.setRange(n,0,n,1)}return e.focusElement.value="",e.fontSizeElement.value="1em",e.previewElement.style.fontSize="1em",e.previewElement.innerHTML="",!0}.bind(this);try{t()&&(this.plugins.dialog.close.call(this),this.history.push(!1))}catch(e){this.plugins.dialog.close.call(this)}finally{this.closeLoading()}return!1},active:function(e){if(e){if(e.getAttribute("data-exp"))return this.controllerArray.indexOf(this.context.math.mathController)<0&&(this.setRange(e,0,e,1),this.plugins.math.call_controller.call(this,e)),!0}else this.controllerArray.indexOf(this.context.math.mathController)>-1&&this.controllersOff();return!1},on:function(e){if(e){const e=this.context.math;if(e._mathExp){const t=this.util.HTMLDecoder(e._mathExp.getAttribute("data-exp")),n=e._mathExp.getAttribute("data-font-size")||"1em";this.context.dialog.updateModal=!0,e.focusElement.value=t,e.fontSizeElement.value=n,e.previewElement.innerHTML=this.plugins.math._renderer.call(this,t),e.previewElement.style.fontSize=n}}else this.plugins.math.init.call(this)},call_controller:function(e){this.context.math._mathExp=e;const t=this.context.math.mathController;this.setControllerPosition(t,e,"bottom",{left:0,top:0}),this.controllersOn(t,e,"math")},onClick_mathController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")||e.target.parentNode.getAttribute("data-command");t&&(e.preventDefault(),/update/.test(t)?(this.context.math.focusElement.value=this.util.HTMLDecoder(this.context.math._mathExp.getAttribute("data-exp")),this.plugins.dialog.open.call(this,"math",!0)):(this.util.removeItem(this.context.math._mathExp),this.context.math._mathExp=null,this.focus(),this.history.push(!1)),this.controllersOff())},init:function(){const e=this.context.math;e.mathController.style.display="none",e._mathExp=null,e.focusElement.value="",e.previewElement.innerHTML=""}},w=n("JhlZ"),x=n.n(w),E={blockquote:{name:"blockquote",display:"command",add:function(e,t){e.context.blockquote={targetButton:t,tag:e.util.createElement("BLOCKQUOTE")}},active:function(e){if(e){if(/blockquote/i.test(e.nodeName))return this.util.addClass(this.context.blockquote.targetButton,"active"),!0}else this.util.removeClass(this.context.blockquote.targetButton,"active");return!1},action:function(){const e=this.util.getParentElement(this.getSelectionNode(),"blockquote");e?this.detachRangeFormatElement(e,null,null,!1,!1):this.applyRangeFormatElement(this.context.blockquote.tag.cloneNode(!1))}},align:{name:"align",display:"submenu",add:function(e,t){const n=e.icons,i=e.context;i.align={targetButton:t,_alignList:null,currentAlign:"",defaultDir:e.options.rtl?"right":"left",icons:{justify:n.align_justify,left:n.align_left,right:n.align_right,center:n.align_center}};let l=this.setSubmenu(e),o=l.querySelector("ul");o.addEventListener("click",this.pickup.bind(e)),i.align._alignList=o.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null,o=null},setSubmenu:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV"),l="left"===e.context.align.defaultDir,o='<li><button type="button" class="se-btn-list se-btn-align" data-command="justifyleft" data-value="left" title="'+t.toolbar.alignLeft+'"><span class="se-list-icon">'+n.align_left+"</span>"+t.toolbar.alignLeft+"</button></li>",s='<li><button type="button" class="se-btn-list se-btn-align" data-command="justifyright" data-value="right" title="'+t.toolbar.alignRight+'"><span class="se-list-icon">'+n.align_right+"</span>"+t.toolbar.alignRight+"</button></li>";return i.className="se-submenu se-list-layer se-list-align",i.innerHTML='<div class="se-list-inner"><ul class="se-list-basic">'+(l?o:s)+'<li><button type="button" class="se-btn-list se-btn-align" data-command="justifycenter" data-value="center" title="'+t.toolbar.alignCenter+'"><span class="se-list-icon">'+n.align_center+"</span>"+t.toolbar.alignCenter+"</button></li>"+(l?s:o)+'<li><button type="button" class="se-btn-list se-btn-align" data-command="justifyfull" data-value="justify" title="'+t.toolbar.alignJustify+'"><span class="se-list-icon">'+n.align_justify+"</span>"+t.toolbar.alignJustify+"</button></li></ul></div>",i},active:function(e){const t=this.context.align,n=t.targetButton,i=n.firstElementChild;if(e){if(this.util.isFormatElement(e)){const l=e.style.textAlign;if(l)return this.util.changeElement(i,t.icons[l]||t.icons[t.defaultDir]),n.setAttribute("data-focus",l),!0}}else this.util.changeElement(i,t.icons[t.defaultDir]),n.removeAttribute("data-focus");return!1},on:function(){const e=this.context.align,t=e._alignList,n=e.targetButton.getAttribute("data-focus")||e.defaultDir;if(n!==e.currentAlign){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentAlign=n}},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!n&&!/UL/i.test(t.tagName);)n=t.getAttribute("data-value"),t=t.parentNode;if(!n)return;const i=this.context.align.defaultDir,l=this.getSelectedElements();for(let e=0,t=l.length;e<t;e++)this.util.setStyle(l[e],"textAlign",n===i?"":n);this.effectNode=null,this.submenuOff(),this.focus(),this.history.push(!1)}},font:{name:"font",display:"submenu",add:function(e,t){const n=e.context;n.font={targetText:t.querySelector(".txt"),targetTooltip:t.parentNode.querySelector(".se-tooltip-text"),_fontList:null,currentFont:""};let i=this.setSubmenu(e);i.querySelector(".se-list-inner").addEventListener("click",this.pickup.bind(e)),n.font._fontList=i.querySelectorAll("ul li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");let l,o,s,a;i.className="se-submenu se-list-layer se-list-font-family";let r=t.font?t.font:["Arial","Comic Sans MS","Courier New","Impact","Georgia","tahoma","Trebuchet MS","Verdana"],c='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(s=0,a=r.length;s<a;s++)l=r[s],o=l.split(",")[0],c+='<li><button type="button" class="se-btn-list" data-value="'+l+'" data-txt="'+o+'" title="'+o+'" style="font-family:'+l+';">'+o+"</button></li>";return c+="</ul></div>",i.innerHTML=c,i},active:function(e){const t=this.context.font.targetText,n=this.context.font.targetTooltip;if(e){if(e.style&&e.style.fontFamily.length>0){const i=e.style.fontFamily.replace(/["']/g,"");return this.util.changeTxt(t,i),this.util.changeTxt(n,this.lang.toolbar.font+" ("+i+")"),!0}}else{const e=this.hasFocus?this.wwComputedStyle.fontFamily:this.lang.toolbar.font;this.util.changeTxt(t,e),this.util.changeTxt(n,this.hasFocus?this.lang.toolbar.font+" ("+e+")":e)}return!1},on:function(){const e=this.context.font,t=e._fontList,n=e.targetText.textContent;if(n!==e.currentFont){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentFont=n}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value");if(t){const e=this.util.createElement("SPAN");e.style.fontFamily=t,this.nodeChange(e,["font-family"],null,null)}else this.nodeChange(null,["font-family"],["span"],!0);this.submenuOff()}},fontSize:{name:"fontSize",display:"submenu",add:function(e,t){const n=e.context;n.fontSize={targetText:t.querySelector(".txt"),_sizeList:null,currentSize:""};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.fontSize._sizeList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer se-list-font-size";const l=t.fontSize?t.fontSize:[8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72];let o='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(let e,n=0,i=t.fontSizeUnit,s=l.length;n<s;n++)e=l[n],o+='<li><button type="button" class="se-btn-list" data-value="'+e+i+'" title="'+e+i+'" style="font-size:'+e+i+';">'+e+"</button></li>";return o+="</ul></div>",i.innerHTML=o,i},active:function(e){if(e){if(e.style&&e.style.fontSize.length>0)return this.util.changeTxt(this.context.fontSize.targetText,e.style.fontSize),!0}else this.util.changeTxt(this.context.fontSize.targetText,this.hasFocus?this.wwComputedStyle.fontSize:this.lang.toolbar.fontSize);return!1},on:function(){const e=this.context.fontSize,t=e._sizeList,n=e.targetText.textContent;if(n!==e.currentSize){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentSize=n}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value");if(t){const e=this.util.createElement("SPAN");e.style.fontSize=t,this.nodeChange(e,["font-size"],null,null)}else this.nodeChange(null,["font-size"],["span"],!0);this.submenuOff()}},fontColor:l,hiliteColor:o,horizontalRule:{name:"horizontalRule",display:"submenu",add:function(e,t){e.context.horizontalRule={currentHR:null};let n=this.setSubmenu(e);n.querySelector("ul").addEventListener("click",this.horizontalRulePick.bind(e)),e.initMenuTarget(this.name,t,n),n=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer se-list-line",n.innerHTML='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="solid" title="'+t.toolbar.hr_solid+'"><hr style="border-width: 1px 0 0; border-style: solid none none; border-color: black; border-image: initial; height: 1px;" /></button></li><li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="dotted" title="'+t.toolbar.hr_dotted+'"><hr style="border-width: 1px 0 0; border-style: dotted none none; border-color: black; border-image: initial; height: 1px;" /></button></li><li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="dashed" title="'+t.toolbar.hr_dashed+'"><hr style="border-width: 1px 0 0; border-style: dashed none none; border-color: black; border-image: initial; height: 1px;" /></button></li></ul></div>',n},active:function(e){if(e){if(/HR/i.test(e.nodeName))return this.context.horizontalRule.currentHR=e,this.util.hasClass(e,"on")||(this.util.addClass(e,"on"),this.controllersOn("hr",this.util.removeClass.bind(this.util,e,"on"))),!0}else this.util.hasClass(this.context.horizontalRule.currentHR,"on")&&this.controllersOff();return!1},appendHr:function(e){const t=this.util.createElement("HR");return t.className=e,this.focus(),this.insertComponent(t,!1,!0,!1)},horizontalRulePick:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!n&&!/UL/i.test(t.tagName);)n=t.getAttribute("data-value"),t=t.parentNode;if(!n)return;const i=this.plugins.horizontalRule.appendHr.call(this,"__se__"+n);i&&(this.setRange(i,0,i,0),this.submenuOff())}},list:{name:"list",display:"submenu",add:function(e,t){const n=e.context;n.list={targetButton:t,_list:null,currentList:"",icons:{bullets:e.icons.list_bullets,number:e.icons.list_number}};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.list._list=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list se-tooltip" data-command="OL" title="'+t.toolbar.orderList+'">'+e.icons.list_number+'</button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="UL" title="'+t.toolbar.unorderList+'">'+e.icons.list_bullets+"</button></li></ul></div>",n},active:function(e){const t=this.context.list.targetButton,n=t.firstElementChild,i=this.util;if(e){if(i.isList(e)){const l=e.nodeName;return t.setAttribute("data-focus",l),i.addClass(t,"active"),/UL/i.test(l)?i.changeElement(n,this.context.list.icons.bullets):i.changeElement(n,this.context.list.icons.number),!0}}else t.removeAttribute("data-focus"),i.changeElement(n,this.context.list.icons.number),i.removeClass(t,"active");return!1},on:function(){const e=this.context.list,t=e._list,n=e.targetButton.getAttribute("data-focus")||"";if(n!==e.currentList){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-command")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentList=n}},editList:function(e,t,n){let i=this.getRange(),l=t||this.getSelectedElementsAndComponents(!1);if(0===l.length){if(t)return;if(i=this.getRange_addLine(i,null),l=this.getSelectedElementsAndComponents(!1),0===l.length)return}const o=this.util;o.sortByDepth(l,!0);let s=l[0],a=l[l.length-1],r=!o.isListCell(s)&&!o.isComponent(s)||s.previousElementSibling?s.previousElementSibling:s.parentNode.previousElementSibling,c=!o.isListCell(a)&&!o.isComponent(a)||a.nextElementSibling?a.nextElementSibling:a.parentNode.nextElementSibling;const d={sc:i.startContainer,so:i.startOffset,ec:i.endContainer,eo:i.endOffset};let u=!0;for(let e=0,t=l.length;e<t;e++)if(!o.isList(o.getRangeFormatElement(l[e],function(t){return this.getRangeFormatElement(t)&&t!==l[e]}.bind(o)))){u=!1;break}if(!u||r&&s.tagName===r.tagName&&e===r.tagName.toUpperCase()||c&&a.tagName===c.tagName&&e===c.tagName.toUpperCase()){const t=r?r.parentNode:r,n=c?c.parentNode:c;r=t&&!o.isWysiwygDiv(t)&&t.nodeName===e?t:r,c=n&&!o.isWysiwygDiv(n)&&n.nodeName===e?n:c;const i=r&&r.tagName===e,s=c&&c.tagName===e;let a=i?r:o.createElement(e),d=null,u=null,h=null,p=null;const g=function(e){return!this.isComponent(e)&&!this.isList(e)}.bind(o);for(let t,n,s,r,c,p,m,f,_,b=0,v=l.length;b<v;b++)if(n=l[b],0!==n.childNodes.length||o._isIgnoreNodeChange(n)){if(r=l[b+1],c=n.parentNode,p=r?r.parentNode:null,s=o.isListCell(n),_=o.isRangeFormatElement(c)?c:null,m=s&&!o.isWysiwygDiv(c)?c.parentNode:c,f=s&&!o.isWysiwygDiv(c)?!r||o.isListCell(m)?c:c.nextSibling:n.nextSibling,t=o.createElement("LI"),o.copyFormatAttributes(t,n),o.isComponent(n)){const e=/^HR$/i.test(n.nodeName);e||(t.innerHTML="<br>"),t.innerHTML+=n.outerHTML,e&&(t.innerHTML+="<br>")}else{const e=n.childNodes;for(;e[0];)t.appendChild(e[0])}a.appendChild(t),r||(u=a),r&&m===p&&!o.isRangeFormatElement(f)||(d||(d=a),i&&r&&m===p||r&&o.isList(p)&&p===c||a.parentNode!==m&&m.insertBefore(a,f)),o.removeItem(n),i&&null===h&&(h=a.children.length-1),r&&(o.getRangeFormatElement(p,g)!==o.getRangeFormatElement(c,g)||o.isList(p)&&o.isList(c)&&o.getElementDepth(p)!==o.getElementDepth(c))&&(a=o.createElement(e)),_&&0===_.children.length&&o.removeItem(_)}else o.removeItem(n);h&&(d=d.children[h]),s&&(p=a.children.length-1,a.innerHTML+=c.innerHTML,u=a.children[p],o.removeItem(c))}else{if(n)for(let e=0,t=l.length;e<t;e++)for(let n=e-1;n>=0;n--)if(l[n].contains(l[e])){l.splice(e,1),e--,t--;break}const t=o.getRangeFormatElement(s),i=t&&t.tagName===e;let a,r;const c=function(e){return!this.isComponent(e)}.bind(o);i||(r=o.createElement(e));for(let t,s,d=0,u=l.length;d<u;d++)s=o.getRangeFormatElement(l[d],c),s&&o.isList(s)&&(t?t!==s?(n&&o.isListCell(s.parentNode)?this.plugins.list._detachNested.call(this,a.f):this.detachRangeFormatElement(a.f[0].parentNode,a.f,r,!1,!0),s=l[d].parentNode,i||(r=o.createElement(e)),t=s,a={r:t,f:[o.getParentElement(l[d],"LI")]}):a.f.push(o.getParentElement(l[d],"LI")):(t=s,a={r:t,f:[o.getParentElement(l[d],"LI")]}),d===u-1&&(n&&o.isListCell(s.parentNode)?this.plugins.list._detachNested.call(this,a.f):this.detachRangeFormatElement(a.f[0].parentNode,a.f,r,!1,!0)))}return this.effectNode=null,d},_detachNested:function(e){const t=e[0],n=e[e.length-1],i=n.nextElementSibling,l=t.parentNode,o=l.parentNode.nextElementSibling,s=l.parentNode.parentNode;for(let t=0,n=e.length;t<n;t++)s.insertBefore(e[t],o);if(i&&l.children.length>0){const e=l.cloneNode(!1),t=l.childNodes,o=this.util.getPositionIndex(i);for(;t[o];)e.appendChild(t[o]);n.appendChild(e)}0===l.children.length&&this.util.removeItem(l),this.util.mergeSameTags(s);const a=this.util.getEdgeChildNodes(t,n);return{cc:t.parentNode,sc:a.sc,ec:a.ec}},editInsideList:function(e,t){const n=(t=t||this.getSelectedElements().filter(function(e){return this.isListCell(e)}.bind(this.util))).length;if(0===n||!e&&!this.util.isListCell(t[0].previousElementSibling)&&!this.util.isListCell(t[n-1].nextElementSibling))return{sc:t[0],so:0,ec:t[n-1],eo:1};let i=t[0].parentNode,l=t[n-1],o=null;if(e){if(i!==l.parentNode&&this.util.isList(l.parentNode.parentNode)&&l.nextElementSibling)for(l=l.nextElementSibling;l;)t.push(l),l=l.nextElementSibling;o=this.plugins.list.editList.call(this,i.nodeName.toUpperCase(),t,!0)}else{let e=this.util.createElement(i.nodeName),s=t[0].previousElementSibling,a=l.nextElementSibling;const r={s:null,e:null,sl:i,el:i};for(let l,o=0,c=n;o<c;o++)l=t[o],l.parentNode!==i&&(this.plugins.list._insiedList.call(this,i,e,s,a,r),i=l.parentNode,e=this.util.createElement(i.nodeName)),s=l.previousElementSibling,a=l.nextElementSibling,e.appendChild(l);this.plugins.list._insiedList.call(this,i,e,s,a,r);const c=this.util.getNodeFromPath(r.s,r.sl),d=this.util.getNodeFromPath(r.e,r.el);o={sc:c,so:0,ec:d,eo:d.textContent.length}}return o},_insiedList:function(e,t,n,i,l){let o=!1;if(n&&t.tagName===n.tagName){const e=t.children;for(;e[0];)n.appendChild(e[0]);t=n,o=!0}if(i&&t.tagName===i.tagName){const e=i.children;for(;e[0];)t.appendChild(e[0]);const n=i.nextElementSibling;i.parentNode.removeChild(i),i=n}if(!o){this.util.isListCell(n)&&(e=n,i=null),e.insertBefore(t,i),l.s||(l.s=this.util.getNodePath(t.firstElementChild.firstChild,e,null),l.sl=e);const o=e.contains(l.sl)?this.util.getNodePath(l.sl,e):null;l.e=this.util.getNodePath(t.lastElementChild.firstChild,e,null),l.el=e,this.util.mergeSameTags(e,[l.s,l.e,o],!1),this.util.mergeNestedTags(e),o&&(l.sl=this.util.getNodeFromPath(o,e))}return t},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n="";for(;!n&&!/^UL$/i.test(t.tagName);)n=t.getAttribute("data-command"),t=t.parentNode;if(!n)return;const i=this.plugins.list.editList.call(this,n,null,!1);i&&this.setRange(i.sc,i.so,i.ec,i.eo),this.submenuOff(),this.history.push(!1)}},table:{name:"table",display:"submenu",add:function(e,t){const n=e.context;let i=n.table={_element:null,_tdElement:null,_trElement:null,_trElements:null,_tableXY:[],_maxWidth:!0,_fixedColumn:!1,_rtl:e.options.rtl,cellControllerTop:"top"===e.options.tableCellControllerPosition,resizeText:null,headerButton:null,mergeButton:null,splitButton:null,splitMenu:null,maxText:e.lang.controller.maxSize,minText:e.lang.controller.minSize,_physical_cellCnt:0,_logical_cellCnt:0,_rowCnt:0,_rowIndex:0,_physical_cellIndex:0,_logical_cellIndex:0,_current_colSpan:0,_current_rowSpan:0,icons:{expansion:e.icons.expansion,reduction:e.icons.reduction}},l=this.setSubmenu(e),o=l.querySelector(".se-controller-table-picker");i.tableHighlight=l.querySelector(".se-table-size-highlighted"),i.tableUnHighlight=l.querySelector(".se-table-size-unhighlighted"),i.tableDisplay=l.querySelector(".se-table-size-display"),e.options.rtl&&(i.tableHighlight.style.left="167px");let s=this.setController_table(e);i.tableController=s,i.resizeButton=s.querySelector("._se_table_resize"),i.resizeText=s.querySelector("._se_table_resize > span > span"),i.columnFixedButton=s.querySelector("._se_table_fixed_column"),i.headerButton=s.querySelector("._se_table_header");let a=this.setController_tableEditor(e,i.cellControllerTop);i.resizeDiv=a,i.splitMenu=a.querySelector(".se-btn-group-sub"),i.mergeButton=a.querySelector("._se_table_merge_button"),i.splitButton=a.querySelector("._se_table_split_button"),i.insertRowAboveButton=a.querySelector("._se_table_insert_row_a"),i.insertRowBelowButton=a.querySelector("._se_table_insert_row_b"),o.addEventListener("mousemove",this.onMouseMove_tablePicker.bind(e,i)),o.addEventListener("click",this.appendTable.bind(e)),a.addEventListener("click",this.onClick_tableController.bind(e)),s.addEventListener("click",this.onClick_tableController.bind(e)),e.initMenuTarget(this.name,t,l),n.element.relative.appendChild(a),n.element.relative.appendChild(s),l=null,o=null,a=null,s=null,i=null},setSubmenu:function(e){const t=e.util.createElement("DIV");return t.className="se-submenu se-selector-table",t.innerHTML='<div class="se-table-size"><div class="se-table-size-picker se-controller-table-picker"></div><div class="se-table-size-highlighted"></div><div class="se-table-size-unhighlighted"></div></div><div class="se-table-size-display">1 x 1</div>',t},setController_table:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-table",i.innerHTML='<div><div class="se-btn-group"><button type="button" data-command="resize" class="se-btn se-tooltip _se_table_resize">'+n.expansion+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.maxSize+'</span></span></button><button type="button" data-command="layout" class="se-btn se-tooltip _se_table_fixed_column">'+n.fixed_column_width+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.fixedColumnWidth+'</span></span></button><button type="button" data-command="header" class="se-btn se-tooltip _se_table_header">'+n.table_header+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.tableHeader+'</span></span></button><button type="button" data-command="remove" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},setController_tableEditor:function(e,t){const n=e.lang,i=e.icons,l=e.util.createElement("DIV");return l.className="se-controller se-controller-table-cell",l.innerHTML=(t?"":'<div class="se-arrow se-arrow-up"></div>')+'<div class="se-btn-group"><button type="button" data-command="insert" data-value="row" data-option="up" class="se-btn se-tooltip _se_table_insert_row_a">'+i.insert_row_above+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertRowAbove+'</span></span></button><button type="button" data-command="insert" data-value="row" data-option="down" class="se-btn se-tooltip _se_table_insert_row_b">'+i.insert_row_below+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertRowBelow+'</span></span></button><button type="button" data-command="delete" data-value="row" class="se-btn se-tooltip">'+i.delete_row+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.deleteRow+'</span></span></button><button type="button" data-command="merge" class="_se_table_merge_button se-btn se-tooltip" disabled>'+i.merge_cell+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.mergeCells+'</span></span></button></div><div class="se-btn-group" style="padding-top: 0;"><button type="button" data-command="insert" data-value="cell" data-option="left" class="se-btn se-tooltip">'+i.insert_column_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertColumnBefore+'</span></span></button><button type="button" data-command="insert" data-value="cell" data-option="right" class="se-btn se-tooltip">'+i.insert_column_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertColumnAfter+'</span></span></button><button type="button" data-command="delete" data-value="cell" class="se-btn se-tooltip">'+i.delete_column+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.deleteColumn+'</span></span></button><button type="button" data-command="onsplit" class="_se_table_split_button se-btn se-tooltip">'+i.split_cell+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.splitCells+'</span></span></button><div class="se-btn-group-sub sun-editor-common se-list-layer se-table-split"><div class="se-list-inner"><ul class="se-list-basic"><li class="se-btn-list" data-command="split" data-value="vertical" style="line-height:32px;" title="'+n.controller.VerticalSplit+'">'+n.controller.VerticalSplit+'</li><li class="se-btn-list" data-command="split" data-value="horizontal" style="line-height:32px;" title="'+n.controller.HorizontalSplit+'">'+n.controller.HorizontalSplit+"</li></ul></div></div></div>",l},appendTable:function(){const e=this.util.createElement("TABLE"),t=this.plugins.table.createCells,n=this.context.table._tableXY[0];let i=this.context.table._tableXY[1],l="<tbody>";for(;i>0;)l+="<tr>"+t.call(this,"td",n)+"</tr>",--i;l+="</tbody>",e.innerHTML=l;if(this.insertComponent(e,!1,!0,!1)){const t=e.querySelector("td div");this.setRange(t,0,t,0),this.plugins.table.reset_table_picker.call(this)}},createCells:function(e,t,n){if(e=e.toLowerCase(),n){const t=this.util.createElement(e);return t.innerHTML="<div><br></div>",t}{let n="";for(;t>0;)n+="<"+e+"><div><br></div></"+e+">",t--;return n}},onMouseMove_tablePicker:function(e,t){t.stopPropagation();let n=this._w.Math.ceil(t.offsetX/18),i=this._w.Math.ceil(t.offsetY/18);n=n<1?1:n,i=i<1?1:i,e._rtl&&(e.tableHighlight.style.left=18*n-13+"px",n=11-n),e.tableHighlight.style.width=n+"em",e.tableHighlight.style.height=i+"em",this.util.changeTxt(e.tableDisplay,n+" x "+i),e._tableXY=[n,i]},reset_table_picker:function(){if(!this.context.table.tableHighlight)return;const e=this.context.table.tableHighlight.style,t=this.context.table.tableUnHighlight.style;e.width="1em",e.height="1em",t.width="10em",t.height="10em",this.util.changeTxt(this.context.table.tableDisplay,"1 x 1"),this.submenuOff()},init:function(){const e=this.context.table,t=this.plugins.table;if(t._removeEvents.call(this),t._selectedTable){const e=t._selectedTable.querySelectorAll(".se-table-selected-cell");for(let t=0,n=e.length;t<n;t++)this.util.removeClass(e[t],"se-table-selected-cell")}t._toggleEditor.call(this,!0),e._element=null,e._tdElement=null,e._trElement=null,e._trElements=null,e._tableXY=[],e._maxWidth=!0,e._fixedColumn=!1,e._physical_cellCnt=0,e._logical_cellCnt=0,e._rowCnt=0,e._rowIndex=0,e._physical_cellIndex=0,e._logical_cellIndex=0,e._current_colSpan=0,e._current_rowSpan=0,t._shift=!1,t._selectedCells=null,t._selectedTable=null,t._ref=null,t._fixedCell=null,t._selectedCell=null,t._fixedCellName=null},call_controller_tableEdit:function(e){const t=this.plugins.table,n=this.context.table;if(!this.getSelection().isCollapsed&&!t._selectedCell)return this.controllersOff(),void this.util.removeClass(e,"se-table-selected-cell");const i=n._element||this.plugins.table._selectedTable||this.util.getParentElement(e,"TABLE");n._maxWidth=this.util.hasClass(i,"se-table-size-100")||"100%"===i.style.width||!i.style.width&&!this.util.hasClass(i,"se-table-size-auto"),n._fixedColumn=this.util.hasClass(i,"se-table-layout-fixed")||"fixed"===i.style.tableLayout,t.setTableStyle.call(this,n._maxWidth?"width|column":"width"),t.setPositionControllerTop.call(this,i),t.setPositionControllerDiv.call(this,e,t._shift),t._shift||this.controllersOn(n.resizeDiv,n.tableController,t.init.bind(this),e,"table")},setPositionControllerTop:function(e){this.setControllerPosition(this.context.table.tableController,e,"top",{left:0,top:0})},setPositionControllerDiv:function(e,t){const n=this.context.table,i=n.resizeDiv;this.plugins.table.setCellInfo.call(this,e,t),n.cellControllerTop?this.setControllerPosition(i,n._element,"top",{left:n.tableController.offsetWidth,top:0}):this.setControllerPosition(i,e,"bottom",{left:0,top:0})},setCellInfo:function(e,t){const n=this.context.table,i=n._element=this.plugins.table._selectedTable||this.util.getParentElement(e,"TABLE");if(/THEAD/i.test(i.firstElementChild.nodeName)?this.util.addClass(n.headerButton,"active"):this.util.removeClass(n.headerButton,"active"),t||0===n._physical_cellCnt){n._tdElement!==e&&(n._tdElement=e,n._trElement=e.parentNode);const t=n._trElements=i.rows,l=e.cellIndex;let o=0;for(let e=0,n=t[0].cells,i=t[0].cells.length;e<i;e++)o+=n[e].colSpan;const s=n._rowIndex=n._trElement.rowIndex;n._rowCnt=t.length,n._physical_cellCnt=n._trElement.cells.length,n._logical_cellCnt=o,n._physical_cellIndex=l,n._current_colSpan=n._tdElement.colSpan-1,n._current_rowSpan,n._trElement.cells[l].rowSpan;let a=[],r=[];for(let e,i,o=0;o<=s;o++){e=t[o].cells,i=0;for(let t,c,d,u,h=0,p=e.length;h<p;h++){if(t=e[h],c=t.colSpan-1,d=t.rowSpan-1,u=h+i,r.length>0)for(let e,t=0;t<r.length;t++)e=r[t],e.row>o||(u>=e.index?(i+=e.cs,u+=e.cs,e.rs-=1,e.row=o+1,e.rs<1&&(r.splice(t,1),t--)):h===p-1&&(e.rs-=1,e.row=o+1,e.rs<1&&(r.splice(t,1),t--)));if(o===s&&h===l){n._logical_cellIndex=u;break}d>0&&a.push({index:u,cs:c+1,rs:d,row:-1}),i+=c}r=r.concat(a).sort((function(e,t){return e.index-t.index})),a=[]}a=null,r=null}},editTable:function(e,t){const n=this.plugins.table,i=this.context.table,l=i._element,o="row"===e;if(o){const e=i._trElement.parentNode;if(/^THEAD$/i.test(e.nodeName)){if("up"===t)return;if(!e.nextElementSibling||!/^TBODY$/i.test(e.nextElementSibling.nodeName))return void(l.innerHTML+="<tbody><tr>"+n.createCells.call(this,"td",i._logical_cellCnt,!1)+"</tr></tbody>")}}if(n._ref){const e=i._tdElement,l=n._selectedCells;if(o)if(t)n.setCellInfo.call(this,"up"===t?l[0]:l[l.length-1],!0),n.editRow.call(this,t,e);else{let e=l[0].parentNode;const i=[l[0]];for(let t,n=1,o=l.length;n<o;n++)t=l[n],e!==t.parentNode&&(i.push(t),e=t.parentNode);for(let e=0,l=i.length;e<l;e++)n.setCellInfo.call(this,i[e],!0),n.editRow.call(this,t)}else{const i=l[0].parentNode;if(t){let o=null;for(let e=0,t=l.length-1;e<t;e++)if(i!==l[e+1].parentNode){o=l[e];break}n.setCellInfo.call(this,"left"===t?l[0]:o||l[0],!0),n.editCell.call(this,t,e)}else{const e=[l[0]];for(let t,n=1,o=l.length;n<o&&(t=l[n],i===t.parentNode);n++)e.push(t);for(let i=0,l=e.length;i<l;i++)n.setCellInfo.call(this,e[i],!0),n.editCell.call(this,t)}}t||n.init.call(this)}else n[o?"editRow":"editCell"].call(this,t);if(!t){const e=l.children;for(let t=0;t<e.length;t++)0===e[t].children.length&&(this.util.removeItem(e[t]),t--);0===l.children.length&&this.util.removeItem(l)}},editRow:function(e,t){const n=this.context.table,i=!e,l="up"===e,o=n._rowIndex,s=i||l?o:o+n._current_rowSpan+1,a=i?-1:1,r=n._trElements;let c=n._logical_cellCnt;for(let e,t=0,n=o+(i?-1:0);t<=n;t++){if(e=r[t].cells,0===e.length)return;for(let n,i,l=0,o=e.length;l<o;l++)n=e[l].rowSpan,i=e[l].colSpan,n<2&&i<2||n+t>s&&s>t&&(e[l].rowSpan=n+a,c-=i)}if(i){const e=r[o+1];if(e){const t=[];let n=r[o].cells,i=0;for(let e,l,o=0,s=n.length;o<s;o++)e=n[o],l=o+i,i+=e.colSpan-1,e.rowSpan>1&&(e.rowSpan-=1,t.push({cell:e.cloneNode(!1),index:l}));if(t.length>0){let l=t.shift();n=e.cells,i=0;for(let o,s,a=0,r=n.length;a<r&&(o=n[a],s=a+i,i+=o.colSpan-1,!(s>=l.index)||(a--,i--,i+=l.cell.colSpan-1,e.insertBefore(l.cell,o),l=t.shift(),l));a++);if(l){e.appendChild(l.cell);for(let n=0,i=t.length;n<i;n++)e.appendChild(t[n].cell)}}}n._element.deleteRow(s)}else{n._element.insertRow(s).innerHTML=this.plugins.table.createCells.call(this,"td",c,!1)}i?this.controllersOff():this.plugins.table.setPositionControllerDiv.call(this,t||n._tdElement,!0)},editCell:function(e,t){const n=this.context.table,i=this.util,l=!e,o="left"===e,s=n._current_colSpan,a=l||o?n._logical_cellIndex:n._logical_cellIndex+s+1,r=n._trElements;let c=[],d=[],u=0;const h=[],p=[];for(let e,t,o,g,m,f,_=0,b=n._rowCnt;_<b;_++){e=r[_],t=a,m=!1,o=e.cells,f=0;for(let e,n,r,g,b=0,v=o.length;b<v&&(e=o[b],e);b++)if(n=e.rowSpan-1,r=e.colSpan-1,l){if(g=b+f,d.length>0){const e=!o[b+1];for(let t,n=0;n<d.length;n++)t=d[n],t.row>_||(g>=t.index?(f+=t.cs,g=b+f,t.rs-=1,t.row=_+1,t.rs<1&&(d.splice(n,1),n--)):e&&(t.rs-=1,t.row=_+1,t.rs<1&&(d.splice(n,1),n--)))}n>0&&c.push({rs:n,cs:r+1,index:g,row:-1}),g>=t&&g+r<=t+s?h.push(e):g<=t+s&&g+r>=t?e.colSpan-=i.getOverlapRangeAtIndex(a,a+s,g,g+r):n>0&&(g<t||g+r>t+s)&&p.push({cell:e,i:_,rs:_+n}),f+=r}else{if(b>=t)break;if(r>0){if(u<1&&r+b>=t){e.colSpan+=1,t=null,u=n+1;break}t-=r}if(!m){for(let e,n=0;n<d.length;n++)e=d[n],t-=e.cs,e.rs-=1,e.rs<1&&(d.splice(n,1),n--);m=!0}}if(d=d.concat(c).sort((function(e,t){return e.index-t.index})),c=[],!l){if(u>0){u-=1;continue}null!==t&&o.length>0&&(g=this.plugins.table.createCells.call(this,o[0].nodeName,0,!0),g=e.insertBefore(g,o[t]))}}if(l){let e,t;for(let n,l=0,o=h.length;l<o;l++)n=h[l].parentNode,i.removeItem(h[l]),0===n.cells.length&&(e||(e=i.getArrayIndex(r,n)),t=i.getArrayIndex(r,n),i.removeItem(n));for(let n,l=0,o=p.length;l<o;l++)n=p[l],n.cell.rowSpan=i.getOverlapRangeAtIndex(e,t,n.i,n.rs);this.controllersOff()}else this.plugins.table.setPositionControllerDiv.call(this,t||n._tdElement,!0)},_closeSplitMenu:null,openSplitMenu:function(){this.util.addClass(this.context.table.splitButton,"on"),this.context.table.splitMenu.style.display="inline-table",this.plugins.table._closeSplitMenu=function(){this.util.removeClass(this.context.table.splitButton,"on"),this.context.table.splitMenu.style.display="none",this.removeDocEvent("click",this.plugins.table._closeSplitMenu),this.plugins.table._closeSplitMenu=null}.bind(this),this.addDocEvent("click",this.plugins.table._closeSplitMenu)},splitCells:function(e){const t=this.util,n="vertical"===e,i=this.context.table,l=i._tdElement,o=i._trElements,s=i._trElement,a=i._logical_cellIndex,r=i._rowIndex,c=this.plugins.table.createCells.call(this,l.nodeName,0,!0);if(n){const e=l.colSpan;if(c.rowSpan=l.rowSpan,e>1)c.colSpan=this._w.Math.floor(e/2),l.colSpan=e-c.colSpan,s.insertBefore(c,l.nextElementSibling);else{let t=[],n=[];for(let s,r,c=0,d=i._rowCnt;c<d;c++){s=o[c].cells,r=0;for(let i,o,d,u,h=0,p=s.length;h<p;h++){if(i=s[h],o=i.colSpan-1,d=i.rowSpan-1,u=h+r,n.length>0)for(let e,t=0;t<n.length;t++)e=n[t],e.row>c||(u>=e.index?(r+=e.cs,u+=e.cs,e.rs-=1,e.row=c+1,e.rs<1&&(n.splice(t,1),t--)):h===p-1&&(e.rs-=1,e.row=c+1,e.rs<1&&(n.splice(t,1),t--)));if(u<=a&&d>0&&t.push({index:u,cs:o+1,rs:d,row:-1}),i!==l&&u<=a&&u+o>=a+e-1){i.colSpan+=1;break}if(u>a)break;r+=o}n=n.concat(t).sort((function(e,t){return e.index-t.index})),t=[]}s.insertBefore(c,l.nextElementSibling)}}else{const e=l.rowSpan;if(c.colSpan=l.colSpan,e>1){c.rowSpan=this._w.Math.floor(e/2);const n=e-c.rowSpan,i=[],r=t.getArrayIndex(o,s)+n;for(let e,t,n=0;n<r;n++){e=o[n].cells,t=0;for(let l,o,s,c=0,d=e.length;c<d&&(s=c+t,!(s>=a));c++)l=e[c],o=l.rowSpan-1,o>0&&o+n>=r&&s<a&&i.push({index:s,cs:l.colSpan}),t+=l.colSpan-1}const d=o[r],u=d.cells;let h=i.shift();for(let e,t,n,l,o=0,s=u.length,r=0;o<s;o++){if(n=o+r,e=u[o],t=e.colSpan-1,l=n+t+1,h&&l>=h.index&&(r+=h.cs,l+=h.cs,h=i.shift()),l>=a||o===s-1){d.insertBefore(c,e.nextElementSibling);break}r+=t}l.rowSpan=n}else{c.rowSpan=l.rowSpan;const e=t.createElement("TR");e.appendChild(c);for(let e,t=0;t<r;t++){if(e=o[t].cells,0===e.length)return;for(let n=0,i=e.length;n<i;n++)t+e[n].rowSpan-1>=r&&(e[n].rowSpan+=1)}const n=i._physical_cellIndex,a=s.cells;for(let e=0,t=a.length;e<t;e++)e!==n&&(a[e].rowSpan+=1);s.parentNode.insertBefore(e,s.nextElementSibling)}}this.focusEdge(l),this.plugins.table.setPositionControllerDiv.call(this,l,!0)},mergeCells:function(){const e=this.plugins.table,t=this.context.table,n=this.util,i=e._ref,l=e._selectedCells,o=l[0];let s=null,a=null,r=i.ce-i.cs+1,c=i.re-i.rs+1,d="",u=null;for(let e,t,i=1,o=l.length;i<o;i++){e=l[i],u!==e.parentNode&&(u=e.parentNode),t=e.children;for(let e=0,i=t.length;e<i;e++)n.isFormatElement(t[e])&&n.onlyZeroWidthSpace(t[e].textContent)&&n.removeItem(t[e]);d+=e.innerHTML,n.removeItem(e),0===u.cells.length&&(s?a=u:s=u,c-=1)}if(s){const e=t._trElements,i=n.getArrayIndex(e,s),l=n.getArrayIndex(e,a||s),o=[];for(let t,s=0;s<=l;s++)if(t=e[s].cells,0!==t.length)for(let e,o,a=0,r=t.length;a<r;a++)e=t[a],o=e.rowSpan-1,o>0&&s+o>=i&&(e.rowSpan-=n.getOverlapRangeAtIndex(i,l,s,s+o));else o.push(e[s]);for(let e=0,t=o.length;e<t;e++)n.removeItem(o[e])}o.innerHTML+=d,o.colSpan=r,o.rowSpan=c,this.controllersOff(),e.setActiveButton.call(this,!0,!1),e.call_controller_tableEdit.call(this,o),n.addClass(o,"se-table-selected-cell"),this.focusEdge(o)},toggleHeader:function(){const e=this.util,t=this.context.table.headerButton,n=e.hasClass(t,"active"),i=this.context.table._element;if(n)e.removeItem(i.querySelector("thead"));else{const t=e.createElement("THEAD");t.innerHTML="<tr>"+this.plugins.table.createCells.call(this,"th",this.context.table._logical_cellCnt,!1)+"</tr>",i.insertBefore(t,i.firstElementChild)}e.toggleClass(t,"active"),/TH/i.test(this.context.table._tdElement.nodeName)?this.controllersOff():this.plugins.table.setPositionControllerDiv.call(this,this.context.table._tdElement,!1)},setTableStyle:function(e){const t=this.context.table,n=t._element;let i,l,o,s;e.indexOf("width")>-1&&(i=t.resizeButton.firstElementChild,l=t.resizeText,t._maxWidth?(o=t.icons.reduction,s=t.minText,t.columnFixedButton.style.display="block",this.util.removeClass(n,"se-table-size-auto"),this.util.addClass(n,"se-table-size-100")):(o=t.icons.expansion,s=t.maxText,t.columnFixedButton.style.display="none",this.util.removeClass(n,"se-table-size-100"),this.util.addClass(n,"se-table-size-auto")),this.util.changeElement(i,o),this.util.changeTxt(l,s)),e.indexOf("column")>-1&&(t._fixedColumn?(this.util.removeClass(n,"se-table-layout-auto"),this.util.addClass(n,"se-table-layout-fixed"),this.util.addClass(t.columnFixedButton,"active")):(this.util.removeClass(n,"se-table-layout-fixed"),this.util.addClass(n,"se-table-layout-auto"),this.util.removeClass(t.columnFixedButton,"active")))},setActiveButton:function(e,t){const n=this.context.table;/^TH$/i.test(e.nodeName)?(n.insertRowAboveButton.setAttribute("disabled",!0),n.insertRowBelowButton.setAttribute("disabled",!0)):(n.insertRowAboveButton.removeAttribute("disabled"),n.insertRowBelowButton.removeAttribute("disabled")),t&&e!==t?(n.splitButton.setAttribute("disabled",!0),n.mergeButton.removeAttribute("disabled")):(n.splitButton.removeAttribute("disabled"),n.mergeButton.setAttribute("disabled",!0))},_bindOnSelect:null,_bindOffSelect:null,_bindOffShift:null,_selectedCells:null,_shift:!1,_fixedCell:null,_fixedCellName:null,_selectedCell:null,_selectedTable:null,_ref:null,_toggleEditor:function(e){this.context.element.wysiwyg.setAttribute("contenteditable",e),e?this.util.removeClass(this.context.element.wysiwyg,"se-disabled"):this.util.addClass(this.context.element.wysiwyg,"se-disabled")},_offCellMultiSelect:function(e){e.stopPropagation();const t=this.plugins.table;t._shift?t._initBind&&(this._wd.removeEventListener("touchmove",t._initBind),t._initBind=null):(t._removeEvents.call(this),t._toggleEditor.call(this,!0)),t._fixedCell&&t._selectedTable&&(t.setActiveButton.call(this,t._fixedCell,t._selectedCell),t.call_controller_tableEdit.call(this,t._selectedCell||t._fixedCell),t._selectedCells=t._selectedTable.querySelectorAll(".se-table-selected-cell"),t._selectedCell&&t._fixedCell&&this.focusEdge(t._selectedCell),t._shift||(t._fixedCell=null,t._selectedCell=null,t._fixedCellName=null))},_onCellMultiSelect:function(e){this._antiBlur=!0;const t=this.plugins.table,n=this.util.getParentElement(e.target,this.util.isCell);if(t._shift)n===t._fixedCell?t._toggleEditor.call(this,!0):t._toggleEditor.call(this,!1);else if(!t._ref){if(n===t._fixedCell)return;t._toggleEditor.call(this,!1)}n&&n!==t._selectedCell&&t._fixedCellName===n.nodeName&&t._selectedTable===this.util.getParentElement(n,"TABLE")&&(t._selectedCell=n,t._setMultiCells.call(this,t._fixedCell,n))},_setMultiCells:function(e,t){const n=this.plugins.table,i=n._selectedTable.rows,l=this.util,o=n._selectedTable.querySelectorAll(".se-table-selected-cell");for(let e=0,t=o.length;e<t;e++)l.removeClass(o[e],"se-table-selected-cell");if(e===t&&(l.addClass(e,"se-table-selected-cell"),!n._shift))return;let s=!0,a=[],r=[];const c=n._ref={_i:0,cs:null,ce:null,rs:null,re:null};for(let n,o,d=0,u=i.length;d<u;d++){n=i[d].cells,o=0;for(let i,u,h,p,g=0,m=n.length;g<m;g++){if(i=n[g],h=i.colSpan-1,p=i.rowSpan-1,u=g+o,a.length>0)for(let e,t=0;t<a.length;t++)e=a[t],e.row>d||(u>=e.index?(o+=e.cs,u+=e.cs,e.rs-=1,e.row=d+1,e.rs<1&&(a.splice(t,1),t--)):g===m-1&&(e.rs-=1,e.row=d+1,e.rs<1&&(a.splice(t,1),t--)));if(s){if(i!==e&&i!==t||(c.cs=null!==c.cs&&c.cs<u?c.cs:u,c.ce=null!==c.ce&&c.ce>u+h?c.ce:u+h,c.rs=null!==c.rs&&c.rs<d?c.rs:d,c.re=null!==c.re&&c.re>d+p?c.re:d+p,c._i+=1),2===c._i){s=!1,a=[],r=[],d=-1;break}}else if(l.getOverlapRangeAtIndex(c.cs,c.ce,u,u+h)&&l.getOverlapRangeAtIndex(c.rs,c.re,d,d+p)){const e=c.cs<u?c.cs:u,t=c.ce>u+h?c.ce:u+h,n=c.rs<d?c.rs:d,o=c.re>d+p?c.re:d+p;if(c.cs!==e||c.ce!==t||c.rs!==n||c.re!==o){c.cs=e,c.ce=t,c.rs=n,c.re=o,d=-1,a=[],r=[];break}l.addClass(i,"se-table-selected-cell")}p>0&&r.push({index:u,cs:h+1,rs:p,row:-1}),o+=i.colSpan-1}a=a.concat(r).sort((function(e,t){return e.index-t.index})),r=[]}},_removeEvents:function(){const e=this.plugins.table;e._initBind&&(this._wd.removeEventListener("touchmove",e._initBind),e._initBind=null),e._bindOnSelect&&(this._wd.removeEventListener("mousedown",e._bindOnSelect),this._wd.removeEventListener("mousemove",e._bindOnSelect),e._bindOnSelect=null),e._bindOffSelect&&(this._wd.removeEventListener("mouseup",e._bindOffSelect),e._bindOffSelect=null),e._bindOffShift&&(this._wd.removeEventListener("keyup",e._bindOffShift),e._bindOffShift=null)},_initBind:null,onTableCellMultiSelect:function(e,t){const n=this.plugins.table;n._removeEvents.call(this),this.controllersOff(),n._shift=t,n._fixedCell=e,n._fixedCellName=e.nodeName,n._selectedTable=this.util.getParentElement(e,"TABLE");const i=n._selectedTable.querySelectorAll(".se-table-selected-cell");for(let e=0,t=i.length;e<t;e++)this.util.removeClass(i[e],"se-table-selected-cell");this.util.addClass(e,"se-table-selected-cell"),n._bindOnSelect=n._onCellMultiSelect.bind(this),n._bindOffSelect=n._offCellMultiSelect.bind(this),t?(n._bindOffShift=function(){this.controllersOn(this.context.table.resizeDiv,this.context.table.tableController,this.plugins.table.init.bind(this),e,"table"),n._ref||this.controllersOff()}.bind(this),this._wd.addEventListener("keyup",n._bindOffShift,!1),this._wd.addEventListener("mousedown",n._bindOnSelect,!1)):this._wd.addEventListener("mousemove",n._bindOnSelect,!1),this._wd.addEventListener("mouseup",n._bindOffSelect,!1),n._initBind=n.init.bind(this),this._wd.addEventListener("touchmove",n._initBind,!1)},onClick_tableController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")?e.target:e.target.parentNode;if(t.getAttribute("disabled"))return;const n=t.getAttribute("data-command"),i=t.getAttribute("data-value"),l=t.getAttribute("data-option"),o=this.plugins.table;if("function"==typeof o._closeSplitMenu&&(o._closeSplitMenu(),"onsplit"===n))return;if(!n)return;e.preventDefault();const s=this.context.table;switch(n){case"insert":case"delete":o.editTable.call(this,i,l);break;case"header":o.toggleHeader.call(this);break;case"onsplit":o.openSplitMenu.call(this);break;case"split":o.splitCells.call(this,i);break;case"merge":o.mergeCells.call(this);break;case"resize":s._maxWidth=!s._maxWidth,o.setTableStyle.call(this,"width"),o.setPositionControllerTop.call(this,s._element),o.setPositionControllerDiv.call(this,s._tdElement,o._shift);break;case"layout":s._fixedColumn=!s._fixedColumn,o.setTableStyle.call(this,"column"),o.setPositionControllerTop.call(this,s._element),o.setPositionControllerDiv.call(this,s._tdElement,o._shift);break;case"remove":const e=s._element.parentNode;this.util.removeItem(s._element),this.controllersOff(),e!==this.context.element.wysiwyg&&this.util.removeItemAllParents(e,(function(e){return 0===e.childNodes.length}),null),this.focus()}this.history.push(!1)}},formatBlock:{name:"formatBlock",display:"submenu",add:function(e,t){const n=e.context;n.formatBlock={targetText:t.querySelector(".txt"),targetTooltip:t.parentNode.querySelector(".se-tooltip-text"),_formatList:null,currentFormat:""};let i=this.setSubmenu(e);i.querySelector("ul").addEventListener("click",this.pickUp.bind(e)),n.formatBlock._formatList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.lang.toolbar,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer se-list-format";const l=["p","div","blockquote","pre","h1","h2","h3","h4","h5","h6"],o=t.formats&&0!==t.formats.length?t.formats:l;let s='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,i,a,r,c,d,u=0,h=o.length;u<h;u++)e=o[u],"string"==typeof e&&l.indexOf(e)>-1?(t=e.toLowerCase(),i="blockquote"===t?"range":"pre"===t?"free":"replace",r=/^h/.test(t)?t.match(/\d+/)[0]:"",a=n["tag_"+(r?"h":t)]+r,d="",c=""):(t=e.tag.toLowerCase(),i=e.command,a=e.name||t,d=e.class,c=d?' class="'+d+'"':""),s+='<li><button type="button" class="se-btn-list" data-command="'+i+'" data-value="'+t+'" data-class="'+d+'" title="'+a+'"><'+t+c+">"+a+"</"+t+"></button></li>";return s+="</ul></div>",i.innerHTML=s,i},active:function(e){let t=this.lang.toolbar.formats;const n=this.context.formatBlock.targetText;if(e){if(this.util.isFormatElement(e)){const i=this.context.formatBlock._formatList,l=e.nodeName.toLowerCase(),o=(e.className.match(/(\s|^)__se__format__[^\s]+/)||[""])[0].trim();for(let e,n=0,s=i.length;n<s;n++)if(e=i[n],l===e.getAttribute("data-value")&&o===e.getAttribute("data-class")){t=e.title;break}return this.util.changeTxt(n,t),n.setAttribute("data-value",l),n.setAttribute("data-class",o),!0}}else this.util.changeTxt(n,t);return!1},on:function(){const e=this.context.formatBlock,t=e._formatList,n=e.targetText,i=(n.getAttribute("data-value")||"")+(n.getAttribute("data-class")||"");if(i!==e.currentFormat){for(let e,n=0,l=t.length;n<l;n++)e=t[n],i===e.getAttribute("data-value")+e.getAttribute("data-class")?this.util.addClass(e,"active"):this.util.removeClass(e,"active");e.currentFormat=i}},pickUp:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null,i=null,l=null,o="";for(;!n&&!/UL/i.test(t.tagName);){if(n=t.getAttribute("data-command"),i=t.getAttribute("data-value"),o=t.getAttribute("data-class"),n){l=t.firstChild;break}t=t.parentNode}if(n){if("range"===n){const e=l.cloneNode(!1);this.applyRangeFormatElement(e)}else{let e=this.getRange(),t=this.getSelectedElementsAndComponents(!1);if(0===t.length&&(e=this.getRange_addLine(e,null),t=this.getSelectedElementsAndComponents(!1),0===t.length))return;const s=e.startOffset,a=e.endOffset,r=this.util;let c=t[0],d=t[t.length-1];const u=r.getNodePath(e.startContainer,c,null,null),h=r.getNodePath(e.endContainer,d,null,null),p=this.detachList(t,!1);p.sc&&(c=p.sc),p.ec&&(d=p.ec),this.setRange(r.getNodeFromPath(u,c),s,r.getNodeFromPath(h,d),a);const g=this.getSelectedElementsAndComponents(!1);if("free"===n){const e=g.length-1;let t=g[e].parentNode,n=l.cloneNode(!1);const i=n;for(let i,o,s,a,c,d,u=e,h=!0;u>=0;u--)if(i=g[u],i!==(g[u+1]?g[u+1].parentNode:null)){if(d=r.isComponent(i),o=d?"":i.innerHTML.replace(/(?!>)\s+(?=<)|\n/g," "),s=r.getParentElement(i,(function(e){return e.parentNode===t})),(t!==i.parentNode||d)&&(r.isFormatElement(t)?(t.parentNode.insertBefore(n,t.nextSibling),t=t.parentNode):(t.insertBefore(n,s?s.nextSibling:null),t=i.parentNode),a=n.nextSibling,a&&n.nodeName===a.nodeName&&r.isSameAttributes(n,a)&&(n.innerHTML+="<BR>"+a.innerHTML,r.removeItem(a)),n=l.cloneNode(!1),h=!0),c=n.innerHTML,n.innerHTML=(h||!o||!c||/<br>$/i.test(o)?o:o+"<BR>")+c,0===u){t.insertBefore(n,i),a=i.nextSibling,a&&n.nodeName===a.nodeName&&r.isSameAttributes(n,a)&&(n.innerHTML+="<BR>"+a.innerHTML,r.removeItem(a));const e=n.previousSibling;e&&n.nodeName===e.nodeName&&r.isSameAttributes(n,e)&&(e.innerHTML+="<BR>"+n.innerHTML,r.removeItem(n))}d||r.removeItem(i),o&&(h=!1)}this.setRange(i,0,i,0)}else{for(let e,t,n=0,s=g.length;n<s;n++)e=g[n],e.nodeName.toLowerCase()===i.toLowerCase()&&(e.className.match(/(\s|^)__se__format__[^\s]+/)||[""])[0].trim()===o||r.isComponent(e)||(t=l.cloneNode(!1),r.copyFormatAttributes(t,e),t.innerHTML=e.innerHTML,e.parentNode.replaceChild(t,e)),0===n&&(c=t||e),n===s-1&&(d=t||e),t=null;this.setRange(r.getNodeFromPath(u,c),s,r.getNodeFromPath(h,d),a)}this.history.push(!1)}this.submenuOff()}}},lineHeight:{name:"lineHeight",display:"submenu",add:function(e,t){const n=e.context;n.lineHeight={_sizeList:null,currentSize:-1};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.lineHeight._sizeList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer";const l=t.lineHeights?t.lineHeights:[{text:"1",value:1},{text:"1.15",value:1.15},{text:"1.5",value:1.5},{text:"2",value:2}];let o='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(let e,t=0,n=l.length;t<n;t++)e=l[t],o+='<li><button type="button" class="se-btn-list" data-value="'+e.value+'" title="'+e.text+'">'+e.text+"</button></li>";return o+="</ul></div>",i.innerHTML=o,i},on:function(){const e=this.context.lineHeight,t=e._sizeList,n=this.util.getFormatElement(this.getSelectionNode()),i=n?n.style.lineHeight+"":"";if(i!==e.currentSize){for(let e=0,n=t.length;e<n;e++)i===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentSize=i}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value")||"",n=this.getSelectedElements();for(let e=0,i=n.length;e<i;e++)n[e].style.lineHeight=t;this.submenuOff(),this.history.push(!1)}},template:s,paragraphStyle:{name:"paragraphStyle",display:"submenu",add:function(e,t){const n=e.context;n.paragraphStyle={_classList:null};let i=this.setSubmenu(e);i.querySelector("ul").addEventListener("click",this.pickUp.bind(e)),n.paragraphStyle._classList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.util.createElement("DIV");n.className="se-submenu se-list-layer se-list-format";const i=e.lang.menu,l={spaced:{name:i.spaced,class:"__se__p-spaced",_class:""},bordered:{name:i.bordered,class:"__se__p-bordered",_class:""},neon:{name:i.neon,class:"__se__p-neon",_class:""}},o=t.paragraphStyles&&0!==t.paragraphStyles.length?t.paragraphStyles:["spaced","bordered","neon"];let s='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,n,i,a=0,r=o.length;a<r;a++){if(e=o[a],"string"==typeof e){const t=l[e.toLowerCase()];if(!t)continue;e=t}t=e.name,n=e.class?' class="'+e.class+'"':"",i=e._class,s+='<li><button type="button" class="se-btn-list'+(i?" "+i:"")+'" data-value="'+e.class+'" title="'+t+'"><div'+n+">"+t+"</div></button></li>"}return s+="</ul></div>",n.innerHTML=s,n},on:function(){const e=this.context.paragraphStyle._classList,t=this.util.getFormatElement(this.getSelectionNode());for(let n=0,i=e.length;n<i;n++)this.util.hasClass(t,e[n].getAttribute("data-value"))?this.util.addClass(e[n],"active"):this.util.removeClass(e[n],"active")},pickUp:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!/^UL$/i.test(t.tagName)&&(n=t.getAttribute("data-value"),!n);)t=t.parentNode;if(!n)return;let i=this.getSelectedElements();if(0===i.length&&(this.getRange_addLine(this.getRange(),null),i=this.getSelectedElements(),0===i.length))return;const l=this.util.hasClass(t,"active")?this.util.removeClass.bind(this.util):this.util.addClass.bind(this.util);for(let e=0,t=i.length;e<t;e++)l(i[e],n);this.submenuOff(),this.history.push(!1)}},textStyle:{name:"textStyle",display:"submenu",add:function(e,t){const n=e.context;n.textStyle={_styleList:null};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.textStyle._styleList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.util.createElement("DIV");n.className="se-submenu se-list-layer se-list-format";const i={code:{name:e.lang.menu.code,class:"__se__t-code",tag:"code"},translucent:{name:e.lang.menu.translucent,style:"opacity: 0.5;",tag:"span"},shadow:{name:e.lang.menu.shadow,class:"__se__t-shadow",tag:"span"}},l=t.textStyles?t.textStyles:e._w.Object.keys(i);let o='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,n,s,a,r,c,d=0,u=l.length;d<u;d++){if(e=l[d],s="",r="",a=[],"string"==typeof e){const t=i[e.toLowerCase()];if(!t)continue;e=t}n=e.name,t=e.tag||"span",c=e._class,e.style&&(s+=' style="'+e.style+'"',r+=e.style.replace(/:[^;]+(;|$)\s*/g,","),a.push("style")),e.class&&(s+=' class="'+e.class+'"',r+="."+e.class.trim().replace(/\s+/g,",."),a.push("class")),r=r.replace(/,$/,""),o+='<li><button type="button" class="se-btn-list'+(c?" "+c:"")+'" data-command="'+t+'" data-value="'+r+'" title="'+n+'"><'+t+s+">"+n+"</"+t+"></button></li>"}return o+="</ul></div>",n.innerHTML=o,n},on:function(){const e=this.util,t=this.context.textStyle._styleList,n=this.getSelectionNode();for(let i,l,o,s=0,a=t.length;s<a;s++){i=t[s],l=i.getAttribute("data-value").split(",");for(let t,s,a=0;a<l.length;a++){for(t=n,o=!1;t&&!e.isFormatElement(t)&&!e.isComponent(t);){if(t.nodeName.toLowerCase()===i.getAttribute("data-command").toLowerCase()&&(s=l[a],/^\./.test(s)?e.hasClass(t,s.replace(/^\./,"")):t.style[s])){o=!0;break}t=t.parentNode}if(!o)break}o?e.addClass(i,"active"):e.removeClass(i,"active")}},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null,i=null;for(;!n&&!/UL/i.test(t.tagName);){if(n=t.getAttribute("data-command"),n){i=t.firstChild;break}t=t.parentNode}if(!n)return;const l=i.style.cssText.replace(/:.+(;|$)/g,",").split(",");l.pop();const o=i.classList;for(let e=0,t=o.length;e<t;e++)l.push("."+o[e]);const s=this.util.hasClass(t,"active")?null:i.cloneNode(!1),a=s?null:[i.nodeName];this.nodeChange(s,l,a,!0),this.submenuOff()}},link:u,image:b,video:v,audio:y,math:C,imageGallery:{name:"imageGallery",add:function(e){e.addModule([x.a]);e.context.imageGallery={title:e.lang.toolbar.imageGallery,url:e.options.imageGalleryUrl,header:e.options.imageGalleryHeader,listClass:"se-image-list",itemTemplateHandler:this.drawItems,selectorHandler:this.setImage.bind(e),columnSize:4}},open:function(e){this.plugins.fileBrowser.open.call(this,"imageGallery",e)},drawItems:function(e){const t=e.src.split("/").pop();return'<div class="se-file-item-img"><img src="'+e.src+'" alt="'+(e.alt||t)+'" data-command="pick"><div class="se-file-img-name se-file-name-back"></div><div class="se-file-img-name __se__img_name">'+(e.name||t)+"</div></div>"},setImage:function(e){this.callPlugin("image",function(){const t={name:e.parentNode.querySelector(".__se__img_name").textContent,size:0};this.context.image._altText=e.alt,this.plugins.image.create_image.call(this,e.src,null,this.context.image._origin_w,this.context.image._origin_h,"none",t)}.bind(this),null)}}},S={rtl:{italic:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10.5 15.8" xml:space="preserve"><g><path d="M0.3,0.1c0.3,0,0.5,0,0.7,0c1,0.1,1.7,0.1,2.2,0.1H4L7.2,0l0.2,1.1H7c-0.5,0-1,0.1-1.5,0.3v0.4l0.3,1.9L6,4.4L6.3,6 l0.1,0.4l0.1,0.5c0.1,0.2,0.1,0.4,0.2,0.7s0.1,0.6,0.2,0.9L7,9.1l0.6,2.8l0.3,1.4c0.1,0.4,0.2,0.7,0.4,1c0.4,0.2,0.8,0.3,1.2,0.4 l0.8,0.2l0.2,0.9l-1.1,0c-0.9-0.1-1.5-0.1-1.8-0.1h-2c-0.9,0.1-1.4,0.2-1.5,0.2c-0.1,0-0.2,0-0.3,0H3.4c-0.1,0-0.2,0-0.2,0 l-0.1-0.4c0-0.2-0.1-0.4-0.1-0.6l0.7-0.1c0.4,0,0.8-0.1,1.2-0.2c0-0.1,0-0.2,0-0.3l-0.1-0.5l-0.4-2.4L4,9.6L3.4,6.4 C3.2,5.7,3,4.7,2.7,3.3c0-0.3-0.1-0.5-0.1-0.8C2.5,2.1,2.4,1.9,2.3,1.6C2,1.4,1.6,1.3,1.3,1.2C0.9,1.2,0.5,1.1,0.2,0.9L0,0.4L0,0 L0.3,0.1L0.3,0.1z"/></g></svg>',indent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><g><path d="M15.5,10.1L15.5,10.1c0.1,0,0.3,0.1,0.3,0.3v1.7c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1l-15.2,0 c-0.1,0-0.1,0-0.2-0.1C0,12.2,0,12.2,0,12.1l0-1.7c0-0.1,0-0.1,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C0.3,10.1,15.5,10.1,15.5,10.1z M9.8,6.7c0.1,0,0.1,0,0.2,0.1C10.1,6.9,10.1,7,10.1,7v1.7c0,0.1,0,0.2-0.1,0.2C10,9,9.9,9,9.8,9L0.3,9C0.2,9,0.1,9,0.1,8.9 C0,8.9,0,8.8,0,8.7V7C0,7,0,6.9,0.1,6.8c0.1-0.1,0.1-0.1,0.2-0.1C0.3,6.7,9.8,6.7,9.8,6.7z M0.3,3.4h9.6h0c0.1,0,0.3,0.1,0.3,0.3 v1.7v0c0,0.1-0.1,0.3-0.3,0.3H0.3c-0.1,0-0.1,0-0.2-0.1C0,5.5,0,5.4,0,5.3V3.6c0-0.1,0-0.1,0.1-0.2C0.1,3.4,0.2,3.4,0.3,3.4 L0.3,3.4z M0.3,0l15.2,0c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2V2c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1H0.3 c-0.1,0-0.1,0-0.2-0.1C0,2.1,0,2,0,2l0-1.7c0-0.1,0-0.1,0.1-0.2C0.1,0,0.2,0,0.3,0z"/></g><path d="M13.1,3.5L15.7,6c0.1,0.1,0.1,0.3,0,0.4l-2.5,2.5C13.1,9,13,9,12.9,9c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2V3.7 c0-0.1,0-0.2,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C13,3.4,13.1,3.4,13.1,3.5z"/></g></svg>',outdent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><g><path d="M15.5,10.1L15.5,10.1c0.1,0,0.3,0.1,0.3,0.3v1.7c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1l-15.2,0 c-0.1,0-0.1,0-0.2-0.1C0,12.2,0,12.2,0,12.1l0-1.7c0-0.1,0-0.1,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C0.3,10.1,15.5,10.1,15.5,10.1z M9.8,6.7c0.1,0,0.1,0,0.2,0.1C10.1,6.9,10.1,7,10.1,7v1.7c0,0.1,0,0.2-0.1,0.2C10,9,9.9,9,9.8,9L0.3,9C0.2,9,0.1,9,0.1,8.9 C0,8.9,0,8.8,0,8.7V7C0,7,0,6.9,0.1,6.8c0.1-0.1,0.1-0.1,0.2-0.1C0.3,6.7,9.8,6.7,9.8,6.7z M0.3,3.4h9.6h0c0.1,0,0.3,0.1,0.3,0.3 v1.7v0c0,0.1-0.1,0.3-0.3,0.3H0.3c-0.1,0-0.1,0-0.2-0.1C0,5.5,0,5.4,0,5.3V3.6c0-0.1,0-0.1,0.1-0.2C0.1,3.4,0.2,3.4,0.3,3.4 L0.3,3.4z M0.3,0l15.2,0c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2V2c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1H0.3 c-0.1,0-0.1,0-0.2-0.1C0,2.1,0,2,0,2l0-1.7c0-0.1,0-0.1,0.1-0.2C0.1,0,0.2,0,0.3,0z"/></g><path d="M15.5,3.4c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2v5.1c0,0.1,0,0.1-0.1,0.2C15.6,9,15.5,9,15.5,9 c-0.1,0-0.1,0-0.2-0.1l-2.5-2.5c-0.1-0.1-0.1-0.3,0-0.4l2.5-2.5C15.3,3.4,15.4,3.4,15.5,3.4z"/></g></svg>',list_bullets:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><path d="M12.4,10.7c0,0.9,0.8,1.7,1.7,1.7c0.9,0,1.7-0.8,1.7-1.7C15.7,9.8,15,9,14.1,9c-0.4,0-0.9,0.2-1.2,0.5 C12.5,9.8,12.4,10.2,12.4,10.7C12.4,10.7,12.4,10.7,12.4,10.7z M12.4,6.2c0,0.9,0.8,1.7,1.7,1.7c0.4,0,0.9-0.2,1.2-0.5 c0.3-0.3,0.4-0.7,0.4-1.1c0-0.9-0.7-1.7-1.6-1.7C13.1,4.6,12.4,5.3,12.4,6.2C12.4,6.2,12.4,6.2,12.4,6.2z M0,9.8v1.7 c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1l10.7,0c0,0,0,0,0,0c0.1,0,0.3-0.1,0.3-0.3V9.8c0-0.1,0-0.1-0.1-0.2 C11.1,9.6,11,9.6,11,9.6l-10.7,0c-0.1,0-0.1,0-0.2,0.1C0,9.7,0,9.8,0,9.8L0,9.8z M12.9,2.9c0.3,0.3,0.7,0.5,1.2,0.5 c0.4,0,0.9-0.2,1.2-0.5c0.7-0.7,0.7-1.7,0-2.4C14.9,0.2,14.5,0,14.1,0c-0.4,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.5,0.7-0.5,1.2 C12.4,2.1,12.5,2.6,12.9,2.9z M0,5.3V7c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1H11c0.1,0,0.1,0,0.2-0.1 c0.1-0.1,0.1-0.1,0.1-0.2V5.3c0,0,0,0,0,0c0-0.1-0.1-0.3-0.3-0.3H0.3c-0.1,0-0.1,0-0.2,0.1C0,5.2,0,5.3,0,5.3L0,5.3z M0,0.8v1.7 c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1h10.7c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2V0.8c0-0.1,0-0.1-0.1-0.2 c0-0.1-0.1-0.1-0.2-0.1H0.3c-0.1,0-0.1,0-0.2,0.1C0,0.7,0,0.8,0,0.8L0,0.8z"/></g></svg>',list_number:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M0,11.5l0,1.7c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1H11c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2v-1.7 c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1H0.3c-0.1,0-0.2,0-0.2,0.1C0,11.4,0,11.4,0,11.5L0,11.5z M0,8.7c0,0.1,0,0.1,0.1,0.2 C0.1,8.9,0.2,9,0.3,9H11c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2V7c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1l-10.7,0 c-0.1,0-0.2,0-0.2,0.1C0,6.8,0,6.9,0,7C0,7,0,8.7,0,8.7z M0,2.5v1.7c0,0.1,0,0.1,0.1,0.2c0,0,0.1,0.1,0.2,0.1l10.7,0 c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2V2.4c0-0.1,0-0.1-0.1-0.2c-0.1,0-0.1,0-0.2,0H0.3c-0.1,0-0.1,0-0.2,0 C0,2.3,0,2.4,0,2.5L0,2.5z"/></g><path d="M15.6,14.2c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.4-0.4-0.7-0.4l0.9-1v-0.8h-2.9v1.3h0.9v-0.5h0.9l0,0c-0.1,0.1-0.2,0.2-0.3,0.3 s-0.2,0.3-0.4,0.5l-0.3,0.3l0.2,0.5c0.6,0,0.9,0.1,0.9,0.5c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.1-0.4,0.1c-0.3,0-0.7-0.1-0.9-0.3 l-0.5,0.8c0.4,0.4,0.9,0.6,1.5,0.6c0.4,0,0.9-0.1,1.2-0.4C15.5,15.1,15.6,14.7,15.6,14.2z"/><path d="M15.6,8.7h-0.9v0.5h-1.1c0-0.2,0.2-0.4,0.4-0.5c0.2-0.2,0.4-0.3,0.7-0.4c0.3-0.2,0.5-0.3,0.7-0.6c0.2-0.2,0.3-0.5,0.3-0.8 c0-0.4-0.2-0.8-0.5-1c-0.6-0.4-1.4-0.5-2-0.1c-0.3,0.2-0.5,0.4-0.6,0.7L13.3,7c0.1-0.3,0.4-0.5,0.7-0.5c0.1,0,0.3,0,0.3,0.1 c0.1,0.1,0.1,0.2,0.1,0.3c0,0.2-0.1,0.3-0.2,0.4c-0.2,0.1-0.3,0.3-0.5,0.4c-0.2,0.1-0.4,0.3-0.6,0.4c-0.2,0.2-0.4,0.4-0.5,0.6 c-0.1,0.2-0.2,0.5-0.2,0.8c0,0.2,0,0.3,0,0.5h3.2L15.6,8.7L15.6,8.7z"/><path d="M15.6,3.6h-1V0h-0.9l-1.2,1.1l0.6,0.7c0.2-0.1,0.3-0.3,0.4-0.5l0,0v2.2h-0.9v0.9h3L15.6,3.6L15.6,3.6z"/></svg>',link:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M7.4,9.9l3.1,3.1c0.3,0.3,0.8,0.5,1.3,0.5c0.5,0,0.9-0.2,1.3-0.5c0,0,0,0,0,0c0.7-0.7,0.7-1.9,0-2.6L9.9,7.3 c0-0.1,0-0.2,0-0.3C9.9,7,10,7,10.1,7l2.2-0.2c0.1,0,0.1,0,0.2,0.1l2.1,2.1c0.4,0.4,0.7,0.8,0.9,1.3c0.2,0.5,0.3,1,0.3,1.5 c0,0.5-0.1,1-0.3,1.5c-0.8,2-3.2,3-5.2,2.2c-0.5-0.2-0.9-0.5-1.3-0.9l-2.1-2.1c-0.1,0-0.1-0.1-0.1-0.2L7,10.1C7,10,7,9.9,7.1,9.9 C7.2,9.8,7.3,9.9,7.4,9.9z M1.2,1.1C1.6,0.7,2,0.4,2.5,0.3c1-0.4,2.1-0.4,3.1,0C6,0.4,6.5,0.7,6.8,1.1L9,3.2C9,3.3,9.1,3.3,9,3.4 L8.8,5.6c0,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0L5.3,2.7C5,2.3,4.5,2.1,4,2.1c-0.5,0-0.9,0.2-1.3,0.5c0,0,0,0,0,0 C2,3.4,2,4.5,2.7,5.2l3.1,3.2c0.1,0.1,0.1,0.2,0,0.3c0,0.1-0.1,0.1-0.2,0.1L3.5,9C3.4,9,3.4,9,3.3,8.9L1.2,6.8c0,0,0,0,0,0 C-0.4,5.2-0.4,2.7,1.2,1.1L1.2,1.1z M14.3,6h-2.6c0,0,0,0,0,0c-0.1,0-0.2-0.1-0.2-0.2c0-0.1,0-0.2,0.1-0.3l2.5-0.7 c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0.1,0.1,0.2l0.1,0.8c0,0.1,0,0.1-0.1,0.2C14.5,6,14.4,6,14.3,6L14.3,6z M10.2,4.1 c0,0.1-0.1,0.2-0.2,0.2l0,0c0,0,0,0,0,0C9.8,4.2,9.7,4.1,9.8,4L9.7,1.4c0-0.1,0-0.1,0.1-0.2c0.1,0,0.1,0,0.2,0h0.8 c0.1,0,0.1,0,0.2,0.1c0,0.1,0,0.1,0,0.2L10.2,4.1L10.2,4.1z M1.5,9.7h1.3h1.3c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0,0.2-0.1,0.3l-2.5,0.6 H1.6c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.1-0.2L1.2,9.9c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.1,0.2-0.1L1.5,9.7z M5.6,11.6 C5.6,11.6,5.6,11.6,5.6,11.6c0-0.1,0.1-0.2,0.3-0.1c0,0,0,0,0,0c0.1,0,0.2,0.1,0.2,0.2v2.6c0,0.1,0,0.1-0.1,0.2 c0,0-0.1,0.1-0.2,0.1L5,14.5c-0.1,0-0.1,0-0.2-0.1c0-0.1,0-0.1,0-0.2L5.6,11.6L5.6,11.6z"/></g></svg>',unlink:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M14.6,14.6c1.6-1.6,1.6-4.1,0-5.7l0,0l-3.1-3.1l-1.2,1.6l2.9,2.9c0.4,0.4,0.6,0.9,0.6,1.5c0,1.1-0.9,2.1-2.1,2.1l0,0 c-0.6,0-1.1-0.2-1.5-0.6l-0.4-0.4l-1.7,1l0.8,0.8C10.4,16.2,13,16.2,14.6,14.6L14.6,14.6L14.6,14.6z M3.6,6C3,5.9,2.6,5.5,2.3,5 S1.9,4,2.1,3.4C2.3,2.9,2.6,2.5,3,2.2C3.5,2,4.1,1.9,4.6,2l3.3,1.4l0.5-2L5.1,0.1C4-0.1,2.9,0,2,0.5C1.1,1.1,0.4,1.9,0.2,3 C-0.1,4,0,5.1,0.6,6C1.1,6.9,1.9,7.6,3,7.8l5.4,2l0.5-2L6.2,6.9L3.6,6z"/></g></svg>'},redo:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.59 14.18"><g><path d="M11.58,18.48a6.84,6.84,0,1,1,6.85-6.85s0,.26,0,.67a8,8,0,0,1-.22,1.44l.91-.55a.51.51,0,0,1,.36,0,.45.45,0,0,1,.29.22.47.47,0,0,1,.06.36.45.45,0,0,1-.22.29L17.42,15.3l-.12,0h-.25l-.12-.06-.09-.09-.06-.07,0-.06-.87-2.12a.43.43,0,0,1,0-.37.49.49,0,0,1,.27-.26.41.41,0,0,1,.36,0,.53.53,0,0,1,.27.26l.44,1.09a6.51,6.51,0,0,0,.24-1.36,4.58,4.58,0,0,0,0-.64,5.83,5.83,0,0,0-1.73-4.17,5.88,5.88,0,0,0-8.34,0,5.9,5.9,0,0,0,4.17,10.06.51.51,0,0,1,.33.15.48.48,0,0,1,0,.68.53.53,0,0,1-.33.12Z" transform="translate(-4.48 -4.54)"/></g></svg>',undo:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.59 14.18"><g><path d="M5,14a.43.43,0,0,1-.22-.29.46.46,0,0,1,.06-.36.43.43,0,0,1,.29-.22.56.56,0,0,1,.36,0l.91.55a8.27,8.27,0,0,1-.22-1.45,5.07,5.07,0,0,1,0-.67A6.85,6.85,0,1,1,13,18.47a.44.44,0,0,1-.33-.13.48.48,0,0,1,0-.68.51.51,0,0,1,.33-.15A5.89,5.89,0,0,0,17.15,7.45a5.88,5.88,0,0,0-8.33,0,5.84,5.84,0,0,0-1.73,4.17s0,.25,0,.65a6.49,6.49,0,0,0,.24,1.37l.44-1.09a.57.57,0,0,1,.27-.26.41.41,0,0,1,.36,0,.53.53,0,0,1,.27.26.43.43,0,0,1,0,.37L7.82,15l0,.09-.09.09-.1.07-.06,0H7.28l-.13,0-1.09-.63c-.65-.36-1-.57-1.1-.63Z" transform="translate(-4.49 -4.53)"/></g></svg>',bold:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.76 15.75"><g><path d="M6.4,3.76V19.5h6.76a5.55,5.55,0,0,0,2-.32,4.93,4.93,0,0,0,1.52-1,4.27,4.27,0,0,0,1.48-3.34,3.87,3.87,0,0,0-.69-2.37,5.74,5.74,0,0,0-.71-.83,3.44,3.44,0,0,0-1.1-.65,3.6,3.6,0,0,0,1.58-1.36,3.66,3.66,0,0,0,.53-1.93,3.7,3.7,0,0,0-1.21-2.87,4.65,4.65,0,0,0-3.25-1.1H6.4Zm2.46,6.65V5.57h3.52a4.91,4.91,0,0,1,1.36.15,2.3,2.3,0,0,1,.85.45,2.06,2.06,0,0,1,.74,1.71,2.3,2.3,0,0,1-.78,1.92,2.54,2.54,0,0,1-.86.46,4.7,4.7,0,0,1-1.32.15H8.86Zm0,7.27V12.15H12.7a4.56,4.56,0,0,1,1.38.17,3.43,3.43,0,0,1,.95.49,2.29,2.29,0,0,1,.92,2,2.73,2.73,0,0,1-.83,2.1,2.66,2.66,0,0,1-.83.58,3.25,3.25,0,0,1-1.26.2H8.86Z" transform="translate(-6.4 -3.75)"/></g></svg>',underline:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9.78 15.74"><g><path d="M14.64,3.76h2.52v7.72a4.51,4.51,0,0,1-.59,2.31,3.76,3.76,0,0,1-1.71,1.53,6.12,6.12,0,0,1-2.64.53,5,5,0,0,1-3.57-1.18,4.17,4.17,0,0,1-1.27-3.24V3.76H9.9v7.3a3,3,0,0,0,.55,2,2.3,2.3,0,0,0,1.83.65,2.26,2.26,0,0,0,1.8-.65,3.09,3.09,0,0,0,.55-2V3.76Zm2.52,13.31V19.5H7.39V17.08h9.77Z" transform="translate(-7.38 -3.76)"/></g></svg>',italic:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10.49 15.76"><g><path d="M17.16,3.79l.37,0-.06.38-.14.52A10,10,0,0,1,16.21,5a9.37,9.37,0,0,0-1,.32,6.68,6.68,0,0,0-.25.89c-.06.31-.11.59-.14.85-.3,1.36-.52,2.41-.68,3.14l-.61,3.18L13.1,15l-.43,2.4-.12.46a.62.62,0,0,0,0,.28c.44.1.85.17,1.23.22l.68.11a4.51,4.51,0,0,1-.08.6l-.09.42a.92.92,0,0,0-.23,0l-.43,0a1.37,1.37,0,0,1-.29,0c-.13,0-.63-.08-1.49-.16l-2,0c-.28,0-.87,0-1.78.12L7,19.5l.17-.88.8-.2A6.61,6.61,0,0,0,9.19,18,2.62,2.62,0,0,0,9.61,17l.28-1.41.58-2.75.12-.66c.05-.3.11-.58.17-.86s.12-.51.17-.69l.12-.48.12-.43.31-1.6.15-.65.31-1.91V5.14a3.86,3.86,0,0,0-1.48-.29l-.38,0,.2-1.06,3.24.14.75,0c.45,0,1.18,0,2.18-.09.23,0,.46,0,.71,0Z" transform="translate(-7.04 -3.76)"/></g></svg>',strike:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.9"><g><path d="M12.94,13a4.27,4.27,0,0,1,1.32.58,1.46,1.46,0,0,1,.55,1.2,1.87,1.87,0,0,1-.88,1.64,4.17,4.17,0,0,1-2.35.59,4.44,4.44,0,0,1-2.74-.71,2.72,2.72,0,0,1-1-2.17H5.57a4.56,4.56,0,0,0,1.55,3.7,7,7,0,0,0,4.47,1.23,6,6,0,0,0,4.07-1.3,4.24,4.24,0,0,0,1.52-3.37,4,4,0,0,0-.26-1.4h-4ZM6.37,10.24A3.27,3.27,0,0,1,6,8.68a4,4,0,0,1,1.48-3.3,5.92,5.92,0,0,1,3.88-1.21,5.58,5.58,0,0,1,3.91,1.24,4.36,4.36,0,0,1,1.45,3.17H14.44a2.12,2.12,0,0,0-.91-1.81,4.45,4.45,0,0,0-2.44-.55,3.69,3.69,0,0,0-2,.51A1.64,1.64,0,0,0,8.3,8.22a1.3,1.3,0,0,0,.48,1.11,7,7,0,0,0,2.1.78l.28.06.28.08H6.37Zm13.09.68a.73.73,0,0,1,.49.21.66.66,0,0,1,.2.48.64.64,0,0,1-.2.48.71.71,0,0,1-.49.19H5.1a.67.67,0,0,1-.49-.19.66.66,0,0,1-.2-.48.64.64,0,0,1,.2-.48.73.73,0,0,1,.49-.21H19.46Z" transform="translate(-4.41 -4.17)"/></g></svg>',subscript:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 14.61"><g><path d="M15.38,4.33H12.74L11.19,7c-.28.46-.51.87-.69,1.21L10.07,9h0l-.44-.8c-.22-.4-.45-.81-.71-1.23L7.34,4.33H4.68L8.26,10,4.4,16.08H7.1l1.69-2.83c.38-.63.72-1.22,1-1.78l.25-.46h0l.49.92c.24.45.48.89.74,1.32L13,16.08h2.61L11.84,10l1.77-2.84,1.77-2.85Zm4.77,13.75H17v-.15c0-.4.05-.64.16-.72a4.42,4.42,0,0,1,1.16-.31,3.3,3.3,0,0,0,1.54-.56A1.84,1.84,0,0,0,20.15,15a1.78,1.78,0,0,0-.44-1.41A2.8,2.8,0,0,0,18,13.25a2.71,2.71,0,0,0-1.69.37,1.83,1.83,0,0,0-.44,1.43v.23H17v-.23q0-.63.18-.78a1.62,1.62,0,0,1,.88-.15,1.59,1.59,0,0,1,.88.15q.18.15.18.75t-.18.75a3.58,3.58,0,0,1-1.18.33,3.33,3.33,0,0,0-1.52.51,1.57,1.57,0,0,0-.32,1.18v1.15h4.27v-.86Z" transform="translate(-4.4 -4.33)"/></g></svg>',superscript:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.42"><g><path d="M12,13.14l3.61-5.81H12.94L11.33,10c-.28.46-.51.88-.69,1.25l-.45.83h0l-.45-.85c-.22-.41-.45-.82-.71-1.24L7.4,7.33H4.68l3.66,5.81L4.4,19.33H7.14l1.74-2.87q.58-1,1-1.83l.25-.48h0l.51.94.75,1.37,1.72,2.87h2.67l-1.92-3.09c-1.12-1.8-1.76-2.83-1.92-3.1Zm4.84-4.41h0l0,.15h3.27v.86H15.77V8.58a1.66,1.66,0,0,1,.33-1.22,3.51,3.51,0,0,1,1.56-.51,3.68,3.68,0,0,0,1.21-.34c.13-.1.19-.36.19-.77S19,5.07,18.87,5A1.63,1.63,0,0,0,18,4.8a1.58,1.58,0,0,0-.91.17c-.13.11-.19.38-.19.8V6H15.78V5.76a1.87,1.87,0,0,1,.45-1.47A2.84,2.84,0,0,1,18,3.91a2.8,2.8,0,0,1,1.72.38,1.84,1.84,0,0,1,.45,1.44,1.91,1.91,0,0,1-.34,1.35,3.24,3.24,0,0,1-1.58.57A3.69,3.69,0,0,0,17,8c-.12.1-.17.35-.17.76Z" transform="translate(-4.4 -3.91)"/></g></svg>',erase:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.76"><g><path d="M13.69,17.2h6.46v1.31H8.56L4.41,14.37,14,4.75l6.06,6.06L16.89,14l-3.2,3.19Zm-4.61,0h2.77L14.09,15,9.88,10.75,6.25,14.38l1.41,1.41c.84.82,1.31,1.29,1.42,1.41Z" transform="translate(-4.41 -4.75)"/></g></svg>',indent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.36"><g><path d="M19.87,15.57a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.25.25,0,0,1-.08-.19V15.84a.27.27,0,0,1,.27-.27H19.87ZM7.5,14.45a.25.25,0,0,1-.2-.09L4.76,11.84a.29.29,0,0,1,0-.4L7.3,8.9a.29.29,0,0,1,.4,0,.31.31,0,0,1,.07.2v5.06a.32.32,0,0,1-.08.21.26.26,0,0,1-.19.08ZM19.87,8.82a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.27-.27V9.1a.27.27,0,0,1,.27-.27h9.56Zm0,3.37a.27.27,0,0,1,.19.08.28.28,0,0,1,.08.21v1.68a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V12.48a.32.32,0,0,1,.08-.21.24.24,0,0,1,.19-.08h9.56Zm.2-6.66a.28.28,0,0,1,.08.2V7.41a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V5.73a.32.32,0,0,1,.08-.21.25.25,0,0,1,.19-.08H19.87a.28.28,0,0,1,.2.09Z" transform="translate(-4.41 -5.44)"/></g></svg>',outdent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.36"><g><path d="M4.68,14.45a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V9.1a.27.27,0,0,1,.08-.19.28.28,0,0,1,.2-.08.25.25,0,0,1,.19.07l2.54,2.54a.29.29,0,0,1,0,.4L4.88,14.36a.24.24,0,0,1-.2.09Zm15.19,1.12a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.25.25,0,0,1-.08-.19V15.84a.27.27,0,0,1,.27-.27H19.87Zm0-3.38a.27.27,0,0,1,.19.08.28.28,0,0,1,.08.21v1.68a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V12.48a.32.32,0,0,1,.08-.21.24.24,0,0,1,.19-.08h9.56Zm0-3.37a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.27-.27V9.1a.27.27,0,0,1,.27-.27h9.56Zm.2-3.29a.28.28,0,0,1,.08.2V7.41a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V5.73a.32.32,0,0,1,.08-.21.25.25,0,0,1,.19-.08H19.87a.28.28,0,0,1,.2.09Z" transform="translate(-4.41 -5.44)"/></g></svg>',expansion:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M11.8,13.06l-5.1,5.1H9.51V19.5H4.41V14.4H5.75v2.81L8.3,14.66q2.25-2.23,2.55-2.55Zm8.35-9.3v5.1H18.81V6.05l-5.1,5.1-1-1,5.1-5.1H15.05V3.76Z" transform="translate(-4.41 -3.76)"/></g></svg>',reduction:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M14.91,10h2.87v1.38H12.55V6.12h1.38V9l5.24-5.24.48.49.49.48ZM6.77,11.92H12v5.23H10.62V14.26L5.37,19.5l-1-1L9.63,13.3H6.77Z" transform="translate(-4.4 -3.76)"/></g></svg>',code_view:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 11.8"><g><path d="M8.09,7.94a.76.76,0,0,1,.53.22.72.72,0,0,1,.21.52.76.76,0,0,1-.22.54L6.18,11.63l2.43,2.44a.69.69,0,0,1,.2.51.66.66,0,0,1-.21.51.75.75,0,0,1-.51.22.63.63,0,0,1-.51-.21h0L4.63,12.15a.7.7,0,0,1-.22-.53.67.67,0,0,1,.25-.55L7.57,8.16a.82.82,0,0,1,.52-.22Zm12.05,3.69a.7.7,0,0,1-.23.52L17,15.1h0a.66.66,0,0,1-.51.21.73.73,0,0,1-.51-.22.75.75,0,0,1-.22-.51.63.63,0,0,1,.21-.51l2.43-2.44L15.92,9.22a.73.73,0,0,1-.22-.53A.74.74,0,0,1,17,8.18h0l2.91,2.91a.67.67,0,0,1,.27.54Zm-5.9-5.9a.73.73,0,0,1,.61.32.71.71,0,0,1,.07.68L11,17a1,1,0,0,1-.22.32.6.6,0,0,1-.35.16.75.75,0,0,1-.69-.26.69.69,0,0,1-.12-.72L13.56,6.23a.75.75,0,0,1,.26-.35.74.74,0,0,1,.42-.15Z" transform="translate(-4.41 -5.73)"/></g></svg>',preview:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.65 15.66"><g><path d="M16.19,14.43l2.49,2.49a.73.73,0,0,1,.21.52.67.67,0,0,1-.22.51.7.7,0,0,1-.52.22.69.69,0,0,1-.51-.21l-2.49-2.48a5.17,5.17,0,0,1-1.34.69,4.64,4.64,0,0,1-1.48.24,4.78,4.78,0,1,1,0-9.56,4.79,4.79,0,0,1,1.84.36,4.9,4.9,0,0,1,1.56,1,4.77,4.77,0,0,1,.46,6.18ZM10,14a3.3,3.3,0,0,0,2.34.93A3.37,3.37,0,0,0,14.7,14a3.3,3.3,0,0,0-1.08-5.41,3.47,3.47,0,0,0-2.56,0A3,3,0,0,0,10,9.28,3.31,3.31,0,0,0,10,14ZM16,4a3.86,3.86,0,0,1,2.77,1.14A3.9,3.9,0,0,1,20,7.85v4a.77.77,0,0,1-.22.53.7.7,0,0,1-.52.21.72.72,0,0,1-.74-.74v-4a2.46,2.46,0,0,0-.72-1.73A2.37,2.37,0,0,0,16,5.45H8.53A2.42,2.42,0,0,0,6.08,7.89v7.52a2.41,2.41,0,0,0,.71,1.73,2.46,2.46,0,0,0,1.74.72h4.08a.73.73,0,0,1,0,1.46H8.53a3.85,3.85,0,0,1-2.78-1.14A3.93,3.93,0,0,1,4.6,15.4V7.87A3.94,3.94,0,0,1,5.76,5.09,3.88,3.88,0,0,1,8.54,4H16Z" transform="translate(-4.45 -3.8)"/></g></svg>',print:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.05 16.04"><g><path d="M19.76,15.84a1.29,1.29,0,0,0,.39-.92V8.35A2.05,2.05,0,0,0,19.57,7a1.93,1.93,0,0,0-1.38-.57H6.37a1.95,1.95,0,0,0-2,2v6.56a1.23,1.23,0,0,0,.38.92,1.35,1.35,0,0,0,.93.38h2V14.9l-2,0V8.35a.67.67,0,0,1,.18-.47.62.62,0,0,1,.48-.19H18.18a.6.6,0,0,1,.46.19.66.66,0,0,1,.18.47V14.9h-2v1.32h2A1.35,1.35,0,0,0,19.76,15.84ZM17.52,7.69V5.06a1.31,1.31,0,0,0-.38-.92,1.34,1.34,0,0,0-.94-.38H8.34A1.3,1.3,0,0,0,7,5.06V7.69H8.34V5.06h7.87V7.69h1.31ZM8.34,12.93h7.87l0,5.26H8.34V12.93Zm7.87,5.26v0Zm.65,1.31a.6.6,0,0,0,.46-.19.72.72,0,0,0,.2-.47V12.29a.74.74,0,0,0-.2-.47.6.6,0,0,0-.46-.19H7.68a.6.6,0,0,0-.46.19.72.72,0,0,0-.2.47v6.55a.74.74,0,0,0,.2.47.6.6,0,0,0,.46.19h9.18ZM16.67,9.28a.7.7,0,0,0-.94,0,.63.63,0,0,0-.18.46.67.67,0,0,0,.18.47.68.68,0,0,0,.94,0,.66.66,0,0,0,.18-.47A.58.58,0,0,0,16.67,9.28Z" transform="translate(-4.25 -3.61)"/></g></svg>',template:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.27 15.64"><g><path d="M18.18,19.16a1,1,0,0,0,1-1V5.73a1,1,0,0,0-1-1h-2v1h2V18.19H6.37V5.73h2v-1h-2A.94.94,0,0,0,5.68,5a1,1,0,0,0-.29.7V18.18a.94.94,0,0,0,.29.69,1,1,0,0,0,.69.29H18.18ZM9.82,10.31h4.92a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.49.49,0,0,0-.15-.35.47.47,0,0,0-.35-.15H9.82a.49.49,0,0,0-.35.15.47.47,0,0,0-.15.35.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15Zm5.9,4.92H8.83a.49.49,0,0,0-.35.15.47.47,0,0,0-.15.35.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15h6.89a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.51.51,0,0,0-.5-.5ZM7.36,12.77a.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15h8.85a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.49.49,0,0,0-.15-.35.47.47,0,0,0-.35-.15H7.85a.49.49,0,0,0-.35.15.52.52,0,0,0-.14.35Z" transform="translate(-5.14 -3.77)"/><path d="M14.24,6.71a1,1,0,0,0,1-1,1,1,0,0,0-1-1,1,1,0,0,0-1-1h-2a.94.94,0,0,0-.69.28,1,1,0,0,0-.29.7A.94.94,0,0,0,9.62,5a.91.91,0,0,0-.29.69,1,1,0,0,0,.29.7,1,1,0,0,0,.69.29h3.93Z" transform="translate(-5.14 -3.77)"/></g></svg>',line_height:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 13.56"><g><path d="M4.4,4.88V8.26a2,2,0,0,0,.5.39s.1,0,.18-.12a.62.62,0,0,0,.17-.28c.06-.19.13-.44.21-.74s.14-.52.19-.66a.58.58,0,0,1,.21-.3,2.41,2.41,0,0,1,.63-.21,3.83,3.83,0,0,1,.88-.12,9.15,9.15,0,0,1,1.31.06.16.16,0,0,1,.11,0,.26.26,0,0,1,.06.14,4,4,0,0,1,0,.49v2l.05,3.77c0,1.41,0,2.68-.05,3.81a1.79,1.79,0,0,1-.11.49,10.68,10.68,0,0,1-1.4.45,1.12,1.12,0,0,0-.69.43v.31l0,.22.61,0c.85-.08,1.54-.12,2.06-.12a19.76,19.76,0,0,1,2.09.08,15.08,15.08,0,0,0,1.64.08,1.4,1.4,0,0,0,.29,0,1.58,1.58,0,0,0,0-.26l-.05-.43a2.26,2.26,0,0,0-.43-.17l-.77-.22-.15,0a2.55,2.55,0,0,1-.78-.28,2.56,2.56,0,0,1-.11-.75l0-1.29,0-3.15V7.53a10.51,10.51,0,0,1,.06-1.2,3.83,3.83,0,0,1,.6,0l1.88,0a2.18,2.18,0,0,1,.38,0,.45.45,0,0,1,.23.17.9.9,0,0,1,.05.25c0,.16.06.35.1.58a3.33,3.33,0,0,0,.14.55A6.39,6.39,0,0,0,15,9a2.91,2.91,0,0,0,.6-.15,2.77,2.77,0,0,0,0-.46l0-.51,0-2.95-.25,0-.38,0L15,4.94a.71.71,0,0,1-.18.15.45.45,0,0,1-.25.07l-.29,0H8.75l-.15,0H7.45a17,17,0,0,1-1.86,0L5.36,5l-.25-.13ZM19.75,16.14h-.69v-9h.69A.4.4,0,0,0,20.13,7c.06-.11,0-.24-.1-.39L18.92,5.15a.52.52,0,0,0-.86,0L17,6.58c-.12.15-.16.28-.1.39s.18.16.38.16h.69v9h-.69a.4.4,0,0,0-.38.16c-.06.11,0,.24.1.39l1.11,1.43a.52.52,0,0,0,.86,0L20,16.69c.12-.15.16-.28.1-.39a.4.4,0,0,0-.38-.16Z" transform="translate(-4.4 -4.86)"/></g></svg>',paragraph_style:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.81 15.74"><g><path d="M18.18,3.76v2h-2V19.5h-2V5.73h-2V19.5h-2V11.63a3.94,3.94,0,0,1,0-7.87h7.87Z" transform="translate(-6.37 -3.76)"/></g></svg>',text_style:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.76 15.74"><g><path d="M17.68,6.71a2.22,2.22,0,0,0,1.06-.22.74.74,0,0,0,.42-.7.73.73,0,0,0-.08-.33.67.67,0,0,0-.17-.22,1,1,0,0,0-.31-.15L18.26,5l-.45-.09A15.27,15.27,0,0,0,13.26,5V4.74c0-.66-.63-1-1.92-1-.24,0-.43.15-.59.46a4,4,0,0,0-.36,1.14h0v0a26.45,26.45,0,0,1-3.5.35A2,2,0,0,0,5.77,6a.84.84,0,0,0-.37.79,2.14,2.14,0,0,0,.41,1.29,1.23,1.23,0,0,0,1.05.63,16.62,16.62,0,0,0,3.29-.45l-.34,3.35c-.16,1.61-.29,2.9-.37,3.86s-.12,1.66-.12,2.09l0,.65a5.15,5.15,0,0,0,.05.6,1.28,1.28,0,0,0,.16.54.34.34,0,0,0,.28.18,1.16,1.16,0,0,0,.79-.46,3.66,3.66,0,0,0,.68-1,22.08,22.08,0,0,0,1-4.33q.49-3.1.78-6.15a24.69,24.69,0,0,1,4.62-.84Z" transform="translate(-5.4 -3.76)"/></g></svg>',save:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M18.53,19.5l.2-.05A1.78,1.78,0,0,0,20.13,18l0-.09V7.14a2,2,0,0,0-.28-.64A3.18,3.18,0,0,0,19.43,6c-.5-.52-1-1-1.55-1.54A2.59,2.59,0,0,0,17.37,4a1.83,1.83,0,0,0-.61-.25H6l-.21,0a1.78,1.78,0,0,0-1.4,1.49l0,.1V17.87a2.49,2.49,0,0,0,.09.37,1.79,1.79,0,0,0,1.44,1.23l.09,0Zm-6.25-.6H6.92a.61.61,0,0,1-.68-.48.78.78,0,0,1,0-.22V12.3a.62.62,0,0,1,.69-.68H17.64a.62.62,0,0,1,.69.69V18.2a.64.64,0,0,1-.71.69H12.28ZM12,9.81H8.15a.63.63,0,0,1-.72-.71v-4a.64.64,0,0,1,.72-.72h7.66a.64.64,0,0,1,.72.72v4a.65.65,0,0,1-.74.72ZM13.5,5V9.18h1.78V5Z" transform="translate(-4.41 -3.76)"/></g></svg>',blockquote:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 475.082 475.081"><g><path d="M164.45,219.27h-63.954c-7.614,0-14.087-2.664-19.417-7.994c-5.327-5.33-7.994-11.801-7.994-19.417v-9.132c0-20.177,7.139-37.401,21.416-51.678c14.276-14.272,31.503-21.411,51.678-21.411h18.271c4.948,0,9.229-1.809,12.847-5.424c3.616-3.617,5.424-7.898,5.424-12.847V54.819c0-4.948-1.809-9.233-5.424-12.85c-3.617-3.612-7.898-5.424-12.847-5.424h-18.271c-19.797,0-38.684,3.858-56.673,11.563c-17.987,7.71-33.545,18.132-46.68,31.267c-13.134,13.129-23.553,28.688-31.262,46.677C3.855,144.039,0,162.931,0,182.726v200.991c0,15.235,5.327,28.171,15.986,38.834c10.66,10.657,23.606,15.985,38.832,15.985h109.639c15.225,0,28.167-5.328,38.828-15.985c10.657-10.663,15.987-23.599,15.987-38.834V274.088c0-15.232-5.33-28.168-15.994-38.832C192.622,224.6,179.675,219.27,164.45,219.27z"/><path d="M459.103,235.256c-10.656-10.656-23.599-15.986-38.828-15.986h-63.953c-7.61,0-14.089-2.664-19.41-7.994c-5.332-5.33-7.994-11.801-7.994-19.417v-9.132c0-20.177,7.139-37.401,21.409-51.678c14.271-14.272,31.497-21.411,51.682-21.411h18.267c4.949,0,9.233-1.809,12.848-5.424c3.613-3.617,5.428-7.898,5.428-12.847V54.819c0-4.948-1.814-9.233-5.428-12.85c-3.614-3.612-7.898-5.424-12.848-5.424h-18.267c-19.808,0-38.691,3.858-56.685,11.563c-17.984,7.71-33.537,18.132-46.672,31.267c-13.135,13.129-23.559,28.688-31.265,46.677c-7.707,17.987-11.567,36.879-11.567,56.674v200.991c0,15.235,5.332,28.171,15.988,38.834c10.657,10.657,23.6,15.985,38.828,15.985h109.633c15.229,0,28.171-5.328,38.827-15.985c10.664-10.663,15.985-23.599,15.985-38.834V274.088C475.082,258.855,469.76,245.92,459.103,235.256z"/></g></svg>',arrow_down:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 8.67"><g><path d="M18.79,7.52a.8.8,0,0,1,.56-.23.82.82,0,0,1,.79.79.8.8,0,0,1-.23.56l-7.07,7.07a.79.79,0,0,1-.57.25.77.77,0,0,1-.57-.25h0L4.64,8.65a.8.8,0,0,1-.23-.57.82.82,0,0,1,.79-.79.8.8,0,0,1,.56.23L12.28,14l3.26-3.26,3.25-3.26Z" transform="translate(-4.41 -7.29)"/></g></svg>',align_justify:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm0,5.9H20.15v-2H4.41v2Zm0,3.94H20.15v-2H4.41v2Zm0,3.93h7.87v-2H4.41v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm11.8,3.94H4.41v2H16.22v-2Zm-11.8,5.9H18.18v-2H4.41v2Zm0,3.93h9.84v-2H4.41v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm3.93,5.9H20.15v-2H8.34v2Zm-2,3.94H20.14v-2H6.37v2Zm3.94,3.93h9.84v-2H10.31v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_center:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm2,3.94v2H18.18v-2H6.37Zm-1,5.9H19.16v-2H5.39v2Zm2,3.93H17.2v-2H7.36v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',font_color:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.61"><g><path d="M18.5,15.57,14.28,4.32h-3.4L6.65,15.57h3l.8-2.26h4.23l.8,2.26h3ZM14,11.07H11.14L12.54,7,13.25,9c.41,1.18.64,1.86.7,2ZM4.41,16.69v2.24H20.15V16.69H4.41Z" transform="translate(-4.41 -4.32)"/></g></svg>',highlight_color:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.66 15.74"><g><path d="M12.32,9.31,13.38,13H11.21l.52-1.83q.46-1.61.54-1.83ZM4.44,3.76H20.1V19.5H4.44V3.76ZM14.71,17.32h2.63L13.7,6H10.89L7.26,17.32H9.89l.63-2.24h3.55l.32,1.12c.18.65.29,1,.32,1.12Z" transform="translate(-4.44 -3.76)"/></g></svg>',list_bullets:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.37"><g><path d="M7.77,16.12a1.59,1.59,0,0,0-.49-1.18,1.62,1.62,0,0,0-1.19-.49,1.68,1.68,0,1,0,0,3.36,1.67,1.67,0,0,0,1.68-1.69Zm0-4.48A1.67,1.67,0,0,0,6.09,10,1.68,1.68,0,0,0,4.9,12.82a1.62,1.62,0,0,0,1.19.49,1.67,1.67,0,0,0,1.68-1.67Zm12.38,3.64a.27.27,0,0,0-.08-.19.28.28,0,0,0-.2-.09H9.19a.28.28,0,0,0-.2.08.29.29,0,0,0-.08.19V17a.27.27,0,0,0,.28.28H19.87a.27.27,0,0,0,.19-.08.24.24,0,0,0,.08-.2V15.28ZM7.77,7.13a1.63,1.63,0,0,0-.49-1.2,1.61,1.61,0,0,0-1.19-.49,1.61,1.61,0,0,0-1.19.49,1.71,1.71,0,0,0,0,2.4,1.62,1.62,0,0,0,1.19.49,1.61,1.61,0,0,0,1.19-.49,1.63,1.63,0,0,0,.49-1.2Zm12.38,3.66a.28.28,0,0,0-.08-.2.29.29,0,0,0-.19-.08H9.19a.27.27,0,0,0-.28.28v1.69a.27.27,0,0,0,.08.19.24.24,0,0,0,.2.08H19.87a.27.27,0,0,0,.19-.08.25.25,0,0,0,.08-.19V10.79Zm0-4.5a.27.27,0,0,0-.08-.19A.25.25,0,0,0,19.88,6H9.19A.28.28,0,0,0,9,6.1a.26.26,0,0,0-.08.19V8A.27.27,0,0,0,9,8.17a.24.24,0,0,0,.2.08H19.87a.27.27,0,0,0,.19-.08A.25.25,0,0,0,20.14,8V6.29Z" transform="translate(-4.41 -5.44)"/></g></svg>',list_number:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.69 15.74"><g><path d="M7.66,18a1.24,1.24,0,0,0-.26-.78,1.17,1.17,0,0,0-.72-.42l.85-1V15H4.58v1.34h.94v-.46l.85,0h0c-.11.11-.22.23-.32.35s-.23.27-.37.47L5.39,17l.23.51c.61-.05.92.11.92.49a.42.42,0,0,1-.18.37.79.79,0,0,1-.45.12A1.41,1.41,0,0,1,5,18.15l-.51.77A2.06,2.06,0,0,0,6,19.5a1.8,1.8,0,0,0,1.2-.41A1.38,1.38,0,0,0,7.66,18Zm0-5.54H6.75V13H5.63A.72.72,0,0,1,6,12.51a5.45,5.45,0,0,1,.66-.45,2.71,2.71,0,0,0,.67-.57,1.19,1.19,0,0,0,.31-.81,1.29,1.29,0,0,0-.45-1,1.86,1.86,0,0,0-2-.11,1.51,1.51,0,0,0-.62.7l.74.52A.87.87,0,0,1,6,10.28a.51.51,0,0,1,.35.12.42.42,0,0,1,.13.33.55.55,0,0,1-.21.4,3,3,0,0,1-.5.38c-.19.13-.39.27-.58.42a2,2,0,0,0-.5.6,1.63,1.63,0,0,0-.21.81,3.89,3.89,0,0,0,.05.48h3.2V12.44Zm12.45,2.82a.27.27,0,0,0-.08-.19.28.28,0,0,0-.21-.08H9.1a.32.32,0,0,0-.21.08.24.24,0,0,0-.08.2V17a.27.27,0,0,0,.08.19.3.3,0,0,0,.21.08H19.83a.32.32,0,0,0,.21-.08.25.25,0,0,0,.08-.19V15.26ZM7.69,7.32h-1V3.76H5.8L4.6,4.88l.63.68a1.85,1.85,0,0,0,.43-.48h0l0,2.24H4.74V8.2h3V7.32Zm12.43,3.42a.27.27,0,0,0-.08-.19.28.28,0,0,0-.21-.08H9.1a.32.32,0,0,0-.21.08.24.24,0,0,0-.08.2v1.71a.27.27,0,0,0,.08.19.3.3,0,0,0,.21.08H19.83a.32.32,0,0,0,.21-.08.25.25,0,0,0,.08-.19V10.74Zm0-4.52A.27.27,0,0,0,20,6,.28.28,0,0,0,19.83,6H9.1A.32.32,0,0,0,8.89,6a.24.24,0,0,0-.08.19V7.93a.27.27,0,0,0,.08.19.32.32,0,0,0,.21.08H19.83A.32.32,0,0,0,20,8.12a.26.26,0,0,0,.08-.2V6.22Z" transform="translate(-4.43 -3.76)"/></g></svg>',table:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M4.41,8.05V3.76H8.7V8.05H4.41Zm5.71,0V3.76h4.3V8.05h-4.3Zm5.74-4.29h4.29V8.05H15.86V3.76Zm-11.45,10V9.48H8.7v4.3H4.41Zm5.71,0V9.48h4.3v4.3h-4.3Zm5.74,0V9.48h4.29v4.3H15.86ZM4.41,19.5V15.21H8.7V19.5H4.41Zm5.71,0V15.21h4.3V19.5h-4.3Zm5.74,0V15.21h4.29V19.5H15.86Z" transform="translate(-4.41 -3.76)"/></g></svg>',horizontal_rule:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 2.24"><g><path d="M20.15,12.75V10.51H4.41v2.24H20.15Z" transform="translate(-4.41 -10.51)"/></g></svg>',show_blocks:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.66 15.67"><g><path d="M19.72,5.58a1.64,1.64,0,0,0-1.64-1.64H6.23a1.62,1.62,0,0,0-1.16.48,1.63,1.63,0,0,0-.48,1.16V9.63a1.6,1.6,0,0,0,.48,1.16,1.62,1.62,0,0,0,1.16.47H18.09a1.67,1.67,0,0,0,1.16-.47,1.62,1.62,0,0,0,.48-1.16V5.58Zm-.94,4.05a.68.68,0,0,1-.7.7H6.23a.66.66,0,0,1-.48-.2.74.74,0,0,1-.21-.5V5.58a.66.66,0,0,1,.2-.48.71.71,0,0,1,.48-.21H18.08a.74.74,0,0,1,.5.21.66.66,0,0,1,.2.48ZM6.48,7.72a.21.21,0,0,0,.17-.07.22.22,0,0,0,.07-.17V7.06a1.27,1.27,0,0,1,.11-.52.37.37,0,0,1,.36-.23H8.77A.25.25,0,0,0,9,6.17a.19.19,0,0,0,0-.23.27.27,0,0,0-.2-.12H7.19a.88.88,0,0,0-.72.39,1.51,1.51,0,0,0-.23.85v.42a.24.24,0,0,0,.24.24Zm-.19.81a.21.21,0,0,0,.17-.07.26.26,0,0,0,.07-.17.24.24,0,0,0-.24-.24.2.2,0,0,0-.16.09.2.2,0,0,0-.07.16.22.22,0,0,0,.07.17.23.23,0,0,0,.16.06Zm8.46,5.1a1.63,1.63,0,0,0-.47-1.16A1.61,1.61,0,0,0,13.12,12H6.23a1.6,1.6,0,0,0-1.16.46,1.62,1.62,0,0,0-.48,1.16v4.05a1.64,1.64,0,0,0,1.64,1.64h6.89a1.6,1.6,0,0,0,1.16-.48,1.62,1.62,0,0,0,.47-1.16Zm-.94,4a.7.7,0,0,1-.2.49.65.65,0,0,1-.5.2H6.23a.66.66,0,0,1-.48-.2.75.75,0,0,1-.21-.49v-4a.74.74,0,0,1,.21-.5.66.66,0,0,1,.48-.2h6.89a.68.68,0,0,1,.7.7v4Zm6.15,0v-4a1.6,1.6,0,0,0-.48-1.16A1.67,1.67,0,0,0,18.32,12H17.1a1.63,1.63,0,0,0-1.16.47,1.61,1.61,0,0,0-.47,1.16v4a1.67,1.67,0,0,0,.47,1.16,1.62,1.62,0,0,0,1.16.48h1.22A1.64,1.64,0,0,0,20,17.68Zm-.94-4v4a.75.75,0,0,1-.21.49.62.62,0,0,1-.48.2H17.11a.69.69,0,0,1-.5-.2.7.7,0,0,1-.2-.49v-4a.68.68,0,0,1,.7-.7h1.22a.66.66,0,0,1,.48.2.72.72,0,0,1,.21.5Z" transform="translate(-4.44 -3.79)"/></g></svg>',cancel:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M14.15,11.63l5.61,5.61a1.29,1.29,0,0,1,.38.93,1.27,1.27,0,0,1-.4.93,1.25,1.25,0,0,1-.92.4,1.31,1.31,0,0,1-.94-.4l-5.61-5.61L6.67,19.1a1.31,1.31,0,0,1-.94.4,1.24,1.24,0,0,1-.92-.4,1.27,1.27,0,0,1-.4-.93,1.33,1.33,0,0,1,.38-.93l5.61-5.63L4.79,6a1.26,1.26,0,0,1-.38-.93,1.22,1.22,0,0,1,.4-.92,1.28,1.28,0,0,1,.92-.39,1.38,1.38,0,0,1,.94.38l5.61,5.61,5.61-5.61a1.33,1.33,0,0,1,.94-.38,1.26,1.26,0,0,1,.92.39,1.24,1.24,0,0,1,.4.92,1.29,1.29,0,0,1-.39.93L17,8.81l-2.8,2.82Z" transform="translate(-4.41 -3.76)"/></g></svg>',image:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.77"><g><path d="M8.77,8.72a.88.88,0,0,1-.61-.27.82.82,0,0,1-.25-.61.89.89,0,0,1,.25-.62A.82.82,0,0,1,8.77,7a.81.81,0,0,1,.61.25.83.83,0,0,1,.27.62.81.81,0,0,1-.25.61.91.91,0,0,1-.63.27Zm9.62-5a1.74,1.74,0,0,1,1.76,1.76V17.76a1.74,1.74,0,0,1-1.76,1.76H6.16A1.74,1.74,0,0,1,4.4,17.76V5.51A1.74,1.74,0,0,1,6.16,3.75H18.39Zm0,1.75H6.16v8L8.53,11.8a.94.94,0,0,1,.54-.17.86.86,0,0,1,.54.2L11.09,13l3.64-4.55a.78.78,0,0,1,.34-.25.85.85,0,0,1,.42-.07.89.89,0,0,1,.39.12.78.78,0,0,1,.28.29l2.24,3.67V5.51Zm0,12.24V15.6L15.3,10.53,11.89,14.8a.89.89,0,0,1-.59.32.82.82,0,0,1-.64-.18L9,13.62,6.16,15.74v2Z" transform="translate(-4.4 -3.75)"/></g></svg>',video:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.55"><g><path d="M20.15,10.26V18.9l-3.94-1.57v1.2H4.41V10.66H16.22v1.23l2-.81,2-.82ZM14.64,17h0V12.54h0v-.31H6V17h8.67Zm3.94-.37v-4l-2.37,1v2l1.18.48,1.19.48ZM7.94,9.86A2.77,2.77,0,0,1,5.19,7.11a2.76,2.76,0,0,1,5.51,0A2.78,2.78,0,0,1,7.94,9.86Zm0-3.93a1.21,1.21,0,0,0-.83.35,1.15,1.15,0,0,0-.34.84A1.09,1.09,0,0,0,7.11,8,1.15,1.15,0,0,0,8,8.28,1.13,1.13,0,0,0,9.11,7.12,1.16,1.16,0,0,0,7.94,5.93Zm5.9,3.93a2.34,2.34,0,0,1-1.67-.68,2.3,2.3,0,0,1-.68-1.67,2.35,2.35,0,0,1,4-1.67,2.37,2.37,0,0,1,0,3.34,2.33,2.33,0,0,1-1.68.68Zm0-3.14a.75.75,0,1,0,.55.22.73.73,0,0,0-.55-.22Z" transform="translate(-4.41 -4.35)"/></g></svg>',link:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.72"><g><path d="M13.05,13.63a.24.24,0,0,1,.15.22L13.42,16a.19.19,0,0,1-.08.18l-2.12,2.14a4.08,4.08,0,0,1-1.29.85A4,4,0,0,1,4.71,17a3.92,3.92,0,0,1-.3-1.52A4,4,0,0,1,4.71,14a3.91,3.91,0,0,1,.87-1.3L7.7,10.56a.25.25,0,0,1,.2-.06l2.17.22a.21.21,0,0,1,.19.15.24.24,0,0,1,0,.25L7.12,14.23a1.81,1.81,0,0,0,0,2.58,1.78,1.78,0,0,0,1.29.52,1.74,1.74,0,0,0,1.28-.52L12.8,13.7a.24.24,0,0,1,.25-.07ZM19,4.92a4,4,0,0,1,0,5.66L16.86,12.7a.25.25,0,0,1-.17.08l-2.2-.23a.21.21,0,0,1-.19-.15.22.22,0,0,1,0-.25L17.44,9a1.81,1.81,0,0,0,0-2.58,1.78,1.78,0,0,0-1.29-.52,1.74,1.74,0,0,0-1.28.52L11.76,9.57a.21.21,0,0,1-.25,0,.24.24,0,0,1-.16-.21l-.22-2.17a.19.19,0,0,1,.08-.18l2.12-2.14a4.08,4.08,0,0,1,1.29-.85,4.05,4.05,0,0,1,3.06,0,3.85,3.85,0,0,1,1.3.85ZM5.84,9.82a.25.25,0,0,1-.18-.08.19.19,0,0,1-.07-.19l.11-.77a.2.2,0,0,1,.11-.17.24.24,0,0,1,.2,0l2.5.72a.25.25,0,0,1,.15.27.22.22,0,0,1-.23.21l-2.59,0Zm4.12-2-.73-2.5a.27.27,0,0,1,0-.2A.21.21,0,0,1,9.41,5L10.19,5a.25.25,0,0,1,.19,0,.23.23,0,0,1,.08.18l-.05,2.61a.2.2,0,0,1-.19.23h0A.22.22,0,0,1,10,7.85Zm8.76,5.58a.25.25,0,0,1,.18.08.23.23,0,0,1,.06.2l-.11.77a.25.25,0,0,1-.11.17.21.21,0,0,1-.12,0l-.08,0L16,14a.25.25,0,0,1-.15-.27.22.22,0,0,1,.22-.21l1.29,0,1.33,0Zm-4.12,2,.74,2.51a.28.28,0,0,1,0,.2.23.23,0,0,1-.18.11l-.8.11a.23.23,0,0,1-.17-.07.25.25,0,0,1-.08-.18l0-2.61a.22.22,0,0,1,.22-.22.21.21,0,0,1,.26.15Z" transform="translate(-4.41 -3.77)"/></g></svg>',math:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.81 15.73"><g><path d="M17.19,5.73a1,1,0,0,0,.71-.29,1,1,0,0,0,.28-.7,1,1,0,0,0-1-1H7.35a1,1,0,0,0-1,1,.77.77,0,0,0,.13.47h0l4.58,6.43L6.68,17.81a1.25,1.25,0,0,0-.29.71.94.94,0,0,0,.28.7.92.92,0,0,0,.69.28H17.2a1,1,0,0,0,.71-.28,1,1,0,0,0,0-1.39.92.92,0,0,0-.71-.29H9.26l3.87-5.43a.86.86,0,0,0,0-.95L9.26,5.73h7.93Z" transform="translate(-6.38 -3.77)"/></g></svg>',unlink:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.72"><g><path d="M19,18.32a4,4,0,0,0,0-5.68L15.85,9.5l-1.17,1.55L17.57,14a2,2,0,0,1,.61,1.47,2.08,2.08,0,0,1-2.09,2.09,2,2,0,0,1-1.47-.61l-.38-.37-1.74,1,.8.78a4,4,0,0,0,5.68,0ZM8,9.77a2,2,0,0,1-1.27-1,1.89,1.89,0,0,1-.21-1.57A2.1,2.1,0,0,1,7.45,6,2,2,0,0,1,9,5.76L12.27,7.2l.49-2L9.48,3.9a4,4,0,0,0-3.06.41A3.82,3.82,0,0,0,4.56,6.73a3.8,3.8,0,0,0,.4,3A3.78,3.78,0,0,0,7.39,11.6l5.38,2,.49-2-2.64-.94L8,9.77Z" transform="translate(-4.41 -3.76)"/></g></svg>',table_header:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.74"><g><path d="M17,19.5v-.78H15.5v.78H17Zm-3,0v-.78H12.5v.78H14Zm-3,0v-.78H9.53v.78H11Zm-3,0v-.78H6.53v.78H8Zm10.55,0a1.73,1.73,0,0,0,.85-.35,1.67,1.67,0,0,0,.56-.76l-.71-.31a1.21,1.21,0,0,1-.35.4,1.34,1.34,0,0,1-.53.23l.08.38c.06.24.09.38.1.41Zm-13.7-.63.55-.55A.77.77,0,0,1,5.25,18a1.31,1.31,0,0,1-.06-.38v-.38H4.41v.38a2,2,0,0,0,.12.68,1.6,1.6,0,0,0,.35.57Zm15.27-2.12V15.26h-.78v1.49h.78Zm-15-1V14.23H4.41v1.49h.78Zm15-2V12.26h-.78v1.49h.78Zm-15-1V11.22H4.41v1.51h.78Zm15-2V9.26h-.78v1.51h.78Zm-15-1V8.17H4.41V9.74h.78Zm15-2V6.28h-.78V7.77h.78Zm-15-1.11V5.33L4.48,5.1a.77.77,0,0,0-.07.27,2.72,2.72,0,0,0,0,.28v1h.79ZM19.21,5l.63-.4A1.62,1.62,0,0,0,19.16,4a1.94,1.94,0,0,0-.91-.22v.78a1.31,1.31,0,0,1,.56.12.88.88,0,0,1,.4.36ZM6,4.54H7.78V3.76H6a.82.82,0,0,0-.28.06l.12.35c.07.21.1.33.11.36Zm10.8,0V3.76H15.28v.78h1.49Zm-3,0V3.76H12.28v.78h1.49Zm-3,0V3.76H9.28v.78h1.51ZM6,10.84h12.6V6.91H6Z" transform="translate(-4.4 -3.76)"/></g></svg>',merge_cell:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 15.74"><g><path d="M18.92,13.5h1.23v4.15A1.84,1.84,0,0,1,18.3,19.5H14V18.27H18.3a.6.6,0,0,0,.44-.18.59.59,0,0,0,.18-.44V13.5ZM18.3,3.76a1.84,1.84,0,0,1,1.85,1.85V9.82H18.92V5.6a.6.6,0,0,0-.18-.44A.59.59,0,0,0,18.3,5H14V3.76H18.3Zm1.85,8.51H15.6L17.26,14l-.86.86-3.14-3.17L16.4,8.51l.86.86L15.62,11h4.54v1.24Zm-13.9,6h4.27V19.5H6.25A1.84,1.84,0,0,1,4.4,17.65V13.5H5.63v4.15a.61.61,0,0,0,.62.62Zm0-14.51h4.27V5H6.25a.6.6,0,0,0-.44.18.57.57,0,0,0-.17.43V9.81H4.41V5.6A1.83,1.83,0,0,1,6.25,3.76Zm5,7.9L8.15,14.83,7.3,14,9,12.27H4.41V11H8.94L7.3,9.38,7.73,9l.43-.43Z" transform="translate(-4.4 -3.76)"/></g></svg>',split_cell:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.74"><g><path d="M10.37,12.25H6.74L8.4,13.94l-.87.86L4.41,11.63,7.53,8.5l.87.86L6.74,11h3.62v1.23Zm9.78-.61L17,14.81,16.13,14l1.66-1.69H14.16V11h3.63L16.13,9.37l.43-.43A5.24,5.24,0,0,1,17,8.51ZM18.9,8.22V5.61a.57.57,0,0,0-.18-.43A.65.65,0,0,0,18.29,5H12.88V18.28h5.41a.7.7,0,0,0,.44-.18.57.57,0,0,0,.18-.43V15h1.23v2.64a1.84,1.84,0,0,1-1.85,1.83h-12A1.84,1.84,0,0,1,4.94,19a1.81,1.81,0,0,1-.54-1.29V15H5.63v2.64a.57.57,0,0,0,.18.43.67.67,0,0,0,.44.18h5.41V5H6.25a.7.7,0,0,0-.44.18.56.56,0,0,0-.17.43V8.22H4.41V5.61A1.8,1.8,0,0,1,5,4.31a1.91,1.91,0,0,1,1.31-.55h12a1.89,1.89,0,0,1,1.31.55,1.8,1.8,0,0,1,.54,1.3V8.23H18.9Z" transform="translate(-4.4 -3.76)"/></g></svg>',caption:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.79"><g><path d="M4.41,18.52H20.15v-2H4.41ZM20,4.73H18.07V6h.65v.65H20V4.73ZM17,6V4.73H14.55V6H17ZM13.49,6V4.73H11V6h2.47ZM10,6V4.73H7.5V6H10ZM5.79,6h.65V4.73H4.5V6.67H5.8V6ZM4.5,11.34H5.79V8.48H4.5ZM6.44,13.8H5.79v-.65H4.5v1.94H6.44ZM17,15.09V13.8H14.55v1.29H17Zm-3.52,0V13.8H11v1.29h2.47Zm-3.53,0V13.8H7.5v1.29H10ZM20,13.16H18.72v.65h-.65V15.1H20Zm-1.29-1.82H20V8.48h-1.3v2.86Z" transform="translate(-4.41 -4.73)"/></g></svg>',edit:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.73"><g><path d="M7.51,5.68h6l1.52-1.57H6.94a2.4,2.4,0,0,0-1.79.82A2.8,2.8,0,0,0,4.41,6.8V17a2.55,2.55,0,0,0,.75,1.8A2.48,2.48,0,0,0,7,19.5H17.22a2.57,2.57,0,0,0,1.83-.74,2.52,2.52,0,0,0,.77-1.8V8.83l-1.58,1.54v6a1.54,1.54,0,0,1-1.53,1.53H7.51A1.54,1.54,0,0,1,6,16.41V7.21A1.52,1.52,0,0,1,7.51,5.68Zm5.63,7.47h0L10.7,10.74l-1,3.38,1.71-.48,1.7-.49Zm.34-.34h0l5.36-5.32L16.4,5.08,11,10.4l1.23,1.21,1.21,1.2ZM19.93,6.4a.82.82,0,0,0,.22-.48A.54.54,0,0,0,20,5.47L18.45,4A.67.67,0,0,0,18,3.77a.7.7,0,0,0-.48.21l-.74.72,2.44,2.43.37-.37.35-.36Z" transform="translate(-4.41 -3.77)"/></g></svg>',delete:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 15.74"><g><path d="M19.16,6.71a.94.94,0,0,0,.69-.28.91.91,0,0,0,.29-.68A1,1,0,0,0,19.85,5a.93.93,0,0,0-.69-.3H14.24A.94.94,0,0,0,14,4.06a.92.92,0,0,0-.7-.3h-2a1,1,0,0,0-.7.3.93.93,0,0,0-.28.68H5.39A.92.92,0,0,0,4.7,5a1,1,0,0,0-.29.71.91.91,0,0,0,.29.68,1,1,0,0,0,.69.28H19.16Zm-12.79,1a1,1,0,0,0-.7.3.94.94,0,0,0-.28.69v8.85A1.88,1.88,0,0,0,6,18.93a1.9,1.9,0,0,0,1.39.57H17.2a1.87,1.87,0,0,0,1.39-.58,1.91,1.91,0,0,0,.58-1.39V8.68A1,1,0,0,0,18.88,8a.89.89,0,0,0-.7-.29,1,1,0,0,0-.69.29.92.92,0,0,0-.29.68v7.87a1,1,0,0,1-1,1H8.34a.94.94,0,0,1-.69-.28,1,1,0,0,1-.29-.71V8.68a1,1,0,0,0-1-1Z" transform="translate(-4.41 -3.76)"/></g></svg>',modify:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.74"><g><path d="M19.79,15.23a.66.66,0,0,1,.3.38.59.59,0,0,1-.07.48l-.8,1.38a.66.66,0,0,1-.38.3.59.59,0,0,1-.48-.07l-.68-.38a4.55,4.55,0,0,1-1.34.77v.78a.64.64,0,0,1-.18.45.61.61,0,0,1-.45.18h-1.6a.6.6,0,0,1-.44-.18.66.66,0,0,1-.19-.45v-.78a4.36,4.36,0,0,1-1.32-.77l-.69.38a.58.58,0,0,1-.48.07.66.66,0,0,1-.38-.3l-.38-.66h.83a1.77,1.77,0,0,0,1.23-.52,1.72,1.72,0,0,0,.51-1.23v-.18a3,3,0,0,0,.49-.28l.15.09a1.83,1.83,0,0,0,.88.23A1.75,1.75,0,0,0,15.84,14l.88-1.52a1.7,1.7,0,0,0,.17-1.32,1.66,1.66,0,0,0-.3-.61,1.84,1.84,0,0,0-.51-.45l-.15-.09,0-.29,0-.28.15-.09a1,1,0,0,0,.26-.18l0,.06v.78a4.34,4.34,0,0,1,1.34.77l.68-.38a.68.68,0,0,1,.48-.06.64.64,0,0,1,.38.29l.8,1.38a.58.58,0,0,1,.07.48.63.63,0,0,1-.3.38l-.68.4a3.84,3.84,0,0,1,.08.76,4.13,4.13,0,0,1-.08.78l.34.18.32.2ZM10.17,7.86a1.9,1.9,0,0,1,1.35,3.23,1.85,1.85,0,0,1-1.35.55A1.9,1.9,0,0,1,8.83,8.41a1.92,1.92,0,0,1,1.34-.55Zm1.58,7.2a.73.73,0,0,1-.21.49.66.66,0,0,1-.48.2H9.29a.68.68,0,0,1-.69-.69V14.2a4.75,4.75,0,0,1-1.48-.86l-.75.45a.73.73,0,0,1-.7,0,.63.63,0,0,1-.25-.26L4.54,12a.67.67,0,0,1-.08-.53.71.71,0,0,1,.32-.42l.75-.43a4.8,4.8,0,0,1-.08-.85,4.71,4.71,0,0,1,.08-.85l-.74-.44a.71.71,0,0,1-.32-.42.65.65,0,0,1,.07-.54L5.42,6a.66.66,0,0,1,.42-.32l.18,0a.73.73,0,0,1,.35.09l.75.43A4.68,4.68,0,0,1,8.6,5.33V4.45a.68.68,0,0,1,.69-.69h1.77a.64.64,0,0,1,.48.2.73.73,0,0,1,.21.49v.88a4.75,4.75,0,0,1,1.48.85L14,5.75a.67.67,0,0,1,.34-.09l.18,0a.71.71,0,0,1,.42.32l.89,1.54a.67.67,0,0,1,.06.52.73.73,0,0,1-.32.43l-.75.42a4.8,4.8,0,0,1,.08.85,4.71,4.71,0,0,1-.08.85l.75.43a.66.66,0,0,1,.32.42.73.73,0,0,1-.06.54l-.89,1.52a.69.69,0,0,1-.25.26.7.7,0,0,1-.35.09.64.64,0,0,1-.34-.09l-.75-.45a4.87,4.87,0,0,1-1.48.86v.87ZM7.23,9.75a3,3,0,0,0,.86,2.08,2.94,2.94,0,1,0,4.16-4.16,3,3,0,0,0-2.08-.85A2.94,2.94,0,0,0,7.23,9.75Z" transform="translate(-4.44 -3.76)"/></g></svg>',revert:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 14.69"><g><path d="M18.26,15V12.3l1.89-2V15a2.58,2.58,0,0,1-.24,1c-.2.58-.75.92-1.65,1H7.56v2L4.41,15.63,7.56,13v2h10.7ZM6.3,8.28V11L4.41,13V8.28a2.58,2.58,0,0,1,.24-1c.2-.58.75-.92,1.65-1H17v-2l3.15,3.34L17,10.3v-2H6.3Z" transform="translate(-4.4 -4.28)"/></g></svg>',auto_size:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M6.71,17.19,6.89,16l1.21-.15A6,6,0,0,1,6.81,13.9a5.78,5.78,0,0,1-.45-2.27A6,6,0,0,1,8.1,7.45a5.83,5.83,0,0,1,4.17-1.73l1-1-1-1A7.89,7.89,0,0,0,5,14.64a7.73,7.73,0,0,0,1.71,2.55Zm5.57,2.31h0A7.86,7.86,0,0,0,17.85,6.07L17.67,7.3l-1.21.15a5.9,5.9,0,0,1,1.29,1.92,5.81,5.81,0,0,1,.45,2.26,5.91,5.91,0,0,1-5.9,5.9l-1,1,.49.49.47.5Z" transform="translate(-4.41 -3.76)"/></g></svg>',insert_row_below:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M15.7,1.3c-0.1-0.1-0.1-0.2-0.2-0.2L15.3,1H0.4L0.3,1.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0.1-0.1,0.1L0,1.4v7.7l0.1,0.1c0,0.1,0.1,0.1,0.2,0.2l0.1,0.1h2.3V9.3l0.1-0.5L3,8.5l0.1-0.2c-0.1,0-0.2,0-0.3,0H1.2v-6h13.3v6h-1.6c-0.1,0-0.2,0-0.3,0l0.1,0.2l0.2,0.4C12.9,9,13,9.2,13,9.3v0.1h2.3l0.2-0.1c0.1,0,0.1-0.1,0.2-0.2l0.1-0.1V1.4L15.7,1.3z"/><path d="M10.5,7.5C9.9,7.1,9.3,6.8,8.6,6.7c-0.2,0-0.5-0.1-0.7,0c-0.2,0-0.5,0-0.7,0C6.6,6.7,6.1,6.9,5.6,7.3C5.2,7.6,4.7,8,4.4,8.4C4.3,8.6,4.2,8.8,4.2,8.9C4.1,9.1,4,9.3,3.9,9.4C3.9,9.6,3.8,9.7,3.8,9.9c0,0.2-0.1,0.3-0.1,0.5v-0.1c-0.1,0.8,0.1,1.6,0.5,2.4c0.4,0.7,1,1.3,1.7,1.7c0.3,0.2,0.6,0.3,0.9,0.3c0.3,0.1,0.7,0.1,1,0.1c0.3,0,0.7,0,1-0.1c0.3-0.1,0.6-0.2,0.9-0.3c0.5-0.3,0.9-0.6,1.3-1c0.3-0.4,0.6-0.8,0.8-1.3c0.1-0.4,0.2-0.9,0.2-1.4c0-0.5-0.1-1-0.3-1.4C11.5,8.6,11.1,8,10.5,7.5z M10.1,11.3H8.5v1.6H8H7.9H7.3v0v-0.1v-1.4H5.7v-0.4v-0.2v-0.6h0h1.5V8.5h1.2v1.6h1.6V11.3z"/></g></svg>',insert_row_above:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M0.1,14.5c0.1,0.1,0.1,0.2,0.2,0.2l0.1,0.1h14.9l0.1-0.1c0,0,0.1-0.1,0.1-0.1c0,0,0.1-0.1,0.1-0.1l0.1-0.1V6.7l-0.1-0.1c0-0.1-0.1-0.1-0.2-0.2l-0.1-0.1h-2.3v0.1l-0.1,0.5l-0.2,0.4l-0.1,0.2c0.1,0,0.2,0,0.3,0h1.6v6H1.3v-6h1.6c0.1,0,0.2,0,0.3,0L3.1,7.3L2.9,6.9C2.8,6.8,2.8,6.6,2.7,6.5V6.3H0.4L0.3,6.4c-0.1,0-0.1,0.1-0.2,0.2L0,6.7v7.7L0.1,14.5z"/><path d="M5.3,8.3c0.6,0.5,1.2,0.8,1.9,0.9c0.2,0,0.5,0.1,0.7,0c0.2,0,0.5,0,0.7,0c0.6-0.1,1.1-0.3,1.6-0.6c0.5-0.3,0.9-0.7,1.2-1.2c0.1-0.2,0.2-0.3,0.3-0.5c0.1-0.2,0.2-0.4,0.2-0.5c0.1-0.1,0.1-0.3,0.1-0.4C12,5.8,12,5.6,12,5.4v0.1c0.1-0.8-0.1-1.6-0.5-2.4c-0.4-0.7-1-1.3-1.7-1.7C9.5,1.3,9.2,1.2,8.9,1.1C8.5,1,8.2,1,7.9,1c-0.3,0-0.7,0-1,0.1C6.6,1.2,6.3,1.3,6,1.4C5.5,1.7,5.1,2,4.7,2.4C4.4,2.8,4.1,3.3,3.9,3.8C3.8,4.2,3.7,4.7,3.7,5.2c0,0.5,0.1,1,0.3,1.4C4.3,7.2,4.7,7.8,5.3,8.3z M5.7,4.5h1.6V2.9h0.5h0.1h0.6v0v0.1v1.4H10v0.4v0.2v0.6h0H8.5v1.6H7.3V5.7H5.7V4.5z"/></g></svg>',insert_column_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M14.5,15.7c0.1-0.1,0.2-0.1,0.2-0.2l0.1-0.1V0.4l-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1L14.4,0H6.7L6.6,0.1c-0.1,0-0.1,0.1-0.2,0.2L6.3,0.4v2.3h0.1l0.5,0.1L7.3,3l0.2,0.1c0-0.1,0-0.2,0-0.3V1.2h6v13.3h-6v-1.6c0-0.1,0-0.2,0-0.3l-0.2,0.1l-0.4,0.2C6.7,12.9,6.6,13,6.4,13H6.3v2.3l0.1,0.2c0,0.1,0.1,0.1,0.2,0.2l0.1,0.1h7.7L14.5,15.7z"/><path d="M8.3,10.5C8.7,10,9,9.3,9.1,8.6c0-0.2,0.1-0.5,0-0.7c0-0.2,0-0.5,0-0.7C9,6.7,8.8,6.1,8.5,5.7C8.2,5.2,7.8,4.8,7.3,4.5C7.2,4.4,7,4.3,6.9,4.2C6.7,4.1,6.5,4,6.4,4C6.2,3.9,6.1,3.9,5.9,3.8c-0.2,0-0.3-0.1-0.5-0.1h0.1C4.7,3.7,3.8,3.9,3.1,4.3C2.4,4.7,1.8,5.3,1.4,6C1.3,6.3,1.2,6.6,1.1,6.9C1,7.2,1,7.6,1,7.9c0,0.3,0,0.7,0.1,1c0.1,0.3,0.2,0.6,0.3,0.9c0.3,0.5,0.6,0.9,1,1.3c0.4,0.3,0.8,0.6,1.3,0.8C4.2,12,4.7,12.1,5.1,12c0.5,0,1-0.1,1.4-0.3C7.2,11.5,7.8,11.1,8.3,10.5zM4.5,10.1V8.5H2.9V8V7.9V7.3h0H3h1.4V5.7h0.4h0.2h0.6v0v1.5h1.6v1.2H5.7v1.6H4.5z"/></g></svg>',insert_column_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M1.3,0.1C1.2,0.2,1.1,0.2,1.1,0.3L1,0.4v14.9l0.1,0.1c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1l0.1,0.1h7.7l0.1-0.1c0.1,0,0.1-0.1,0.2-0.2l0.1-0.1v-2.3H9.3l-0.5-0.1l-0.4-0.2l-0.2-0.1c0,0.1,0,0.2,0,0.3v1.6h-6V1.3h6v1.6c0,0.1,0,0.2,0,0.3l0.2-0.1l0.4-0.2C9,2.9,9.2,2.8,9.3,2.8h0.1V0.5L9.4,0.3c0-0.1-0.1-0.1-0.2-0.2L9.1,0H1.4L1.3,0.1z"/><path d="M7.5,5.3C7,5.8,6.7,6.5,6.6,7.2c0,0.2-0.1,0.5,0,0.7c0,0.2,0,0.5,0,0.7c0.1,0.6,0.3,1.1,0.6,1.6c0.3,0.5,0.7,0.9,1.2,1.2c0.2,0.1,0.3,0.2,0.5,0.3c0.2,0.1,0.4,0.2,0.5,0.2c0.1,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3,0.1,0.5,0.1h-0.1c0.8,0.1,1.6-0.1,2.4-0.5c0.7-0.4,1.3-1,1.7-1.7c0.2-0.3,0.3-0.6,0.3-0.9c0.1-0.3,0.1-0.7,0.1-1c0-0.3,0-0.7-0.1-1c-0.1-0.3-0.2-0.6-0.3-0.9c-0.3-0.5-0.6-0.9-1-1.3C13,4.4,12.5,4.2,12,4c-0.4-0.1-0.9-0.2-1.4-0.2c-0.5,0-1,0.1-1.4,0.2C8.5,4.3,7.9,4.7,7.5,5.3z M11.3,5.7v1.6h1.6v0.5v0.1v0.6h0h-0.1h-1.4v1.6h-0.4h-0.2h-0.6v0V8.5H8.5V7.3h1.6V5.7H11.3z"/></g></svg>',delete_row:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 13.83"><g><path d="M4.7,18.46l.12.08H19.73l.12-.08a.58.58,0,0,0,.22-.22l.08-.12,0-7.69-.08-.11a.77.77,0,0,0-.18-.18l-.11-.08-2.31,0-.08.28-.1.29a1.58,1.58,0,0,1-.12.29l-.14.34s0,0,.18,0H18.9v6H5.64v-6H7.35c.14,0,.2,0,.18,0l-.14-.34a2.85,2.85,0,0,1-.12-.29l-.1-.29-.07-.27-2.31,0-.11.08a.77.77,0,0,0-.18.18l-.08.11,0,7.69.08.12a.47.47,0,0,0,.09.12l.13.09ZM12.11,13a4,4,0,0,0,1.46-.21,4.51,4.51,0,0,0,1.31-.71A4,4,0,0,0,16.26,10a4.32,4.32,0,0,0-.08-2.54,4.34,4.34,0,0,0-1-1.52,4.15,4.15,0,0,0-1.54-1,4.34,4.34,0,0,0-1.35-.22A4.07,4.07,0,0,0,11,4.93,3.94,3.94,0,0,0,9.24,6.07,3.92,3.92,0,0,0,8.15,8.88a3.91,3.91,0,0,0,.12.95A4.16,4.16,0,0,0,12.11,13Zm2.35-4.14v.58H10.09V8.27h4.37v.58Z" transform="translate(-4.4 -4.71)"/></g></svg>',delete_column:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.81 15.74"><g><path d="M5.66,19.42l.12.08,7.69,0,.11-.08a.77.77,0,0,0,.18-.18l.08-.11,0-2.32-.15,0-.45-.15-.42-.18-.17-.07a1,1,0,0,0,0,.27v1.63h-6V5h6V6.62a.9.9,0,0,0,0,.26l.17-.07.42-.17a3.91,3.91,0,0,1,.45-.15l.15,0,0-2.32L13.75,4a.77.77,0,0,0-.18-.18l-.11-.08H5.79l-.13.07a.63.63,0,0,0-.21.22l-.08.12V19.08l.08.12a.47.47,0,0,0,.09.12.35.35,0,0,0,.12.1Zm9-3.67a4.16,4.16,0,0,0,2.36-.51,4.08,4.08,0,0,0,1.67-1.72,4,4,0,0,0,.35-.91,3.79,3.79,0,0,0,.1-1,4.71,4.71,0,0,0-.11-1,5,5,0,0,0-.3-.87,4.25,4.25,0,0,0-1-1.25,4.49,4.49,0,0,0-1.34-.81A4.26,4.26,0,0,0,15,7.48a3.88,3.88,0,0,0-1.41.25A4.32,4.32,0,0,0,11.86,9,4,4,0,0,0,11,10.94a4.4,4.4,0,0,0-.05.68,4.5,4.5,0,0,0,.05.68,3.93,3.93,0,0,0,.61,1.57,4.22,4.22,0,0,0,1.18,1.2,4.59,4.59,0,0,0,.48.27c.2.1.37.17.5.22a2.44,2.44,0,0,0,.45.12,4.61,4.61,0,0,0,.5.07Zm2.54-4.12v.58H12.87V11h4.37v.59Z" transform="translate(-5.37 -3.76)"/></g></svg>',fixed_column_width:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6,5H18A1,1 0 0,1 19,6A1,1 0 0,1 18,7H6A1,1 0 0,1 5,6A1,1 0 0,1 6,5M21,2V4H3V2H21M15,8H17V22H15V8M7,8H9V22H7V8M11,8H13V22H11V8Z" /></svg>',rotate_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M0.5,10.2c0,0.1,0,0.2,0,0.3v0.2l0,0c0.1,0.3,0.3,0.6,0.4,0.9l0,0C1,11.8,1.3,12,1.5,11.9h0.1h0.2h0.1c0.1-0.1,0.3-0.3,0.4-0.5v-0.2c0-0.1,0-0.2-0.1-0.3l0,0c-0.2-0.2-0.3-0.4-0.3-0.7l0,0C1.8,10,1.7,9.9,1.5,9.8c-0.1,0-0.2,0-0.3,0H0.9C0.7,9.9,0.6,10,0.5,10.2L0.5,10.2z"/><path d="M2.2,11.5L2.2,11.5L2.2,11.5z"/><path d="M5.9,3.6L5.9,3.6L5.9,3.6z"/><path d="M0.1,7.9c0,0.3,0,0.6,0,0.9l0,0l0,0l0,0l0,0c0,0.2,0.1,0.3,0.2,0.4l0,0c0.2,0.1,0.3,0.2,0.5,0.2l0,0l0,0c0.2,0,0.4-0.1,0.5-0.3l0,0c0-0.1,0.1-0.3,0.1-0.4V8.6l0,0c0-0.2,0-0.5,0-0.7l0,0c0-0.2-0.1-0.4-0.2-0.5C1.1,7.3,0.9,7.2,0.7,7.2S0.3,7.3,0.2,7.4C0.1,7.5,0,7.7,0.1,7.9z"/><path d="M1.9,12.7L1.9,12.7c0,0.2,0,0.4,0.2,0.5l0,0l0.2,0.3l0,0c0.2,0.1,0.3,0.2,0.5,0.4l0,0l0,0l0,0l0,0C2.9,14,3,14.1,3.2,14.1s0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.3,0.2-0.5v-0.1c0-0.2-0.1-0.4-0.2-0.5l0,0l-0.4-0.4l-0.2-0.2l0,0C3,12.1,2.8,12,2.6,12l0,0c-0.2,0-0.4,0.1-0.5,0.2l0,0C2,12.3,1.9,12.5,1.9,12.7z"/><path d="M6.6,15c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.2,0.2,0.4,0.3l0,0c0.3,0,0.5,0,0.7,0h0.3l0,0c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.3,0.2-0.5l0,0l0,0c0-0.2-0.1-0.4-0.2-0.5l0,0c-0.1-0.1-0.3-0.2-0.5-0.2l0,0H7.9c-0.1,0-0.3,0-0.5,0l0,0H7.3c-0.2-0.1-0.3,0-0.5,0.1l0,0C6.7,14.6,6.6,14.8,6.6,15L6.6,15L6.6,15L6.6,15z"/><path d="M4.2,7.4C4,7.5,4,7.7,4,7.9c0,0.2,0,0.4,0.2,0.5l0,0l3.2,3.2l0,0c0.1,0.1,0.3,0.2,0.5,0.2s0.3-0.1,0.5-0.2l0,0l3.2-3.2l0,0c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5l0,0C11.5,7.3,11,6.7,10,5.8l0,0L8.4,4.2l0,0C8.3,4.1,8.1,4,7.9,4S7.5,4.1,7.4,4.2L4.2,7.4L4.2,7.4z M6.8,9L5.7,7.9l2.2-2.2l2.3,2.2l-2.3,2.2C7.7,9.9,7.3,9.5,6.8,9L6.8,9z"/><path d="M4.1,14.1C4,14.2,4,14.3,4,14.4v0.2l0,0c0.1,0.1,0.2,0.3,0.4,0.4l0,0c0.3,0.1,0.6,0.2,0.9,0.4h0.1h0.1l0,0c0.2,0,0.3-0.1,0.5-0.1l0,0c0.2-0.1,0.3-0.3,0.3-0.4l0,0l0,0l0,0l0,0v-0.2c0-0.1-0.1-0.2-0.1-0.3l0,0C6.1,14.2,6,14.1,5.8,14l0,0c-0.3-0.1-0.5-0.2-0.8-0.2l0,0c-0.1-0.1-0.2-0.1-0.3-0.1H4.5C4.3,13.7,4.2,13.9,4.1,14.1z"/><path d="M9.3,14.4c0,0.1-0.1,0.3,0,0.4V15l0,0c0,0.1,0.1,0.3,0.5,0.4c0.1,0.1,0.3,0.1,0.4,0.1l0,0h0.1l0,0c0.3-0.1,0.6-0.2,0.9-0.3l0,0c0.1-0.1,0.2-0.2,0.3-0.4l0.1-0.3c0-0.1-0.1-0.2-0.1-0.3l0,0c-0.1-0.2-0.2-0.3-0.4-0.4l0,0h-0.3c-0.1,0-0.2,0-0.3,0l0,0c-0.2,0.1-0.5,0.2-0.8,0.3l0,0C9.5,14.1,9.4,14.2,9.3,14.4L9.3,14.4z"/><path d="M11.4,14.7L11.4,14.7L11.4,14.7z"/><path d="M9.5,15.3L9.5,15.3L9.5,15.3z"/><path d="M15.9,7.9c0-1-0.2-2-0.6-3l0,0c-0.4-1-1-1.9-1.7-2.6C12.8,1.6,12,1,11,0.6l0,0C10.1,0.2,9,0,8,0C7.3,0,6.5,0.1,5.8,0.3l0,0C5.2,0.5,4.6,0.8,4,1.1L3.1,0.2l0,0C2.9,0.1,2.8,0,2.6,0H2.4l0,0C2.2,0,2,0.2,1.9,0.4l0,0L0.1,4.9l0,0C0,5,0,5.1,0,5.2c0,0.2,0.1,0.4,0.2,0.5l0,0c0.2,0.1,0.3,0.2,0.5,0.2h0.1H1l0,0l4.7-1.8l0,0C5.9,4,6.1,3.8,6.1,3.6V3.4C6.1,3.2,6,3,5.9,2.9l0,0L5.1,2.1c0.4-0.2,0.8-0.4,1.3-0.5c0.5-0.1,1.1-0.2,1.7-0.2c0.9,0,1.7,0.2,2.5,0.5l0,0c0.8,0.3,1.5,0.8,2.1,1.4c0.6,0.6,1.1,1.3,1.4,2.1l0,0c0.3,0.8,0.5,1.6,0.5,2.5s-0.2,1.7-0.5,2.5l0,0c-0.3,0.8-0.8,1.5-1.4,2.1c-0.2,0.2-0.4,0.3-0.6,0.5l0,0c-0.2,0.1-0.3,0.3-0.3,0.5v0.1c0,0.1,0,0.3,0.1,0.4l0,0c0.1,0.2,0.3,0.3,0.5,0.3l0,0c0.1,0,0.3-0.1,0.4-0.2l0,0l0,0l0,0l0,0c0.2-0.2,0.5-0.4,0.7-0.6l0,0l0,0l0,0l0,0c0.7-0.8,1.3-1.6,1.7-2.6C15.6,10,15.8,9,15.9,7.9z M1.9,4C2,3.8,2.1,3.5,2.3,3.1l0,0L2.7,2l1.2,1.2L1.9,4z"/><path d="M6.8,15.5L6.8,15.5L6.8,15.5z"/></g></svg>',rotate_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M9.9,15.3L9.9,15.3L9.9,15.3z"/><path d="M6.9,15.1L6.9,15.1c0,0.1,0.1,0.3,0.2,0.4l0,0c0.1,0.2,0.3,0.3,0.5,0.3l0,0h0.3c0.2,0,0.4,0,0.7,0l0,0c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.2,0.2-0.4V15c0-0.2-0.1-0.4-0.2-0.4c-0.2-0.1-0.3-0.2-0.5-0.2H8.4l0,0c-0.1,0-0.3,0-0.5,0H7.6l0,0c-0.2,0-0.4,0.1-0.5,0.2C7,14.7,6.9,14.9,6.9,15.1z"/><path d="M6.5,14.4L6.5,14.4L6.5,14.4z"/><path d="M5.8,5.8L5.8,5.8c-1,0.9-1.5,1.5-1.7,1.6l0,0C4,7.5,4,7.7,4,7.9c0,0.2,0,0.4,0.2,0.5l0,0l3.2,3.2l0,0c0.2,0.1,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2l0,0l3.2-3.2l0,0c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5l0,0L8.4,4.2C8.3,4.1,8.1,4,7.9,4C7.7,4,7.5,4.1,7.4,4.2l0,0L5.8,5.8z M5.6,7.9l2.3-2.2l2.2,2.2L9,9l0,0l0,0l0,0l0,0c-0.5,0.6-0.9,0.9-1.1,1.1L5.6,7.9z"/><path d="M9,15.5L9,15.5L9,15.5z"/><path d="M9.6,14.7v0.2l0,0l0,0l0,0l0,0c0.1,0.2,0.1,0.3,0.3,0.3c0.1,0.1,0.3,0.1,0.4,0.1l0,0h0.1h0.1c0.3-0.1,0.6-0.3,0.9-0.4l0,0c0.1-0.1,0.2-0.2,0.3-0.4l0,0v-0.2c0-0.1,0-0.2-0.1-0.3c-0.1-0.2-0.2-0.3-0.4-0.4H11c-0.1,0-0.2,0.1-0.3,0.1l0,0c-0.2,0.1-0.4,0.2-0.7,0.3l0,0l0,0c-0.1,0.1-0.3,0.2-0.4,0.4C9.6,14.5,9.6,14.6,9.6,14.7z"/><path d="M9,14.5L9,14.5L9,14.5z"/><path d="M9.6,14.4L9.6,14.4L9.6,14.4z"/><path d="M11.7,14L11.7,14L11.7,14z"/><path d="M15.6,7.4L15.6,7.4L15.6,7.4z"/><path d="M15,9.4c0.2,0,0.4,0,0.6-0.2l0,0c0.1-0.1,0.2-0.2,0.2-0.4l0,0l0,0l0,0l0,0c0-0.3,0-0.6,0-0.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2s-0.4,0.1-0.5,0.2c-0.1,0.1-0.2,0.3-0.2,0.5l0,0c0,0.2,0,0.4,0,0.7l0,0v0.1c0,0.1,0,0.3,0.1,0.4l0,0C14.6,9.3,14.8,9.4,15,9.4L15,9.4L15,9.4z"/><path d="M14,12h0.1h0.2h0.1c0.2,0,0.5-0.2,0.6-0.4l0,0c0.2-0.3,0.3-0.6,0.4-0.9l0,0v-0.2c0-0.1-0.1-0.2-0.1-0.3c-0.1-0.2-0.2-0.3-0.4-0.4h-0.3c-0.1,0-0.2,0-0.3,0C14.2,9.9,14,10,14,10.3l0,0c-0.1,0.2-0.2,0.5-0.3,0.7l0,0c-0.1,0.1-0.1,0.2-0.1,0.3v0.2l0,0l0,0C13.6,11.6,13.8,11.8,14,12z"/><path d="M14.6,7.4L14.6,7.4L14.6,7.4z"/><path d="M4.4,14.2c-0.1,0.1-0.1,0.2-0.1,0.3l0.1,0.2c0,0.2,0.2,0.3,0.3,0.4l0,0c0.3,0.1,0.6,0.3,1.1,0.4l0,0h0.1l0,0c0.1,0,0.2-0.1,0.4-0.2c0.1,0,0.2-0.2,0.3-0.3l0,0v-0.2c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.2-0.4-0.3l0,0c-0.2-0.1-0.5-0.2-0.7-0.3l0,0c-0.1,0-0.2,0-0.3,0H4.7l0,0C4.6,13.9,4.4,14,4.4,14.2L4.4,14.2z"/><path d="M11.9,13.3c0,0.2,0.1,0.4,0.2,0.6c0.1,0.1,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2l0,0l0,0l0,0l0,0c0.1-0.1,0.3-0.3,0.4-0.4l0,0l0.2-0.3l0,0c0.1-0.2,0.2-0.3,0.2-0.5l0,0c0-0.2-0.1-0.4-0.2-0.5l0,0c-0.1-0.1-0.3-0.2-0.5-0.2l0,0c-0.2,0-0.4,0.1-0.5,0.2l0,0l-0.2,0.2l-0.4,0.4l0,0C12,13,11.9,13.1,11.9,13.3L11.9,13.3z"/><path d="M12.1,13.8L12.1,13.8L12.1,13.8z"/><path d="M11.9,13.3L11.9,13.3L11.9,13.3z"/><path d="M15.9,5.2c0-0.1-0.1-0.2-0.1-0.3l0,0L14,0.4l0,0C13.9,0.2,13.7,0,13.5,0l0,0l0,0h-0.2c-0.2,0-0.4,0.1-0.5,0.2l0,0l-0.9,0.9c-0.5-0.3-1.1-0.6-1.8-0.8l0,0C9.4,0.1,8.7,0,7.9,0c-1,0-2,0.2-3,0.6S3,1.6,2.3,2.3C1.6,3.1,1,3.9,0.6,4.9l0,0C0.2,5.8,0,6.8,0,7.9c0,1,0.2,2,0.6,3s0.9,1.8,1.7,2.6l0,0l0,0l0,0l0,0c0.2,0.2,0.5,0.4,0.7,0.6l0,0l0,0l0,0l0,0c0.2,0.1,0.3,0.2,0.5,0.2l0,0c0.2,0,0.4-0.1,0.6-0.3l0,0c0.1-0.1,0.1-0.3,0.1-0.4v-0.1l0,0C4.1,13.3,4,13.1,3.9,13l0,0c-0.2-0.1-0.4-0.3-0.6-0.5c-0.6-0.6-1.1-1.3-1.4-2.1l0,0C1.6,9.6,1.4,8.8,1.4,7.9s0.2-1.7,0.5-2.5l0,0c0.3-0.8,0.8-1.5,1.4-2.1c0.6-0.6,1.3-1.1,2.1-1.4l0,0C6.2,1.6,7,1.4,7.9,1.4c0.6,0,1.1,0.1,1.7,0.2c0.5,0.1,0.9,0.3,1.3,0.5l-0.8,0.8l0,0C10,3.1,9.9,3.2,9.9,3.4v0.2l0,0l0,0c0,0.2,0.2,0.4,0.4,0.5l0,0l4.5,1.8l0,0H15h0.1c0.2,0,0.4-0.1,0.5-0.2l0,0C15.7,5.6,15.8,5.4,15.9,5.2z M11.8,3.2L13,2l0.4,1.1l0,0c0.2,0.4,0.3,0.7,0.4,0.9L11.8,3.2z"/></g></svg>',mirror_horizontal:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.75 15.74"><g><path d="M13.75,3.76l5.9,15.74h-5.9V3.76ZM4.9,19.5,10.8,3.76V19.5H4.9Z" transform="translate(-4.9 -3.76)"/></g></svg>',mirror_vertical:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.75"><g><path d="M20.15,13.1,4.41,19V13.1H20.15ZM4.41,4.25l15.74,5.9H4.41V4.25Z" transform="translate(-4.41 -4.25)"/></g></svg>',checked:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 12.1"><g><path d="M4.59,12.23l.12.18L9.43,17.5a.58.58,0,0,0,.84,0L20,7.45h0a.58.58,0,0,0,0-.84l-.85-.85a.58.58,0,0,0-.84,0H18.2l-8.12,8.41a.29.29,0,0,1-.42,0l-3.4-3.63a.58.58,0,0,0-.84,0l-.85.85a.6.6,0,0,0-.14.21.51.51,0,0,0,0,.44c.05.06.1.13.16.19Z" transform="translate(-4.38 -5.58)"/></g></svg>',line_break:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,6a1,1,0,0,0-1,1v4a1,1,0,0,1-1,1H7.41l1.3-1.29A1,1,0,0,0,7.29,9.29l-3,3a1,1,0,0,0-.21.33,1,1,0,0,0,0,.76,1,1,0,0,0,.21.33l3,3a1,1,0,0,0,1.42,0,1,1,0,0,0,0-1.42L7.41,14H17a3,3,0,0,0,3-3V7A1,1,0,0,0,19,6Z"/></svg>',audio:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z" /></svg>',image_gallery:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="30 30 150 150"><g><path d="M152.775,120.548V51.651c0-12.271-9.984-22.254-22.254-22.254H43.727c-12.271,0-22.254,9.983-22.254,22.254v68.896c0,12.27,9.983,22.254,22.254,22.254h86.795C142.791,142.802,152.775,132.817,152.775,120.548z M36.394,51.651c0-4.042,3.291-7.333,7.333-7.333h86.795c4.042,0,7.332,3.291,7.332,7.333v23.917l-14.938-17.767c-1.41-1.678-3.487-2.649-5.68-2.658h-0.029c-2.184,0-4.255,0.954-5.674,2.613L76.709,98.519l-9.096-9.398c-1.427-1.474-3.392-2.291-5.448-2.273c-2.052,0.025-4.004,0.893-5.396,2.4L36.394,111.32V51.651z M41.684,127.585l20.697-22.416l9.312,9.622c1.461,1.511,3.489,2.334,5.592,2.27c2.101-0.066,4.075-1.013,5.44-2.612l34.436-40.308l20.693,24.613v21.794c0,4.042-3.29,7.332-7.332,7.332H43.727C43.018,127.88,42.334,127.775,41.684,127.585z M182.616,152.5V75.657c0-4.12-3.34-7.46-7.461-7.46c-4.119,0-7.46,3.34-7.46,7.46V152.5c0,4.112-3.347,7.46-7.461,7.46h-94c-4.119,0-7.46,3.339-7.46,7.459c0,4.123,3.341,7.462,7.46,7.462h94C172.576,174.881,182.616,164.841,182.616,152.5z"/></g></svg>',bookmark:'<svg viewBox="0 0 24 24"><path d="M17,3H7A2,2 0 0,0 5,5V21L12,18L19,21V5C19,3.89 18.1,3 17,3Z" /></svg>',download:'<svg viewBox="0 0 24 24"><path d="M2 12H4V17H20V12H22V17C22 18.11 21.11 19 20 19H4C2.9 19 2 18.11 2 17V12M12 15L17.55 9.54L16.13 8.13L13 11.25V2H11V11.25L7.88 8.13L6.46 9.55L12 15Z" /></svg>',more_text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 180 180"><g><path d="M49.711,142.188h49.027c2.328,0.002,4.394,1.492,5.129,3.699l9.742,29.252c0.363,1.092,1.385,1.828,2.537,1.83l15.883,0.01c0.859,0,1.667-0.412,2.17-1.109s0.641-1.594,0.37-2.41l-16.625-50.045L86.503,28.953c-0.36-1.097-1.383-1.839-2.537-1.842H64.532c-1.153-0.001-2.178,0.736-2.542,1.831L13.847,173.457c-0.271,0.816-0.135,1.713,0.369,2.412c0.503,0.697,1.311,1.109,2.171,1.109h15.872c1.151,0,2.173-0.736,2.537-1.828l9.793-29.287C45.325,143.66,47.39,142.18,49.711,142.188L49.711,142.188z M53.493,119.098l15.607-46.9c0.744-2.196,2.806-3.674,5.125-3.674s4.381,1.478,5.125,3.674l15.607,46.904c0.537,1.621,0.263,3.402-0.736,4.789c-1.018,1.408-2.649,2.24-4.386,2.24H58.615c-1.736,0-3.368-0.832-4.386-2.24C53.23,122.504,52.956,120.721,53.493,119.098L53.493,119.098z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.633,190.465,66.178,190.465,63.32L190.465,63.32z M190.465,101.994c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.887,1.026,5.352,3.056,7.395c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.994L190.465,101.994z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_paragraph:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 180 180"><g><path d="M128.39,28.499H63.493c-25.558,0-46.354,20.796-46.354,46.354c0,25.559,20.796,46.353,46.354,46.353h9.271v55.625h18.542V47.04h9.271V176.83h18.543V47.04h9.271V28.499z M72.764,102.664h-9.271c-15.337,0-27.813-12.475-27.813-27.812c0-15.336,12.476-27.813,27.813-27.813h9.271V102.664z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.633,190.465,66.178,190.465,63.32L190.465,63.32z M190.465,101.994c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.887,1.026,5.352,3.056,7.395c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.994L190.465,101.994z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_plus:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="35 30 140 140"><g><path d="M137.215,102.045c0,3.498-2.835,6.332-6.333,6.332H24.549c-3.498,0-6.334-2.834-6.334-6.332l0,0c0-3.498,2.836-6.333,6.334-6.333h106.333C134.38,95.711,137.215,98.547,137.215,102.045L137.215,102.045z M77.715,161.545c-3.498,0-6.333-2.836-6.333-6.334V48.878c0-3.498,2.836-6.333,6.333-6.333l0,0c3.498,0,6.334,2.835,6.334,6.333v106.333C84.049,158.709,81.213,161.545,77.715,161.545L77.715,161.545z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.632,190.465,66.177,190.465,63.32L190.465,63.32z M190.465,101.993c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.888,1.026,5.353,3.056,7.396c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.993L190.465,101.993z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_horizontal:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 3.58"><g><path d="M4.64,10.73a1.84,1.84,0,0,1,.65-.65,1.76,1.76,0,0,1,1.79,0A1.79,1.79,0,0,1,8,11.63a1.84,1.84,0,0,1-.25.9,1.69,1.69,0,0,1-.65.65,1.8,1.8,0,0,1-2.69-1.55A2.08,2.08,0,0,1,4.64,10.73Zm6.09,0a1.84,1.84,0,0,1,.65-.65,1.78,1.78,0,0,1,2.67,1.55,1.73,1.73,0,0,1-.24.9,1.84,1.84,0,0,1-.65.65,1.76,1.76,0,0,1-1.79,0,1.79,1.79,0,0,1-.64-2.44Zm6.08,0a1.69,1.69,0,0,1,.65-.65,1.76,1.76,0,0,1,1.79,0,1.79,1.79,0,0,1,.9,1.54,1.73,1.73,0,0,1-.24.9,1.84,1.84,0,0,1-.65.65,1.8,1.8,0,0,1-2.69-1.55A2,2,0,0,1,16.81,10.73Z" transform="translate(-4.39 -9.84)"/></g></svg>',more_vertical:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3.94 15.75"><g><path d="M12.28,7.69a1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39,1.92,1.92,0,0,1,.58-1.39,2,2,0,0,1,1.39-.58,1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39,1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58Zm0,2a1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39A1.92,1.92,0,0,1,13.67,13a2,2,0,0,1-1.39.58A1.92,1.92,0,0,1,10.89,13a2,2,0,0,1-.58-1.39,2,2,0,0,1,2-2Zm0,5.9a1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39,1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58,1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39,1.92,1.92,0,0,1,.58-1.39,1.94,1.94,0,0,1,1.39-.58Z" transform="translate(-10.31 -3.75)"/></g></svg>',attachment:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8.38 15.68"><g><path d="M15.23,6h1v9.78a3.88,3.88,0,0,1-1.31,2.45,4,4,0,0,1-6.57-2.45V7A3,3,0,0,1,9.2,4.89a3,3,0,0,1,5,2.09v8.31a1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58,1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39V8h1v7.32a1,1,0,0,0,.29.69,1,1,0,0,0,.69.28A.9.9,0,0,0,13,16a1,1,0,0,0,.29-.69V7a1.92,1.92,0,0,0-.58-1.39A2,2,0,0,0,11.27,5a1.92,1.92,0,0,0-1.39.58A2,2,0,0,0,9.33,7v8.31a3,3,0,1,0,5.9,0V6Z" transform="translate(-8.08 -3.78)"/></g></svg>',map:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.7 15.62"><g><path d="M12.05,12.42a2.93,2.93,0,1,1,2.07-5A2.88,2.88,0,0,1,15,9.49a3,3,0,0,1-.86,2.07,2.89,2.89,0,0,1-2.07.86Zm0-5.36a2.43,2.43,0,0,0-1.72,4.16,2.48,2.48,0,0,0,1.72.72,2.44,2.44,0,0,0,0-4.88Zm0-3.3A5.84,5.84,0,0,1,17.9,9.62a9.94,9.94,0,0,1-1.73,5A33.59,33.59,0,0,1,12.84,19a1.52,1.52,0,0,1-.23.2,1,1,0,0,1-.55.2h0a1,1,0,0,1-.55-.2,1.52,1.52,0,0,1-.23-.2,33.59,33.59,0,0,1-3.33-4.32,9.93,9.93,0,0,1-1.72-5,5.84,5.84,0,0,1,5.85-5.86ZM12,18.34l.08.05.06-.06a35.58,35.58,0,0,0,3.06-3.93,9.35,9.35,0,0,0,1.74-4.77,4.88,4.88,0,0,0-4.88-4.88A4.79,4.79,0,0,0,8.6,6.17,4.84,4.84,0,0,0,7.17,9.62,9.29,9.29,0,0,0,8.91,14.4,36,36,0,0,0,12,18.34Z" transform="translate(-6.2 -3.76)"/></g></svg>',magic_stick:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 15.75"><g><path d="M19.86,19.21a1,1,0,0,0,.28-.68,1,1,0,0,0-.28-.7L13,10.93a1,1,0,0,0-.7-.28,1,1,0,0,0-.68,1.65l6.9,6.9a1,1,0,0,0,.69.29.93.93,0,0,0,.69-.28ZM9.19,8.55a3,3,0,0,0,1.68,0,14.12,14.12,0,0,0,1.41-.32A11.26,11.26,0,0,0,10.8,7.06c-.56-.36-.86-.56-.91-.58S10,5.91,10,5.11s0-1.26-.15-1.37a4.35,4.35,0,0,0-1.19.71c-.53.4-.81.62-.87.68a9,9,0,0,0-2-.6,6.84,6.84,0,0,0-.76-.09s0,.27.08.77a8.6,8.6,0,0,0,.61,2q-.09.09-.69.87a3.59,3.59,0,0,0-.68,1.17c.12.17.57.23,1.36.15S7,9.26,7.15,9.23s.21.36.57.91a10.49,10.49,0,0,0,1.14,1.48c0-.1.14-.57.31-1.4a3,3,0,0,0,0-1.67Z" transform="translate(-4.41 -3.74)"/></g></svg>',empty_file:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12.78 15.75"><g><path d="M14.73,3.76,18.67,7.7v9.84a2,2,0,0,1-2,2H7.84a1.89,1.89,0,0,1-1.38-.58,2,2,0,0,1-.57-1.39V5.73a1.93,1.93,0,0,1,.57-1.38,2,2,0,0,1,1.38-.58h6.62l.26,0v0Zm2.95,4.92h-2a1.93,1.93,0,0,1-1.38-.57,2,2,0,0,1-.58-1.4V6.17c0-.36,0-.84,0-1.43H7.85a1,1,0,0,0-.7.29,1,1,0,0,0-.29.7V17.54a1,1,0,0,0,.29.69,1,1,0,0,0,.69.29h8.85a1,1,0,0,0,.71-.29.92.92,0,0,0,.28-.69Zm0-1L14.73,4.74v2A1,1,0,0,0,15,7.4a1,1,0,0,0,.69.29Z" transform="translate(-5.89 -3.76)"/></g></svg>'},N=n("P6u4"),T=n.n(N);const k={_d:null,_w:null,isIE:null,isIE_Edge:null,isOSX_IOS:null,_propertiesInit:function(){this._d||(this._d=document,this._w=window,this.isIE=navigator.userAgent.indexOf("Trident")>-1,this.isIE_Edge=navigator.userAgent.indexOf("Trident")>-1||navigator.appVersion.indexOf("Edge")>-1,this.isOSX_IOS=/(Mac|iPhone|iPod|iPad)/.test(navigator.platform))},_allowedEmptyNodeList:".se-component, pre, blockquote, hr, li, table, img, iframe, video, audio, canvas",_HTMLConvertor:function(e){const t={"&":"&amp;"," ":"&nbsp;","'":"&apos;",'"':"&quot;","<":"&lt;",">":"&gt;"};return e.replace(/&|\u00A0|'|"|<|>/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},zeroWidthSpace:String.fromCharCode(8203),zeroWidthRegExp:new RegExp(String.fromCharCode(8203),"g"),onlyZeroWidthRegExp:new RegExp("^"+String.fromCharCode(8203)+"+$"),onlyZeroWidthSpace:function(e){return"string"!=typeof e&&(e=e.textContent),""===e||this.onlyZeroWidthRegExp.test(e)},getXMLHttpRequest:function(){if(!this._w.ActiveXObject)return this._w.XMLHttpRequest?new XMLHttpRequest:null;try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){return null}}},createElement:function(e){return this._d.createElement(e)},createTextNode:function(e){return this._d.createTextNode(e||"")},HTMLEncoder:function(e){const t={"<":"$lt;",">":"$gt;"};return e.replace(/<|>/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},HTMLDecoder:function(e){const t={"$lt;":"<","$gt;":">"};return e.replace(/\$lt;|\$gt;/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},hasOwn:function(e,t){return this._hasOwn.call(e,t)},_hasOwn:Object.prototype.hasOwnProperty,getIncludePath:function(e,t){let n="";const i=[],l="js"===t?"script":"link",o="js"===t?"src":"href";let s="(?:";for(let t=0,n=e.length;t<n;t++)s+=e[t]+(t<n-1?"|":")");const a=new this._w.RegExp("(^|.*[\\/])"+s+"(\\.[^\\/]+)?."+t+"(?:\\?.*|;.*)?$","i"),r=new this._w.RegExp(".+\\."+t+"(?:\\?.*|;.*)?$","i");for(let e=this._d.getElementsByTagName(l),t=0;t<e.length;t++)r.test(e[t][o])&&i.push(e[t]);for(let e=0;e<i.length;e++){let t=i[e][o].match(a);if(t){n=t[0];break}}if(""===n&&(n=i.length>0?i[0][o]:""),-1===n.indexOf(":/")&&"//"!==n.slice(0,2)&&(n=0===n.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+n:location.href.match(/^[^\?]*\/(?:)/)[0]+n),!n)throw"[SUNEDITOR.util.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (name: +"+name+", extension: "+t+")";return n},getPageStyle:function(e){let t="";const n=(e||this._d).styleSheets;for(let e,i=0,l=n.length;i<l;i++){try{e=n[i].cssRules}catch(e){continue}if(e)for(let n=0,i=e.length;n<i;n++)t+=e[n].cssText}return t},getIframeDocument:function(e){let t=e.contentWindow||e.contentDocument;return t.document&&(t=t.document),t},getAttributesToString:function(e,t){if(!e.attributes)return"";const n=e.attributes;let i="";for(let e=0,l=n.length;e<l;e++)t&&t.indexOf(n[e].name)>-1||(i+=n[e].name+'="'+n[e].value+'" ');return i},getByteLength:function(e){if(!e||!e.toString)return 0;e=e.toString();const t=this._w.encodeURIComponent;let n,i;return this.isIE_Edge?(i=this._w.unescape(t(e)).length,n=0,null!==t(e).match(/(%0A|%0D)/gi)&&(n=t(e).match(/(%0A|%0D)/gi).length),i+n):(i=new this._w.TextEncoder("utf-8").encode(e).length,n=0,null!==t(e).match(/(%0A|%0D)/gi)&&(n=t(e).match(/(%0A|%0D)/gi).length),i+n)},isWysiwygDiv:function(e){return e&&1===e.nodeType&&(this.hasClass(e,"se-wrapper-wysiwyg")||/^BODY$/i.test(e.nodeName))},isNonEditable:function(e){return e&&1===e.nodeType&&"false"===e.getAttribute("contenteditable")},isTextStyleElement:function(e){return e&&3!==e.nodeType&&/^(strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code)$/i.test(e.nodeName)},isFormatElement:function(e){return e&&1===e.nodeType&&(/^(P|DIV|H[1-6]|PRE|LI|TH|TD)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__replace_.+(\\s|$)|(\\s|^)__se__format__free_.+(\\s|$)"))&&!this.isComponent(e)&&!this.isWysiwygDiv(e)},isRangeFormatElement:function(e){return e&&1===e.nodeType&&(/^(BLOCKQUOTE|OL|UL|FIGCAPTION|TABLE|THEAD|TBODY|TR|TH|TD)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__range_.+(\\s|$)"))},isClosureRangeFormatElement:function(e){return e&&1===e.nodeType&&(/^(TH|TD)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__range__closure_.+(\\s|$)"))},isFreeFormatElement:function(e){return e&&1===e.nodeType&&(/^PRE$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__free_.+(\\s|$)"))&&!this.isComponent(e)&&!this.isWysiwygDiv(e)},isClosureFreeFormatElement:function(e){return e&&1===e.nodeType&&this.hasClass(e,"(\\s|^)__se__format__free__closure_.+(\\s|$)")},isComponent:function(e){return e&&(/se-component/.test(e.className)||/^(TABLE|HR)$/.test(e.nodeName))},isUneditableComponent:function(e){return e&&this.hasClass(e,"__se__uneditable")},isMediaComponent:function(e){return e&&/se-component/.test(e.className)},isNotCheckingNode:function(e){return e&&/katex|__se__tag/.test(e.className)},getFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isRangeFormatElement(e)&&e.firstElementChild,this.isFormatElement(e)&&t(e))return e;e=e.parentNode}return null},getRangeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isRangeFormatElement(e)&&!/^(THEAD|TBODY|TR)$/i.test(e.nodeName)&&t(e))return e;e=e.parentNode}return null},getFreeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isFreeFormatElement(e)&&t(e))return e;e=e.parentNode}return null},getClosureFreeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isClosureFreeFormatElement(e)&&t(e))return e;e=e.parentNode}return null},copyTagAttributes:function(e,t){t.style.cssText&&(e.style.cssText+=t.style.cssText);const n=t.classList;for(let t=0,i=n.length;t<i;t++)this.addClass(e,n[t]);e.style.cssText||e.removeAttribute("style"),e.className.trim()||e.removeAttribute("class")},copyFormatAttributes:function(e,t){(t=t.cloneNode(!1)).className=t.className.replace(/(\s|^)__se__format__[^\s]+/g,""),this.copyTagAttributes(e,t)},getArrayItem:function(e,t,n){if(!e||0===e.length)return null;t=t||function(){return!0};const i=[];for(let l,o=0,s=e.length;o<s;o++)if(l=e[o],t(l)){if(!n)return l;i.push(l)}return n?i:null},getArrayIndex:function(e,t){let n=-1;for(let i=0,l=e.length;i<l;i++)if(e[i]===t){n=i;break}return n},nextIdx:function(e,t){let n=this.getArrayIndex(e,t);return-1===n?-1:n+1},prevIdx:function(e,t){let n=this.getArrayIndex(e,t);return-1===n?-1:n-1},getPositionIndex:function(e){let t=0;for(;e=e.previousSibling;)t+=1;return t},getNodePath:function(e,t,n){const i=[];let l=!0;return this.getParentElement(e,function(e){if(e===t&&(l=!1),l&&!this.isWysiwygDiv(e)){if(n&&3===e.nodeType){let t=null,i=null;n.s=n.e=0;let l=e.previousSibling;for(;l&&3===l.nodeType;)i=l.textContent.replace(this.zeroWidthRegExp,""),n.s+=i.length,e.textContent=i+e.textContent,t=l,l=l.previousSibling,this.removeItem(t);let o=e.nextSibling;for(;o&&3===o.nodeType;)i=o.textContent.replace(this.zeroWidthRegExp,""),n.e+=i.length,e.textContent+=i,t=o,o=o.nextSibling,this.removeItem(t)}i.push(e)}return!1}.bind(this)),i.map(this.getPositionIndex).reverse()},getNodeFromPath:function(e,t){let n,i=t;for(let t=0,l=e.length;t<l&&(n=i.childNodes,0!==n.length);t++)i=n.length<=e[t]?n[n.length-1]:n[e[t]];return i},isSameAttributes:function(e,t){if(3===e.nodeType&&3===t.nodeType)return!0;if(3===e.nodeType||3===t.nodeType)return!1;const n=e.style,i=t.style;let l=0;for(let e=0,t=n.length;e<t;e++)n[n[e]]===i[n[e]]&&l++;const o=e.classList,s=t.classList,a=this._w.RegExp;let r=0;for(let e=0,t=o.length;e<t;e++)a("(s|^)"+o[e]+"(s|$)").test(s.value)&&r++;return l===i.length&&l===n.length&&r===s.length&&r===o.length},isEmptyLine:function(e){return!e||!e.parentNode||!e.querySelector("IMG, IFRAME, AUDIO, VIDEO, CANVAS, TABLE")&&this.onlyZeroWidthSpace(e.textContent)},isList:function(e){return e&&/^(OL|UL)$/i.test("string"==typeof e?e:e.nodeName)},isListCell:function(e){return e&&/^LI$/i.test("string"==typeof e?e:e.nodeName)},isTable:function(e){return e&&/^(TABLE|THEAD|TBODY|TR|TH|TD)$/i.test("string"==typeof e?e:e.nodeName)},isCell:function(e){return e&&/^(TD|TH)$/i.test("string"==typeof e?e:e.nodeName)},isBreak:function(e){return e&&/^BR$/i.test("string"==typeof e?e:e.nodeName)},isAnchor:function(e){return e&&/^A$/i.test("string"==typeof e?e:e.nodeName)},isMedia:function(e){return e&&/^(IMG|IFRAME|AUDIO|VIDEO|CANVAS)$/i.test("string"==typeof e?e:e.nodeName)},isNumber:function(e){return!!e&&/^-?\d+(\.\d+)?$/.test(e+"")},getNumber:function(e,t){if(!e)return 0;let n=(e+"").match(/-?\d+(\.\d+)?/);return n&&n[0]?(n=n[0],t<0?1*n:0===t?this._w.Math.round(1*n):1*(1*n).toFixed(t)):0},getListChildren:function(e,t){const n=[];return e&&e.children&&0!==e.children.length?(t=t||function(){return!0},function i(l){if(e!==l&&t(l)&&n.push(l),l.children)for(let e=0,t=l.children.length;e<t;e++)i(l.children[e])}(e),n):n},getListChildNodes:function(e,t){const n=[];return e&&0!==e.childNodes.length?(t=t||function(){return!0},function i(l){e!==l&&t(l)&&n.push(l);for(let e=0,t=l.childNodes.length;e<t;e++)i(l.childNodes[e])}(e),n):n},getElementDepth:function(e){if(!e||this.isWysiwygDiv(e))return-1;let t=0;for(e=e.parentNode;e&&!this.isWysiwygDiv(e);)t+=1,e=e.parentNode;return t},compareElements:function(e,t){let n=e,i=t;for(;n&&i&&n.parentNode!==i.parentNode;)n=n.parentNode,i=i.parentNode;if(!n||!i)return{ancestor:null,a:e,b:t,result:0};const l=n.parentNode.childNodes,o=this.getArrayIndex(l,n),s=this.getArrayIndex(l,i);return{ancestor:n.parentNode,a:n,b:i,result:o>s?1:o<s?-1:0}},getParentElement:function(e,t){let n;if("function"==typeof t)n=t;else{let e;/^\./.test(t)?(e="className",t=t.split(".")[1]):/^#/.test(t)?(e="id",t="^"+t.split("#")[1]+"$"):/^:/.test(t)?(e="name",t="^"+t.split(":")[1]+"$"):(e="nodeName",t="^"+t+"$");const i=new this._w.RegExp(t,"i");n=function(t){return i.test(t[e])}}for(;e&&!n(e);){if(this.isWysiwygDiv(e))return null;e=e.parentNode}return e},getChildElement:function(e,t,n){let i;if("function"==typeof t)i=t;else{let e;/^\./.test(t)?(e="className",t=t.split(".")[1]):/^#/.test(t)?(e="id",t="^"+t.split("#")[1]+"$"):/^:/.test(t)?(e="name",t="^"+t.split(":")[1]+"$"):(e="nodeName",t="^"+("text"===t?"#"+t:t)+"$");const n=new this._w.RegExp(t,"i");i=function(t){return n.test(t[e])}}const l=this.getListChildNodes(e,(function(e){return i(e)}));return l[n?l.length-1:0]},getEdgeChildNodes:function(e,t){if(e){for(t||(t=e);e&&1===e.nodeType&&e.childNodes.length>0&&!this.isBreak(e);)e=e.firstChild;for(;t&&1===t.nodeType&&t.childNodes.length>0&&!this.isBreak(t);)t=t.lastChild;return{sc:e,ec:t||e}}},getOffset:function(e,t){let n=0,i=0,l=3===e.nodeType?e.parentElement:e;const o=this.getParentElement(e,this.isWysiwygDiv.bind(this));for(;l&&!this.hasClass(l,"se-container")&&l!==o;)n+=l.offsetLeft,i+=l.offsetTop,l=l.offsetParent;const s=t&&/iframe/i.test(t.nodeName);return{left:n+(s?t.parentElement.offsetLeft:0),top:i-(o?o.scrollTop:0)+(s?t.parentElement.offsetTop:0)}},getOverlapRangeAtIndex:function(e,t,n,i){if(e<=i?t<n:t>n)return 0;const l=(e>n?e:n)-(t<i?t:i);return(l<0?-1*l:l)+1},changeTxt:function(e,t){e&&t&&(e.textContent=t)},changeElement:function(e,t){if("string"==typeof t)if(e.outerHTML)e.outerHTML=t;else{const n=this.createElement("DIV");n.innerHTML=t,t=n.firstChild,e.parentNode.replaceChild(t,e)}else 1===t.nodeType&&e.parentNode.replaceChild(t,e)},setStyle:function(e,t,n){e.style[t]=n,n||e.style.cssText||e.removeAttribute("style")},hasClass:function(e,t){if(e)return new this._w.RegExp(t).test(e.className)},addClass:function(e,t){if(!e)return;new this._w.RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className)||(e.className+=(e.className.length>0?" ":"")+t)},removeClass:function(e,t){if(!e)return;const n=new this._w.RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(n," ").trim(),e.className.trim()||e.removeAttribute("class")},toggleClass:function(e,t){if(!e)return;let n=!1;const i=new this._w.RegExp("(\\s|^)"+t+"(\\s|$)");return i.test(e.className)?e.className=e.className.replace(i," ").trim():(e.className+=" "+t,n=!0),e.className.trim()||e.removeAttribute("class"),n},setDisabledButtons:function(e,t){for(let n=0,i=t.length;n<i;n++)t[n].disabled=e},removeItem:function(e){e&&("function"==typeof e.remove?e.remove():e.parentNode&&e.parentNode.removeChild(e))},removeItemAllParents:function(e,t,n){if(!e)return null;let i=null;return t||(t=function(e){if(e===n||this.isComponent(e))return!1;const t=e.textContent.trim();return 0===t.length||/^(\n|\u200B)+$/.test(t)}.bind(this)),function e(n){if(!k.isWysiwygDiv(n)){const l=n.parentNode;l&&t(n)&&(i={sc:n.previousElementSibling,ec:n.nextElementSibling},k.removeItem(n),e(l))}}(e),i},detachNestedList:function(e,t){const n=this._deleteNestedList(e);let i,l,o;if(n){i=n.cloneNode(!1),l=n.childNodes;const t=this.getPositionIndex(e);for(;l[t];)i.appendChild(l[t])}else i=e;if(t)o=this.getListChildren(i,function(e){return this.isListCell(e)&&!e.previousElementSibling}.bind(this));else{const t=this.getElementDepth(e)+2;o=this.getListChildren(e,function(e){return this.isListCell(e)&&!e.previousElementSibling&&this.getElementDepth(e)===t}.bind(this))}for(let e=0,t=o.length;e<t;e++)this._deleteNestedList(o[e]);return n&&(n.parentNode.insertBefore(i,n.nextSibling),l&&0===l.length&&this.removeItem(n)),i===e?i.parentNode:i},_deleteNestedList:function(e){const t=e.parentNode;let n,i,l,o,s,a=t,r=a.parentNode;for(;this.isListCell(r);){for(o=this.getPositionIndex(e),n=r.nextElementSibling,i=r.parentNode,l=a;l;){if(a=a.nextSibling,this.isList(l)){for(s=l.childNodes;s[o];)i.insertBefore(s[o],n);0===s.length&&this.removeItem(l)}else i.appendChild(l);l=a}a=i,r=i.parentNode}return 0===t.children.length&&this.removeItem(t),i},splitElement:function(e,t,n){const i=e.parentNode;let l,o,s,a=0,r=!0;if((!n||n<0)&&(n=0),3===e.nodeType){if(a=this.getPositionIndex(e),t>=0){e.splitText(t);const n=this.getNodeFromPath([a+1],i);this.onlyZeroWidthSpace(n)&&(n.data=this.zeroWidthSpace)}}else 1===e.nodeType&&(e.previousSibling?e=e.previousSibling:this.getElementDepth(e)===n&&(r=!1));let c=e;for(;this.getElementDepth(c)>n;)for(a=this.getPositionIndex(c)+1,c=c.parentNode,s=l,l=c.cloneNode(!1),o=c.childNodes,s&&(this.isListCell(l)&&this.isList(s)&&s.firstElementChild?(l.innerHTML=s.firstElementChild.innerHTML,k.removeItem(s.firstElementChild),s.children.length>0&&l.appendChild(s)):l.appendChild(s));o[a];)l.appendChild(o[a]);c.childNodes.length<=1&&(!c.firstChild||0===c.firstChild.textContent.length)&&(c.innerHTML="<br>");const d=c.parentNode;return r&&(c=c.nextSibling),l?(this.mergeSameTags(l,null,!1),this.mergeNestedTags(l,function(e){return this.isList(e)}.bind(this)),l.childNodes.length>0?d.insertBefore(l,c):l=c,0===i.childNodes.length&&this.removeItem(i),l):c},mergeSameTags:function(e,t,n){const i=this,l=t?t.length:0;let o=null;return l&&(o=this._w.Array.apply(null,new this._w.Array(l)).map(this._w.Number.prototype.valueOf,0)),function e(s,a,r){const c=s.childNodes;for(let d,u,h=0,p=c.length;h<p&&(d=c[h],u=c[h+1],d);h++)if(n&&i._isIgnoreNodeChange(d)||!n&&(i.isTable(d)||i.isListCell(d)||i.isFormatElement(d)&&!i.isFreeFormatElement(d)))(i.isTable(d)||i.isListCell(d))&&e(d,a+1,h);else{if(1===p&&s.nodeName===d.nodeName&&s.parentNode){if(l){let e,n,o,r,c;for(let u=0;u<l;u++)if(e=t[u],e&&e[a]===h){for(n=d,o=s,r=a,c=!0;r>=0;){if(i.getArrayIndex(o.childNodes,n)!==e[r]){c=!1;break}n=d.parentNode,o=n.parentNode,r--}c&&(e.splice(a,1),e[a]=h)}}i.copyTagAttributes(d,s),s.parentNode.insertBefore(d,s),i.removeItem(s)}if(!u){1===d.nodeType&&e(d,a+1,h);break}if(d.nodeName===u.nodeName&&i.isSameAttributes(d,u)&&d.href===u.href){const e=d.childNodes;let n=0;for(let t=0,i=e.length;t<i;t++)e[t].textContent.length>0&&n++;const s=d.lastChild,c=u.firstChild;let p=0;if(s&&c){const e=3===s.nodeType&&3===c.nodeType;p=s.textContent.length;let i=s.previousSibling;for(;i&&3===i.nodeType;)p+=i.textContent.length,i=i.previousSibling;if(n>0&&3===s.nodeType&&3===c.nodeType&&(s.textContent.length>0||c.textContent.length>0)&&n--,l){let i=null;for(let d=0;d<l;d++)if(i=t[d],i&&i[a]>h){if(a>0&&i[a-1]!==r)continue;i[a]-=1,i[a+1]>=0&&i[a]===h&&(i[a+1]+=n,e&&s&&3===s.nodeType&&c&&3===c.nodeType&&(o[d]+=p))}}}if(3===d.nodeType){if(p=d.textContent.length,d.textContent+=u.textContent,l){let e=null;for(let i=0;i<l;i++)if(e=t[i],e&&e[a]>h){if(a>0&&e[a-1]!==r)continue;e[a]-=1,e[a+1]>=0&&e[a]===h&&(e[a+1]+=n,o[i]+=p)}}}else d.innerHTML+=u.innerHTML;i.removeItem(u),h--}else 1===d.nodeType&&e(d,a+1,h)}}(e,0,0),o},mergeNestedTags:function(e,t){"string"==typeof t?t=function(e){return this.test(e.tagName)}.bind(new this._w.RegExp("^("+(t||".+")+")$","i")):"function"!=typeof t&&(t=function(){return!0}),function e(n){let i=n.children;if(1===i.length&&i[0].nodeName===n.nodeName&&t(n)){const e=i[0];for(i=e.children;i[0];)n.appendChild(i[0]);n.removeChild(e)}for(let t=0,i=n.children.length;t<i;t++)e(n.children[t])}(e)},removeEmptyNode:function(e,t){const n=this;t&&(t=n.getParentElement(t,(function(t){return e===t.parentElement}))),function i(l){if(n._notTextNode(l)||l===t||n.isNonEditable(l))return 0;if(l===e||!n.onlyZeroWidthSpace(l.textContent)||l.firstChild&&n.isBreak(l.firstChild)||l.querySelector(n._allowedEmptyNodeList)){const e=l.children;for(let t=0,l=e.length,o=0;t<l;t++)e[t+o]&&!n.isComponent(e[t+o])&&(o+=i(e[t+o]))}else if(l.parentNode)return l.parentNode.removeChild(l),-1;return 0}(e),0===e.childNodes.length&&(e.innerHTML="<br>")},htmlRemoveWhiteSpace:function(e){return e?e.trim().replace(/<\/?(?!strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code)[^>^<]+>\s+(?=<)/gi,(function(e){return e.trim()})):""},sortByDepth:function(e,t){const n=t?1:-1,i=-1*n;e.sort(function(e,t){return this.isListCell(e)&&this.isListCell(t)?(e=this.getElementDepth(e))>(t=this.getElementDepth(t))?n:e<t?i:0:0}.bind(this))},_isIgnoreNodeChange:function(e){return e&&3!==e.nodeType&&(this.isNonEditable(e)||!this.isTextStyleElement(e))},_isMaintainedNode:function(e){return e&&3!==e.nodeType&&/^(a|label|code)$/i.test("string"==typeof e?e:e.nodeName)},_isSizeNode:function(e){return e&&3!==e.nodeType&&this.isTextStyleElement(e)&&!!e.style.fontSize},_notTextNode:function(e){return e&&3!==e.nodeType&&(this.isComponent(e)||/^(br|input|select|canvas|img|iframe|audio|video)$/i.test("string"==typeof e?e:e.nodeName))},_disallowedTags:function(e){return/^(meta|script|link|style|[a-z]+\:[a-z]+)$/i.test(e.nodeName)},createTagsWhitelist:function(e){return new RegExp("<\\/?\\b(?!\\b"+e.replace(/\|/g,"\\b|\\b")+"\\b)[^>]*>","gi")},_consistencyCheckOfHTML:function(e,t){const n=[],i=[],l=[],o=[],s=this.getListChildNodes(e,function(s){if(1!==s.nodeType)return!1;if(!t.test(s.nodeName)&&0===s.childNodes.length&&this.isNotCheckingNode(s))return n.push(s),!1;const a=!this.getParentElement(s,this.isNotCheckingNode);if(!this.isTable(s)&&!this.isListCell(s)&&(this.isFormatElement(s)||this.isRangeFormatElement(s)||this.isTextStyleElement(s))&&0===s.childNodes.length&&a)return i.push(s),!1;if(this.isList(s.parentNode)&&!this.isList(s)&&!this.isListCell(s))return l.push(s),!1;if(this.isCell(s)){const e=s.firstElementChild;if(!this.isFormatElement(e)&&!this.isRangeFormatElement(e)&&!this.isComponent(e))return o.push(s),!1}return s.parentNode!==e&&(this.isFormatElement(s)||this.isComponent(s)||this.isList(s))&&!this.isRangeFormatElement(s.parentNode)&&!this.isListCell(s.parentNode)&&!this.getParentElement(s,this.isComponent)&&a}.bind(this));for(let e=0,t=n.length;e<t;e++)this.removeItem(n[e]);const a=[];for(let e,t,n=0,i=s.length;n<i;n++)e=s[n],t=e.parentNode,t&&t.parentNode&&(t.parentNode.insertBefore(e,t),a.push(t));for(let e,t=0,n=a.length;t<n;t++)e=a[t],this.onlyZeroWidthSpace(e.textContent.trim())&&this.removeItem(e);for(let e=0,t=i.length;e<t;e++)this.removeItem(i[e]);for(let e,t,n,i,o=0,s=l.length;o<s;o++){for(e=l[o],t=this.createElement("LI"),n=e.childNodes;n[0];)t.appendChild(n[0]);i=e.parentNode,i&&(i.insertBefore(t,e),this.removeItem(e))}for(let e,t,n=0,i=o.length;n<i;n++)e=o[n],t=this.createElement("DIV"),t.innerHTML=0===e.textContent.trim().length&&0===e.children.length?"<br>":e.innerHTML,e.innerHTML=t.outerHTML},_setDefaultOptionStyle:function(e,t){let n="";e.height&&(n+="height:"+e.height+";"),e.minHeight&&(n+="min-height:"+e.minHeight+";"),e.maxHeight&&(n+="max-height:"+e.maxHeight+";"),e.position&&(n+="position:"+e.position+";"),e.width&&(n+="width:"+e.width+";"),e.minWidth&&(n+="min-width:"+e.minWidth+";"),e.maxWidth&&(n+="max-width:"+e.maxWidth+";");let i="",l="",o="";const s=(t=n+t).split(";");for(let t,n=0,a=s.length;n<a;n++)t=s[n].trim(),t&&(/^(min-|max-)?width\s*:/.test(t)||/^(z-index|position)\s*:/.test(t)?i+=t+";":/^(min-|max-)?height\s*:/.test(t)?(/^height/.test(t)&&"auto"===t.split(":")[1].trim()&&(e.height="auto"),l+=t+";"):o+=t+";");return{top:i,frame:l,editor:o}},_setIframeDocument:function(e,t){e.setAttribute("scrolling","auto"),e.contentDocument.head.innerHTML='<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1">'+this._setIframeCssTags(t),e.contentDocument.body.className=t._editableClass,e.contentDocument.body.setAttribute("contenteditable",!0)},_setIframeCssTags:function(e){const t=e.iframeCSSFileName,n=this._w.RegExp;let i="";for(let e,l=0,o=t.length;l<o;l++){if(e=[],/(^https?:\/\/)|(^data:text\/css,)/.test(t[l]))e.push(t[l]);else{const i=new n("(^|.*[\\/])"+t[l]+"(\\..+)?\\.css(?:\\?.*|;.*)?$","i");for(let t,n=document.getElementsByTagName("link"),l=0,o=n.length;l<o;l++)t=n[l].href.match(i),t&&e.push(t[0])}if(!e||0===e.length)throw'[SUNEDITOR.constructor.iframe.fail] The suneditor CSS files installation path could not be automatically detected. Please set the option property "iframeCSSFileName" before creating editor instances.';for(let t=0,n=e.length;t<n;t++)i+='<link href="'+e[t]+'" rel="stylesheet">'}return i+("auto"===e.height?"<style>\n/** Iframe height auto */\nbody{height: min-content; overflow: hidden;}\n</style>":"")}};var L=k,B={init:function(e,t){"object"!=typeof t&&(t={});const n=document;this._initOptions(e,t);const i=n.createElement("DIV");i.className="sun-editor"+(t.rtl?" se-rtl":""),e.id&&(i.id="suneditor_"+e.id);const l=n.createElement("DIV");l.className="se-container";const o=this._createToolBar(n,t.buttonList,t.plugins,t);o.element.style.visibility="hidden",o.pluginCallButtons.math&&this._checkKatexMath(t.katex);const s=n.createElement("DIV");s.className="se-arrow";const a=n.createElement("DIV");a.className="se-toolbar-sticky-dummy";const r=n.createElement("DIV");r.className="se-wrapper";const c=this._initElements(t,i,o.element,s),d=c.bottomBar,u=c.wysiwygFrame,h=c.placeholder;let p=c.codeView;const g=d.resizingBar,m=d.navigation,f=d.charWrapper,_=d.charCounter,b=n.createElement("DIV");b.className="se-loading-box sun-editor-common",b.innerHTML='<div class="se-loading-effect"></div>';const v=n.createElement("DIV");v.className="se-line-breaker",v.innerHTML='<button class="se-btn">'+t.icons.line_break+"</button>";const y=n.createElement("DIV");y.className+="se-line-breaker-component";const C=y.cloneNode(!0);y.innerHTML=C.innerHTML=t.icons.line_break;const w=n.createElement("DIV");w.className="se-resizing-back";const x=t.toolbarContainer;return x&&x.appendChild(o.element),r.appendChild(p),h&&r.appendChild(h),x||l.appendChild(o.element),l.appendChild(a),l.appendChild(r),l.appendChild(w),l.appendChild(b),l.appendChild(v),l.appendChild(y),l.appendChild(C),g&&l.appendChild(g),i.appendChild(l),p=this._checkCodeMirror(t,p),{constructed:{_top:i,_relative:l,_toolBar:o.element,_menuTray:o._menuTray,_editorArea:r,_wysiwygArea:u,_codeArea:p,_placeholder:h,_resizingBar:g,_navigation:m,_charWrapper:f,_charCounter:_,_loading:b,_lineBreaker:v,_lineBreaker_t:y,_lineBreaker_b:C,_resizeBack:w,_stickyDummy:a,_arrow:s},options:t,plugins:o.plugins,pluginCallButtons:o.pluginCallButtons,_responsiveButtons:o.responsiveButtons}},_checkCodeMirror:function(e,t){if(e.codeMirror){const n=[{mode:"htmlmixed",htmlMode:!0,lineNumbers:!0,lineWrapping:!0},e.codeMirror.options||{}].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{});"auto"===e.height&&(n.viewportMargin=1/0,n.height="auto");const i=e.codeMirror.src.fromTextArea(t,n);i.display.wrapper.style.cssText=t.style.cssText,e.codeMirrorEditor=i,(t=i.display.wrapper).className+=" se-wrapper-code-mirror"}return t},_checkKatexMath:function(e){if(!e)throw Error('[SUNEDITOR.create.fail] To use the math button you need to add a "katex" object to the options.');const t=[{throwOnError:!1},e.options||{}].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{});e.options=t},_setOptions:function(e,t,n){this._initOptions(t.element.originElement,e);const i=t.element,l=i.relative,o=i.editorArea,s=e.toolbarContainer&&e.toolbarContainer!==n.toolbarContainer,a=e.lang!==n.lang||e.buttonList!==n.buttonList||e.mode!==n.mode||s,r=this._createToolBar(document,a?e.buttonList:n.buttonList,e.plugins,e);r.pluginCallButtons.math&&this._checkKatexMath(e.katex);const c=document.createElement("DIV");c.className="se-arrow",a&&(r.element.style.visibility="hidden",s?(e.toolbarContainer.appendChild(r.element),i.toolbar.parentElement.removeChild(i.toolbar)):i.toolbar.parentElement.replaceChild(r.element,i.toolbar),i.toolbar=r.element,i._menuTray=r._menuTray,i._arrow=c);const d=this._initElements(e,i.topArea,a?r.element:i.toolbar,c),u=d.bottomBar,h=d.wysiwygFrame,p=d.placeholder;let g=d.codeView;return i.resizingBar&&l.removeChild(i.resizingBar),u.resizingBar&&l.appendChild(u.resizingBar),o.innerHTML="",o.appendChild(g),p&&o.appendChild(p),g=this._checkCodeMirror(e,g),i.resizingBar=u.resizingBar,i.navigation=u.navigation,i.charWrapper=u.charWrapper,i.charCounter=u.charCounter,i.wysiwygFrame=h,i.code=g,i.placeholder=p,e.rtl?L.addClass(i.topArea,"se-rtl"):L.removeClass(i.topArea,"se-rtl"),{callButtons:r.pluginCallButtons,plugins:r.plugins,toolbar:r}},_initElements:function(e,t,n,i){t.style.cssText=e._editorStyles.top,/inline/i.test(e.mode)?(n.className+=" se-toolbar-inline",n.style.width=e.toolbarWidth):/balloon/i.test(e.mode)&&(n.className+=" se-toolbar-balloon",n.style.width=e.toolbarWidth,n.appendChild(i));const l=document.createElement(e.iframe?"IFRAME":"DIV");l.className="se-wrapper-inner se-wrapper-wysiwyg",e.iframe?(l.allowFullscreen=!0,l.frameBorder=0,l.style.cssText=e._editorStyles.frame):(l.setAttribute("contenteditable",!0),l.setAttribute("scrolling","auto"),l.className+=" "+e._editableClass,l.style.cssText=e._editorStyles.frame+e._editorStyles.editor);const o=document.createElement("TEXTAREA");o.className="se-wrapper-inner se-wrapper-code",o.style.cssText=e._editorStyles.frame,o.style.display="none","auto"===e.height&&(o.style.overflow="hidden");let s=null,a=null,r=null,c=null;if(e.resizingBar&&(s=document.createElement("DIV"),s.className="se-resizing-bar sun-editor-common",a=document.createElement("DIV"),a.className="se-navigation sun-editor-common",s.appendChild(a),e.charCounter)){if(r=document.createElement("DIV"),r.className="se-char-counter-wrapper",e.charCounterLabel){const t=document.createElement("SPAN");t.className="se-char-label",t.textContent=e.charCounterLabel,r.appendChild(t)}if(c=document.createElement("SPAN"),c.className="se-char-counter",c.textContent="0",r.appendChild(c),e.maxCharCount>0){const t=document.createElement("SPAN");t.textContent=" / "+e.maxCharCount,r.appendChild(t)}s.appendChild(r)}let d=null;return e.placeholder&&(d=document.createElement("SPAN"),d.className="se-placeholder",d.innerText=e.placeholder),{bottomBar:{resizingBar:s,navigation:a,charWrapper:r,charCounter:c},wysiwygFrame:l,codeView:o,placeholder:d}},_initOptions:function(e,t){t.lang=t.lang||T.a,t.defaultTag="string"==typeof t.defaultTag?t.defaultTag:"p";const n=t.textTags=[{bold:"STRONG",underline:"U",italic:"EM",strike:"DEL",sub:"SUB",sup:"SUP"},t.textTags||{}].reduce((function(e,t){for(let n in t)e[n]=t[n];return e}),{});t._textTagsMap={strong:n.bold,b:n.bold,u:n.underline,ins:n.underline,em:n.italic,i:n.italic,del:n.strike,strike:n.strike,s:n.strike,sub:n.sub,sup:n.sup},t.value="string"==typeof t.value?t.value:null,t.historyStackDelayTime="number"==typeof t.historyStackDelayTime?t.historyStackDelayTime:400;t._defaultTagsWhitelist="string"==typeof t._defaultTagsWhitelist?t._defaultTagsWhitelist:"br|p|div|pre|blockquote|h1|h2|h3|h4|h5|h6|ol|ul|li|hr|figure|figcaption|img|iframe|audio|video|source|table|thead|tbody|tr|th|td|a|b|strong|var|i|em|u|ins|s|span|strike|del|sub|sup|code|svg|path",t._editorTagsWhitelist=this._setWhitelist(t._defaultTagsWhitelist+("string"==typeof t.addTagsWhitelist&&t.addTagsWhitelist.length>0?"|"+t.addTagsWhitelist:""),t.tagsBlacklist),t.pasteTagsWhitelist=this._setWhitelist("string"==typeof t.pasteTagsWhitelist?t.pasteTagsWhitelist:t._editorTagsWhitelist,t.pasteTagsBlacklist),t.attributesWhitelist=t.attributesWhitelist&&"object"==typeof t.attributesWhitelist?t.attributesWhitelist:null,t.mode=t.mode||"classic",t.rtl=!!t.rtl,t._editableClass="sun-editor-editable"+(t.rtl?" se-rtl":""),t._printClass="string"==typeof t._printClass?t._printClass:null,t.toolbarWidth=t.toolbarWidth?L.isNumber(t.toolbarWidth)?t.toolbarWidth+"px":t.toolbarWidth:"auto",t.toolbarContainer="string"==typeof t.toolbarContainer?document.querySelector(t.toolbarContainer):t.toolbarContainer,t.stickyToolbar=/balloon/i.test(t.mode)||t.toolbarContainer?-1:void 0===t.stickyToolbar?0:/^\d+/.test(t.stickyToolbar)?L.getNumber(t.stickyToolbar,0):-1,t.fullScreenOffset=void 0===t.fullScreenOffset?0:/^\d+/.test(t.fullScreenOffset)?L.getNumber(t.fullScreenOffset,0):0,t.iframe=t.fullPage||t.iframe,t.fullPage=!!t.fullPage,t.iframeCSSFileName=t.iframe?"string"==typeof t.iframeCSSFileName?[t.iframeCSSFileName]:t.iframeCSSFileName||["suneditor"]:null,t.previewTemplate="string"==typeof t.previewTemplate?t.previewTemplate:null,t.printTemplate="string"==typeof t.printTemplate?t.printTemplate:null,t.codeMirror=t.codeMirror?t.codeMirror.src?t.codeMirror:{src:t.codeMirror}:null,t.katex=t.katex?t.katex.src?t.katex:{src:t.katex}:null,t.mathFontSize=t.mathFontSize?t.mathFontSize:[{text:"1",value:"1em"},{text:"1.5",value:"1.5em"},{text:"2",value:"2em"},{text:"2.5",value:"2.5em"}],t.position="string"==typeof t.position?t.position:null,t.display=t.display||("none"!==e.style.display&&e.style.display?e.style.display:"block"),t.popupDisplay=t.popupDisplay||"full",t.resizingBar=void 0===t.resizingBar?!/inline|balloon/i.test(t.mode):t.resizingBar,t.showPathLabel=!!t.resizingBar&&("boolean"!=typeof t.showPathLabel||t.showPathLabel),t.charCounter=t.maxCharCount>0||"boolean"==typeof t.charCounter&&t.charCounter,t.charCounterType="string"==typeof t.charCounterType?t.charCounterType:"char",t.charCounterLabel="string"==typeof t.charCounterLabel?t.charCounterLabel.trim():null,t.maxCharCount=L.isNumber(t.maxCharCount)&&t.maxCharCount>-1?1*t.maxCharCount:null,t.width=t.width?L.isNumber(t.width)?t.width+"px":t.width:e.clientWidth?e.clientWidth+"px":"100%",t.minWidth=(L.isNumber(t.minWidth)?t.minWidth+"px":t.minWidth)||"",t.maxWidth=(L.isNumber(t.maxWidth)?t.maxWidth+"px":t.maxWidth)||"",t.height=t.height?L.isNumber(t.height)?t.height+"px":t.height:e.clientHeight?e.clientHeight+"px":"auto",t.minHeight=(L.isNumber(t.minHeight)?t.minHeight+"px":t.minHeight)||"",t.maxHeight=(L.isNumber(t.maxHeight)?t.maxHeight+"px":t.maxHeight)||"",t.defaultStyle="string"==typeof t.defaultStyle?t.defaultStyle:"",t.font=t.font?t.font:null,t.fontSize=t.fontSize?t.fontSize:null,t.formats=t.formats?t.formats:null,t.colorList=t.colorList?t.colorList:null,t.lineHeights=t.lineHeights?t.lineHeights:null,t.paragraphStyles=t.paragraphStyles?t.paragraphStyles:null,t.textStyles=t.textStyles?t.textStyles:null,t.fontSizeUnit="string"==typeof t.fontSizeUnit&&t.fontSizeUnit.trim()||"px",t.imageResizing=void 0===t.imageResizing||t.imageResizing,t.imageHeightShow=void 0===t.imageHeightShow||!!t.imageHeightShow,t.imageWidth=t.imageWidth?L.isNumber(t.imageWidth)?t.imageWidth+"px":t.imageWidth:"auto",t.imageHeight=t.imageHeight?L.isNumber(t.imageHeight)?t.imageHeight+"px":t.imageHeight:"auto",t.imageSizeOnlyPercentage=!!t.imageSizeOnlyPercentage,t._imageSizeUnit=t.imageSizeOnlyPercentage?"%":"px",t.imageRotation=void 0!==t.imageRotation?t.imageRotation:!(t.imageSizeOnlyPercentage||!t.imageHeightShow),t.imageFileInput=void 0===t.imageFileInput||t.imageFileInput,t.imageUrlInput=void 0===t.imageUrlInput||!t.imageFileInput||t.imageUrlInput,t.imageUploadHeader=t.imageUploadHeader||null,t.imageUploadUrl="string"==typeof t.imageUploadUrl?t.imageUploadUrl:null,t.imageUploadSizeLimit=/\d+/.test(t.imageUploadSizeLimit)?L.getNumber(t.imageUploadSizeLimit,0):null,t.imageMultipleFile=!!t.imageMultipleFile,t.imageAccept="string"!=typeof t.imageAccept||"*"===t.imageAccept.trim()?"image/*":t.imageAccept.trim()||"image/*",t.imageGalleryUrl="string"==typeof t.imageGalleryUrl?t.imageGalleryUrl:null,t.imageGalleryHeader=t.imageGalleryHeader||null,t.videoResizing=void 0===t.videoResizing||t.videoResizing,t.videoHeightShow=void 0===t.videoHeightShow||!!t.videoHeightShow,t.videoRatioShow=void 0===t.videoRatioShow||!!t.videoRatioShow,t.videoWidth=t.videoWidth&&L.getNumber(t.videoWidth,0)?L.isNumber(t.videoWidth)?t.videoWidth+"px":t.videoWidth:"",t.videoHeight=t.videoHeight&&L.getNumber(t.videoHeight,0)?L.isNumber(t.videoHeight)?t.videoHeight+"px":t.videoHeight:"",t.videoSizeOnlyPercentage=!!t.videoSizeOnlyPercentage,t._videoSizeUnit=t.videoSizeOnlyPercentage?"%":"px",t.videoRotation=void 0!==t.videoRotation?t.videoRotation:!(t.videoSizeOnlyPercentage||!t.videoHeightShow),t.videoRatio=L.getNumber(t.videoRatio,4)||.5625,t.videoRatioList=t.videoRatioList?t.videoRatioList:null,t.youtubeQuery=(t.youtubeQuery||"").replace("?",""),t.videoFileInput=!!t.videoFileInput,t.videoUrlInput=void 0===t.videoUrlInput||!t.videoFileInput||t.videoUrlInput,t.videoUploadHeader=t.videoUploadHeader||null,t.videoUploadUrl="string"==typeof t.videoUploadUrl?t.videoUploadUrl:null,t.videoUploadSizeLimit=/\d+/.test(t.videoUploadSizeLimit)?L.getNumber(t.videoUploadSizeLimit,0):null,t.videoMultipleFile=!!t.videoMultipleFile,t.videoTagAttrs=t.videoTagAttrs||null,t.videoIframeAttrs=t.videoIframeAttrs||null,t.videoAccept="string"!=typeof t.videoAccept||"*"===t.videoAccept.trim()?"video/*":t.videoAccept.trim()||"video/*",t.audioWidth=t.audioWidth?L.isNumber(t.audioWidth)?t.audioWidth+"px":t.audioWidth:"",t.audioHeight=t.audioHeight?L.isNumber(t.audioHeight)?t.audioHeight+"px":t.audioHeight:"",t.audioFileInput=!!t.audioFileInput,t.audioUrlInput=void 0===t.audioUrlInput||!t.audioFileInput||t.audioUrlInput,t.audioUploadHeader=t.audioUploadHeader||null,t.audioUploadUrl="string"==typeof t.audioUploadUrl?t.audioUploadUrl:null,t.audioUploadSizeLimit=/\d+/.test(t.audioUploadSizeLimit)?L.getNumber(t.audioUploadSizeLimit,0):null,t.audioMultipleFile=!!t.audioMultipleFile,t.audioTagAttrs=t.audioTagAttrs||null,t.audioAccept="string"!=typeof t.audioAccept||"*"===t.audioAccept.trim()?"audio/*":t.audioAccept.trim()||"audio/*",t.tableCellControllerPosition="string"==typeof t.tableCellControllerPosition?t.tableCellControllerPosition.toLowerCase():"cell",t.linkProtocol="string"==typeof t.linkProtocol?t.linkProtocol:null,t.linkRel=Array.isArray(t.linkRel)?t.linkRel:[],t.linkRelDefault=t.linkRelDefault||{},t.tabDisable=!!t.tabDisable,t.shortcutsDisable=Array.isArray(t.shortcutsDisable)?t.shortcutsDisable:[],t.shortcutsHint=void 0===t.shortcutsHint||!!t.shortcutsHint,t.callBackSave=t.callBackSave?t.callBackSave:null,t.templates=t.templates?t.templates:null,t.placeholder="string"==typeof t.placeholder?t.placeholder:null,t.mediaAutoSelect=void 0===t.mediaAutoSelect||!!t.mediaAutoSelect,t.buttonList=t.buttonList?t.buttonList:[["undo","redo"],["bold","underline","italic","strike","subscript","superscript"],["removeFormat"],["outdent","indent"],["fullScreen","showBlocks","codeView"],["preview","print"]],t.rtl&&(t.buttonList=t.buttonList.reverse()),t.icons=t.icons&&"object"==typeof t.icons?[S,t.icons].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{}):S,t.icons=t.rtl?[t.icons,t.icons.rtl].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{}):t.icons,t._editorStyles=L._setDefaultOptionStyle(t,t.defaultStyle)},_setWhitelist:function(e,t){if("string"!=typeof t)return e;t=t.split("|"),e=e.split("|");for(let n,i=0,l=t.length;i<l;i++)n=e.indexOf(t[i]),n>-1&&e.splice(n,1);return e.join("|")},_defaultButtons:function(e){const t=e.icons,n=e.lang,i=L.isOSX_IOS?"⌘":"CTRL",l=L.isOSX_IOS?"⇧":"+SHIFT",o=e.shortcutsHint?e.shortcutsDisable:["bold","strike","underline","italic","undo","indent","save"],s=e.rtl?["[","]"]:["]","["];return{bold:["_se_command_bold",n.toolbar.bold+'<span class="se-shortcut">'+(o.indexOf("bold")>-1?"":i+'+<span class="se-shortcut-key">B</span>')+"</span>","bold","",t.bold],underline:["_se_command_underline",n.toolbar.underline+'<span class="se-shortcut">'+(o.indexOf("underline")>-1?"":i+'+<span class="se-shortcut-key">U</span>')+"</span>","underline","",t.underline],italic:["_se_command_italic",n.toolbar.italic+'<span class="se-shortcut">'+(o.indexOf("italic")>-1?"":i+'+<span class="se-shortcut-key">I</span>')+"</span>","italic","",t.italic],strike:["_se_command_strike",n.toolbar.strike+'<span class="se-shortcut">'+(o.indexOf("strike")>-1?"":i+l+'+<span class="se-shortcut-key">S</span>')+"</span>","strike","",t.strike],subscript:["_se_command_subscript",n.toolbar.subscript,"SUB","",t.subscript],superscript:["_se_command_superscript",n.toolbar.superscript,"SUP","",t.superscript],removeFormat:["",n.toolbar.removeFormat,"removeFormat","",t.erase],indent:["_se_command_indent",n.toolbar.indent+'<span class="se-shortcut">'+(o.indexOf("indent")>-1?"":i+'+<span class="se-shortcut-key">'+s[0]+"</span>")+"</span>","indent","",t.outdent],outdent:["_se_command_outdent",n.toolbar.outdent+'<span class="se-shortcut">'+(o.indexOf("indent")>-1?"":i+'+<span class="se-shortcut-key">'+s[1]+"</span>")+"</span>","outdent","",t.indent],fullScreen:["se-code-view-enabled se-resizing-enabled _se_command_fullScreen",n.toolbar.fullScreen,"fullScreen","",t.expansion],showBlocks:["_se_command_showBlocks",n.toolbar.showBlocks,"showBlocks","",t.show_blocks],codeView:["se-code-view-enabled se-resizing-enabled _se_command_codeView",n.toolbar.codeView,"codeView","",t.code_view],undo:["_se_command_undo se-resizing-enabled",n.toolbar.undo+'<span class="se-shortcut">'+(o.indexOf("undo")>-1?"":i+'+<span class="se-shortcut-key">Z</span>')+"</span>","undo","",t.undo],redo:["_se_command_redo se-resizing-enabled",n.toolbar.redo+'<span class="se-shortcut">'+(o.indexOf("undo")>-1?"":i+'+<span class="se-shortcut-key">Y</span> / '+i+l+'+<span class="se-shortcut-key">Z</span>')+"</span>","redo","",t.redo],preview:["se-resizing-enabled",n.toolbar.preview,"preview","",t.preview],print:["se-resizing-enabled",n.toolbar.print,"print","",t.print],save:["_se_command_save se-resizing-enabled",n.toolbar.save+'<span class="se-shortcut">'+(o.indexOf("save")>-1?"":i+'+<span class="se-shortcut-key">S</span>')+"</span>","save","",t.save],blockquote:["",n.toolbar.tag_blockquote,"blockquote","command",t.blockquote],font:["se-btn-select se-btn-tool-font",n.toolbar.font,"font","submenu",'<span class="txt">'+n.toolbar.font+"</span>"+t.arrow_down],formatBlock:["se-btn-select se-btn-tool-format",n.toolbar.formats,"formatBlock","submenu",'<span class="txt">'+n.toolbar.formats+"</span>"+t.arrow_down],fontSize:["se-btn-select se-btn-tool-size",n.toolbar.fontSize,"fontSize","submenu",'<span class="txt">'+n.toolbar.fontSize+"</span>"+t.arrow_down],fontColor:["",n.toolbar.fontColor,"fontColor","submenu",t.font_color],hiliteColor:["",n.toolbar.hiliteColor,"hiliteColor","submenu",t.highlight_color],align:["se-btn-align",n.toolbar.align,"align","submenu",e.rtl?t.align_right:t.align_left],list:["",n.toolbar.list,"list","submenu",t.list_number],horizontalRule:["btn_line",n.toolbar.horizontalRule,"horizontalRule","submenu",t.horizontal_rule],table:["",n.toolbar.table,"table","submenu",t.table],lineHeight:["",n.toolbar.lineHeight,"lineHeight","submenu",t.line_height],template:["",n.toolbar.template,"template","submenu",t.template],paragraphStyle:["",n.toolbar.paragraphStyle,"paragraphStyle","submenu",t.paragraph_style],textStyle:["",n.toolbar.textStyle,"textStyle","submenu",t.text_style],link:["",n.toolbar.link,"link","dialog",t.link],image:["",n.toolbar.image,"image","dialog",t.image],video:["",n.toolbar.video,"video","dialog",t.video],audio:["",n.toolbar.audio,"audio","dialog",t.audio],math:["",n.toolbar.math,"math","dialog",t.math],imageGallery:["",n.toolbar.imageGallery,"imageGallery","fileBrowser",t.image_gallery]}},_createModuleGroup:function(){const e=L.createElement("DIV");e.className="se-btn-module se-btn-module-border";const t=L.createElement("UL");return t.className="se-menu-list",e.appendChild(t),{div:e,ul:t}},_createButton:function(e,t,n,i,l,o,s){const a=L.createElement("LI"),r=L.createElement("BUTTON");return r.setAttribute("type","button"),r.setAttribute("class","se-btn"+(e?" "+e:"")+" se-tooltip"),r.setAttribute("data-command",n),r.setAttribute("data-display",i),r.setAttribute("tabindex","-1"),l||(l='<span class="se-icon-text">!</span>'),/^default\./i.test(l)&&(l=s[l.replace(/^default\./i,"")]),/^text\./i.test(l)&&(l=l.replace(/^text\./i,""),r.className+=" se-btn-more-text"),l+='<span class="se-tooltip-inner"><span class="se-tooltip-text">'+(t||n)+"</span></span>",o&&r.setAttribute("disabled",!0),r.innerHTML=l,a.appendChild(r),{li:a,button:r}},_createToolBar:function(e,t,n,i){const l=e.createElement("DIV");l.className="se-toolbar-separator-vertical";const o=e.createElement("DIV");o.className="se-toolbar sun-editor-common";const s=e.createElement("DIV");s.className="se-btn-tray",o.appendChild(s),t=JSON.parse(JSON.stringify(t));const a=i.icons,r=this._defaultButtons(i),c={},d=[],u={};if(n){const e=n.length?n:Object.keys(n).map((function(e){return n[e]}));for(let t,n=0,i=e.length;n<i;n++)t=e[n].default||e[n],u[t.name]=t}let h=null,p=null,g=null,m=null,f="",_=!1;const b=L.createElement("DIV");b.className="se-toolbar-more-layer";e:for(let n,i,o,v,y,C=0;C<t.length;C++)if(n=!1,y="",v=t[C],g=this._createModuleGroup(),"object"==typeof v){for(let e,l=0;l<v.length;l++){if(p=v[l],e=!1,/^\%\d+/.test(p)&&0===l){v[0]=p.replace(/[^\d]/g,""),d.push(v),t.splice(C--,1);continue e}if("object"==typeof p)"function"==typeof p.add?(f=p.name,h=r[f],u[f]=p):(f=p.name,h=[p.buttonClass,p.title,p.name,p.dataDisplay,p.innerHTML,p._disabled]);else{if(/^\-/.test(p)){y=p.substr(1),g.div.style.float=y;continue}if(/^\:/.test(p)){e=!0;const t=p.match(/^\:([^\-]+)\-([^\-]+)\-([^\-]+)/);o="__se__"+t[1].trim();h=["se-btn-more",t[2].trim(),o,"MORE",t[3].trim()]}else h=r[p];if(f=p,!h){const e=u[f];if(!e)throw Error("[SUNEDITOR.create.toolbar.fail] The button name of a plugin that does not exist. ["+f+"]");h=[e.buttonClass,e.title,e.name,e.display,e.innerHTML,e._disabled]}}m=this._createButton(h[0],h[1],h[2],h[3],h[4],h[5],a),(n?i:g.ul).appendChild(m.li),u[f]&&(c[f]=m.button),e&&(n=!0,i=L.createElement("DIV"),i.className="se-more-layer "+o,i.innerHTML='<div class="se-more-form"><ul class="se-menu-list"'+(y?' style="float: '+y+';"':"")+"></ul></div>",b.appendChild(i),i=i.firstElementChild.firstElementChild)}if(_){const e=l.cloneNode(!1);s.appendChild(e)}s.appendChild(g.div),_=!0}else if(/^\/$/.test(v)){const t=e.createElement("DIV");t.className="se-btn-module-enter",s.appendChild(t),_=!1}switch(s.children.length){case 0:s.style.display="none";break;case 1:L.removeClass(s.firstElementChild,"se-btn-module-border");break;default:if(i.rtl){const e=l.cloneNode(!1);e.style.float=s.lastElementChild.style.float,s.appendChild(e)}}d.length>0&&d.unshift(t),b.children.length>0&&s.appendChild(b);const v=e.createElement("DIV");v.className="se-menu-tray",o.appendChild(v);const y=e.createElement("DIV");return y.className="se-toolbar-cover",o.appendChild(y),{element:o,plugins:u,pluginCallButtons:c,responsiveButtons:d,_menuTray:v,_buttonTray:s}}};var A=function(e,t,n){return{element:{originElement:e,topArea:t._top,relative:t._relative,toolbar:t._toolBar,_buttonTray:t._toolBar.querySelector(".se-btn-tray"),_menuTray:t._menuTray,resizingBar:t._resizingBar,navigation:t._navigation,charWrapper:t._charWrapper,charCounter:t._charCounter,editorArea:t._editorArea,wysiwygFrame:t._wysiwygArea,wysiwyg:t._wysiwygArea,code:t._codeArea,placeholder:t._placeholder,loading:t._loading,lineBreaker:t._lineBreaker,lineBreaker_t:t._lineBreaker_t,lineBreaker_b:t._lineBreaker_b,resizeBackground:t._resizeBack,_stickyDummy:t._stickyDummy,_arrow:t._arrow},tool:{cover:t._toolBar.querySelector(".se-toolbar-cover"),bold:t._toolBar.querySelector("._se_command_bold"),underline:t._toolBar.querySelector("._se_command_underline"),italic:t._toolBar.querySelector("._se_command_italic"),strike:t._toolBar.querySelector("._se_command_strike"),subscript:t._toolBar.querySelector("._se_command_subscript"),superscript:t._toolBar.querySelector("._se_command_superscript"),undo:t._toolBar.querySelector("._se_command_undo"),redo:t._toolBar.querySelector("._se_command_redo"),save:t._toolBar.querySelector("._se_command_save"),outdent:t._toolBar.querySelector("._se_command_outdent"),indent:t._toolBar.querySelector("._se_command_indent"),fullScreen:t._toolBar.querySelector("._se_command_fullScreen"),showBlocks:t._toolBar.querySelector("._se_command_showBlocks"),codeView:t._toolBar.querySelector("._se_command_codeView")},options:n,option:n}},M={name:"notice",add:function(e){const t=e.context;t.notice={};let n=e.util.createElement("DIV"),i=e.util.createElement("SPAN"),l=e.util.createElement("BUTTON");n.className="se-notice",l.className="close",l.setAttribute("aria-label","Close"),l.setAttribute("title",e.lang.dialogBox.close),l.innerHTML=e.icons.cancel,n.appendChild(i),n.appendChild(l),t.notice.modal=n,t.notice.message=i,l.addEventListener("click",this.onClick_cancel.bind(e)),t.element.editorArea.appendChild(n),n=null},onClick_cancel:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.notice.close.call(this)},open:function(e){this.context.notice.message.textContent=e,this.context.notice.modal.style.display="block"},close:function(){this.context.notice.modal.style.display="none"}},z={init:function(e){return{create:function(t,n){return this.create(t,n,e)}.bind(this)}},create:function(e,t,n){L._propertiesInit(),"object"!=typeof t&&(t={}),n&&(t=[n,t].reduce((function(e,t){for(let n in t)if(L.hasOwn(t,n))if("plugins"===n&&t[n]&&e[n]){let i=e[n],l=t[n];i=i.length?i:Object.keys(i).map((function(e){return i[e]})),l=l.length?l:Object.keys(l).map((function(e){return l[e]})),e[n]=l.filter((function(e){return-1===i.indexOf(e)})).concat(i)}else e[n]=t[n];return e}),{}));const i="string"==typeof e?document.getElementById(e):e;if(!i){if("string"==typeof e)throw Error('[SUNEDITOR.create.fail] The element for that id was not found (ID:"'+e+'")');throw Error("[SUNEDITOR.create.fail] suneditor requires textarea's element or id value")}const l=B.init(i,t);if(l.constructed._top.id&&document.getElementById(l.constructed._top.id))throw Error('[SUNEDITOR.create.fail] The ID of the suneditor you are trying to create already exists (ID:"'+l.constructed._top.id+'")');return function(e,t,n,i,l,o){const s=e.element.originElement.ownerDocument||document,a=s.defaultView||window,r=L,c=l.icons,d={_d:s,_w:a,_parser:new a.DOMParser,_wd:null,_ww:null,_shadowRoot:null,_shadowRootControllerEventTarget:null,util:r,functions:null,options:null,wwComputedStyle:a.getComputedStyle(e.element.wysiwyg),notice:M,icons:c,history:null,context:e,pluginCallButtons:t,plugins:n||{},initPlugins:{},_targetPlugins:{},_menuTray:{},lang:i,effectNode:null,submenu:null,container:null,_submenuName:"",_bindedSubmenuOff:null,_bindedContainerOff:null,submenuActiveButton:null,containerActiveButton:null,controllerArray:[],currentControllerName:"",currentControllerTarget:null,currentFileComponentInfo:null,codeViewDisabledButtons:null,resizingDisabledButtons:null,_moreLayerActiveButton:null,_htmlCheckWhitelistRegExp:null,_disallowedTextTagsRegExp:null,editorTagsWhitelistRegExp:null,pasteTagsWhitelistRegExp:null,hasFocus:!1,isDisabled:!1,_attributesWhitelistRegExp:null,_attributesTagsWhitelist:null,_bindControllersOff:null,_isInline:null,_isBalloon:null,_isBalloonAlways:null,_inlineToolbarAttr:{top:"",width:"",isShow:!1},_notHideToolbar:!1,_sticky:!1,_antiBlur:!1,_lineBreaker:null,_lineBreakerButton:null,_componentsInfoInit:!0,_componentsInfoReset:!1,activePlugins:null,managedTagsInfo:null,_charTypeHTML:!1,_fileInfoPluginsCheck:null,_fileInfoPluginsReset:null,_fileManager:{tags:null,regExp:null,queryString:null,pluginRegExp:null,pluginMap:null},commandMap:null,_styleCommandMap:null,_defaultCommand:{bold:l.textTags.bold,underline:l.textTags.underline,italic:l.textTags.italic,strike:l.textTags.strike,subscript:l.textTags.sub,superscript:l.textTags.sup},_variable:{isChanged:!1,isCodeView:!1,isFullScreen:!1,innerHeight_fullScreen:0,resizeClientY:0,tabSize:4,codeIndent:2,minResizingSize:r.getNumber(e.element.wysiwygFrame.style.minHeight||"65",0),currentNodes:[],currentNodesMap:[],_range:null,_selectionNode:null,_originCssText:e.element.topArea.style.cssText,_bodyOverflow:"",_editorAreaOriginCssText:"",_wysiwygOriginCssText:"",_codeOriginCssText:"",_fullScreenAttrs:{sticky:!1,balloon:!1,inline:!1},_lineBreakComp:null,_lineBreakDir:""},callPlugin:function(e,n,i){if(i=i||t[e],!this.plugins[e])throw Error('[SUNEDITOR.core.callPlugin.fail] The called plugin does not exist or is in an invalid format. (pluginName:"'+e+'")');this.initPlugins[e]?"object"==typeof this._targetPlugins[e]&&i&&this.initMenuTarget(e,i,this._targetPlugins[e]):(this.plugins[e].add(this,i),this.initPlugins[e]=!0),this.plugins[e].active&&!this.commandMap[e]&&i&&(this.commandMap[e]=i,this.activePlugins.push(e)),"function"==typeof n&&n()},addModule:function(e){for(let t,n=0,i=e.length;n<i;n++)t=e[n].name,this.plugins[t]||(this.plugins[t]=e[n]),this.initPlugins[t]||(this.initPlugins[t]=!0,"function"==typeof this.plugins[t].add&&this.plugins[t].add(this))},getGlobalScrollOffset:function(){let t=0,n=0,i=e.element.topArea;for(;i;)t+=i.scrollTop,n+=i.scrollLeft,i=i.parentElement;for(i=this._shadowRoot?this._shadowRoot.host:null;i;)t+=i.scrollTop,n+=i.scrollLeft,i=i.parentElement;return{top:t,left:n}},initMenuTarget:function(t,n,i){n?(e.element._menuTray.appendChild(i),this._targetPlugins[t]=!0,this._menuTray[n.getAttribute("data-command")]=i):this._targetPlugins[t]=i},submenuOn:function(e){this._bindedSubmenuOff&&this._bindedSubmenuOff(),this._bindControllersOff&&this.controllersOff();const t=this._submenuName=e.getAttribute("data-command"),n=this.submenu=this._menuTray[t];this.submenuActiveButton=e,this._setMenuPosition(e,n),this._bindedSubmenuOff=this.submenuOff.bind(this),this.addDocEvent("mousedown",this._bindedSubmenuOff,!1),this.plugins[t].on&&this.plugins[t].on.call(this),this._antiBlur=!0},submenuOff:function(){this.removeDocEvent("mousedown",this._bindedSubmenuOff),this._bindedSubmenuOff=null,this.submenu&&(this._submenuName="",this.submenu.style.display="none",this.submenu=null,r.removeClass(this.submenuActiveButton,"on"),this.submenuActiveButton=null,this._notHideToolbar=!1),this._antiBlur=!1},containerOn:function(e){this._bindedContainerOff&&this._bindedContainerOff();const t=this._containerName=e.getAttribute("data-command"),n=this.container=this._menuTray[t];this.containerActiveButton=e,this._setMenuPosition(e,n),this._bindedContainerOff=this.containerOff.bind(this),this.addDocEvent("mousedown",this._bindedContainerOff,!1),this.plugins[t].on&&this.plugins[t].on.call(this),this._antiBlur=!0},containerOff:function(){this.removeDocEvent("mousedown",this._bindedContainerOff),this._bindedContainerOff=null,this.container&&(this._containerName="",this.container.style.display="none",this.container=null,r.removeClass(this.containerActiveButton,"on"),this.containerActiveButton=null,this._notHideToolbar=!1),this._antiBlur=!1},_setMenuPosition:function(t,n){n.style.visibility="hidden",n.style.display="block",n.style.height="",r.addClass(t,"on");const i=this.context.element.toolbar,o=i.offsetWidth,s=u._getEditorOffsets(e.element.toolbar),c=n.offsetWidth,d=t.parentElement.offsetLeft+3;if(l.rtl){const e=t.offsetWidth,i=c>e?c-e:0,l=i>0?0:e-c;n.style.left=d-i+l+"px",s.left>u._getEditorOffsets(n).left&&(n.style.left="0px")}else{const e=o<=c?0:o-(d+c);n.style.left=e<0?d+e+"px":d+"px"}let h=0,p=t;for(;p&&p!==i;)h+=p.offsetTop,p=p.offsetParent;const g=h;this._isBalloon?h+=i.offsetTop+t.offsetHeight:h-=t.offsetHeight;const m=s.top,f=n.offsetHeight,_=this.getGlobalScrollOffset().top,b=a.innerHeight-(m-_+g+t.parentElement.offsetHeight);if(b<f){let e=-1*(f-g+3);const i=m-_+e,l=f+(i<0?i:0);l>b?(n.style.height=l+"px",e=-1*(l-g+3)):(n.style.height=b+"px",e=g+t.parentElement.offsetHeight),n.style.top=e+"px"}else n.style.top=g+t.parentElement.offsetHeight+"px";n.style.visibility=""},controllersOn:function(){this._bindControllersOff&&this._bindControllersOff(),this.controllerArray=[];for(let e,t=0;t<arguments.length;t++)e=arguments[t],e&&("string"!=typeof e?"function"!=typeof e?r.hasClass(e,"se-controller")?(e.style&&(e.style.display="block",this._shadowRoot&&-1===this._shadowRootControllerEventTarget.indexOf(e)&&(e.addEventListener("mousedown",(function(e){e.preventDefault(),e.stopPropagation()})),this._shadowRootControllerEventTarget.push(e))),this.controllerArray.push(e)):(this.currentControllerTarget=e,this.currentFileComponentInfo=this.getFileComponent(e)):this.controllerArray.push(e):this.currentControllerName=e);this._bindControllersOff=this.controllersOff.bind(this),this.addDocEvent("mousedown",this._bindControllersOff,!1),this.addDocEvent("keydown",this._bindControllersOff,!1),this._antiBlur=!0,"function"==typeof h.showController&&h.showController(this.currentControllerName,this.controllerArray,this)},controllersOff:function(t){this._lineBreaker.style.display="none";const n=this.controllerArray.length;if(t&&t.target&&n>0)for(let e=0;e<n;e++)if("function"==typeof this.controllerArray[e].contains&&this.controllerArray[e].contains(t.target))return;if((!this._fileManager.pluginRegExp.test(this.currentControllerName)||!t||"keydown"!==t.type||27===t.keyCode)&&(e.element.lineBreaker_t.style.display=e.element.lineBreaker_b.style.display="none",this._variable._lineBreakComp=null,this.currentControllerName="",this.currentControllerTarget=null,this.currentFileComponentInfo=null,this.effectNode=null,this._bindControllersOff)){if(this.removeDocEvent("mousedown",this._bindControllersOff),this.removeDocEvent("keydown",this._bindControllersOff),this._bindControllersOff=null,n>0){for(let e=0;e<n;e++)"function"==typeof this.controllerArray[e]?this.controllerArray[e]():this.controllerArray[e].style.display="none";this.controllerArray=[]}this._antiBlur=!1}},setControllerPosition:function(t,n,i,o){l.rtl&&(o.left*=-1);const s=r.getOffset(n,e.element.wysiwygFrame);t.style.visibility="hidden",t.style.display="block";const a="top"===i?-(t.offsetHeight+2):n.offsetHeight+12;t.style.top=s.top+a+o.top+"px";const c=s.left-e.element.wysiwygFrame.scrollLeft+o.left,d=t.offsetWidth,u=n.offsetWidth,h=r.hasClass(t.firstElementChild,"se-arrow")?t.firstElementChild:null;if(l.rtl){const n=d>u?d-u:0,i=n>0?0:u-d;t.style.left=c-n+i+"px",n>0&&h&&(h.style.left=(d-14<10+n?d-14:10+n)+"px");const l=e.element.wysiwygFrame.offsetLeft-t.offsetLeft;l>0&&(t.style.left="0px",h&&(h.style.left=l+"px"))}else{t.style.left=c+"px";const n=e.element.wysiwygFrame.offsetWidth-(t.offsetLeft+d);n<0?(t.style.left=t.offsetLeft+n+"px",h&&(h.style.left=20-n+"px")):h&&(h.style.left="20px")}t.style.visibility=""},execCommand:function(e,t,n){this._wd.execCommand(e,t,"formatBlock"===e?"<"+n+">":n),this.history.push(!0)},nativeFocus:function(){const t=r.getParentElement(this.getSelectionNode(),"figcaption");t?t.focus():e.element.wysiwyg.focus(),this._editorRange()},focus:function(){if("none"!==e.element.wysiwygFrame.style.display){if(l.iframe)this.nativeFocus();else try{const t=this.getRange();if(t.startContainer===t.endContainer&&r.isWysiwygDiv(t.startContainer)){const n=t.commonAncestorContainer.children[t.startOffset];if(!r.isFormatElement(n)&&!r.isComponent(n)){const t=r.createElement(l.defaultTag),i=r.createElement("BR");return t.appendChild(i),e.element.wysiwyg.insertBefore(t,n),void this.setRange(i,0,i,0)}}this.setRange(t.startContainer,t.startOffset,t.endContainer,t.endOffset)}catch(e){this.nativeFocus()}u._applyTagEffects(),this._isBalloon&&u._toggleToolbarBalloon()}},focusEdge:function(t){t||(t=e.element.wysiwyg.lastElementChild);const n=this.getFileComponent(t);n?this.selectComponent(n.target,n.pluginName):t?(t=r.getChildElement(t,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0))?this.setRange(t,t.textContent.length,t,t.textContent.length):this.nativeFocus():this.focus()},blur:function(){l.iframe?e.element.wysiwygFrame.blur():e.element.wysiwyg.blur()},setRange:function(e,t,n,i){if(!e||!n)return;t>e.textContent.length&&(t=e.textContent.length),i>n.textContent.length&&(i=n.textContent.length),r.isFormatElement(e)&&(e=e.childNodes[t]||e,t=0),r.isFormatElement(n)&&(n=n.childNodes[i]||n,i=t>1?t:0);const o=this._wd.createRange();try{o.setStart(e,t),o.setEnd(n,i)}catch(e){return console.warn("[SUNEDITOR.core.focus.error] "+e),void this.nativeFocus()}const s=this.getSelection();return s.removeAllRanges&&s.removeAllRanges(),s.addRange(o),this._editorRange(),l.iframe&&this.nativeFocus(),o},removeRange:function(){this._variable._range=null,this._variable._selectionNode=null,this.hasFocus&&this.getSelection().removeAllRanges();const e=this.commandMap,t=this.activePlugins;for(let i in e)r.hasOwn(e,i)&&(t.indexOf(i)>-1?n[i].active.call(this,null):e.OUTDENT&&/^OUTDENT$/i.test(i)?e.OUTDENT.setAttribute("disabled",!0):e.INDENT&&/^INDENT$/i.test(i)?e.INDENT.removeAttribute("disabled"):r.removeClass(e[i],"active"))},getRange:function(){const t=this._variable._range||this._createDefaultRange(),n=this.getSelection();if(t.collapsed===n.isCollapsed||!e.element.wysiwyg.contains(n.focusNode))return t;if(n.rangeCount>0)return this._variable._range=n.getRangeAt(0),this._variable._range;{const e=n.anchorNode,t=n.focusNode,i=n.anchorOffset,l=n.focusOffset,o=r.compareElements(e,t),s=o.ancestor&&(0===o.result?i<=l:o.result>1);return this.setRange(s?e:t,s?i:l,s?t:e,s?l:i)}},getRange_addLine:function(t,n){if(this._selectionVoid(t)){const i=e.element.wysiwyg,o=r.createElement(l.defaultTag);o.innerHTML="<br>",i.insertBefore(o,n&&n!==i?n.nextElementSibling:i.firstElementChild),this.setRange(o.firstElementChild,0,o.firstElementChild,1),t=this._variable._range}return t},getSelection:function(){return this._shadowRoot&&this._shadowRoot.getSelection?this._shadowRoot.getSelection():this._ww.getSelection()},getSelectionNode:function(){if(e.element.wysiwyg.contains(this._variable._selectionNode)||this._editorRange(),!this._variable._selectionNode){const t=r.getChildElement(e.element.wysiwyg.firstChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1);if(t)return this._variable._selectionNode=t,t;this._editorRange()}return this._variable._selectionNode},_editorRange:function(){const e=this.getSelection();if(!e)return null;let t=null,n=null;t=e.rangeCount>0?e.getRangeAt(0):this._createDefaultRange(),this._variable._range=t,n=t.collapsed?r.isWysiwygDiv(t.commonAncestorContainer)&&t.commonAncestorContainer.children[t.startOffset]||t.commonAncestorContainer:e.extentNode||e.anchorNode,this._variable._selectionNode=n},_createDefaultRange:function(){const t=e.element.wysiwyg;t.focus();const n=this._wd.createRange();let i=t.firstElementChild;return i||(i=r.createElement(l.defaultTag),i.innerHTML="<br>",t.appendChild(i)),n.setStart(i,0),n.setEnd(i,0),n},_selectionVoid:function(e){const t=e.commonAncestorContainer;return r.isWysiwygDiv(e.startContainer)&&r.isWysiwygDiv(e.endContainer)||/FIGURE/i.test(t.nodeName)||this._fileManager.regExp.test(t.nodeName)||r.isMediaComponent(t)},_resetRangeToTextNode:function(){const t=this.getRange();if(this._selectionVoid(t))return!1;let n,i,o,s=t.startContainer,a=t.startOffset,c=t.endContainer,d=t.endOffset;if(r.isFormatElement(s)&&(s=s.childNodes[a]||s.lastChild,a=s.textContent.length),r.isFormatElement(c)&&(c=c.childNodes[d]||c.lastChild,d=c.textContent.length),n=r.isWysiwygDiv(s)?e.element.wysiwyg.firstChild:s,i=a,r.isBreak(n)||1===n.nodeType&&n.childNodes.length>0){const e=r.isBreak(n);if(!e){for(;n&&!r.isBreak(n)&&1===n.nodeType;)n=n.childNodes[i]||n.nextElementSibling||n.nextSibling,i=0;let e=r.getFormatElement(n,null);e===r.getRangeFormatElement(e,null)&&(e=r.createElement(r.getParentElement(n,r.isCell)?"DIV":l.defaultTag),n.parentNode.insertBefore(e,n),e.appendChild(n))}if(r.isBreak(n)){const t=r.createTextNode(r.zeroWidthSpace);n.parentNode.insertBefore(t,n),n=t,e&&s===c&&(c=n,d=1)}}if(s=n,a=i,n=r.isWysiwygDiv(c)?e.element.wysiwyg.lastChild:c,i=d,r.isBreak(n)||1===n.nodeType&&n.childNodes.length>0){const e=r.isBreak(n);if(!e){for(;n&&!r.isBreak(n)&&1===n.nodeType&&(o=n.childNodes,0!==o.length);)n=o[i>0?i-1:i]||!/FIGURE/i.test(o[0].nodeName)?o[0]:n.previousElementSibling||n.previousSibling||s,i=i>0?n.textContent.length:i;let e=r.getFormatElement(n,null);e===r.getRangeFormatElement(e,null)&&(e=r.createElement(r.isCell(e)?"DIV":l.defaultTag),n.parentNode.insertBefore(e,n),e.appendChild(n))}if(r.isBreak(n)){const t=r.createTextNode(r.zeroWidthSpace);n.parentNode.insertBefore(t,n),n=t,i=1,e&&!n.previousSibling&&r.removeItem(c)}}return c=n,d=i,this.setRange(s,a,c,d),!0},getSelectedElements:function(t){if(!this._resetRangeToTextNode())return[];let n=this.getRange();if(r.isWysiwygDiv(n.startContainer)){const t=e.element.wysiwyg.children;if(0===t.length)return[];this.setRange(t[0],0,t[t.length-1],t[t.length-1].textContent.trim().length),n=this.getRange()}const i=n.startContainer,l=n.endContainer,o=n.commonAncestorContainer,s=r.getListChildren(o,(function(e){return t?t(e):r.isFormatElement(e)}));if(r.isWysiwygDiv(o)||r.isRangeFormatElement(o)||s.unshift(r.getFormatElement(o,null)),i===l||1===s.length)return s;let a=r.getFormatElement(i,null),c=r.getFormatElement(l,null),d=null,u=null;const h=function(e){return!r.isTable(e)||/^TABLE$/i.test(e.nodeName)};let p=r.getRangeFormatElement(a,h),g=r.getRangeFormatElement(c,h);r.isTable(p)&&r.isListCell(p.parentNode)&&(p=p.parentNode),r.isTable(g)&&r.isListCell(g.parentNode)&&(g=g.parentNode);const m=p===g;for(let e,t=0,n=s.length;t<n;t++)if(e=s[t],a===e||!m&&e===p)d=t;else if(c===e||!m&&e===g){u=t;break}return null===d&&(d=0),null===u&&(u=s.length-1),s.slice(d,u+1)},getSelectedElementsAndComponents:function(e){const t=this.getRange().commonAncestorContainer,n=r.getParentElement(t,r.isComponent),i=r.isTable(t)?this.getSelectedElements(null):this.getSelectedElements(function(e){const t=this.getParentElement(e,this.isComponent);return this.isFormatElement(e)&&(!t||t===n)||this.isComponent(e)&&!this.getFormatElement(e)}.bind(r));if(e)for(let e=0,t=i.length;e<t;e++)for(let n=e-1;n>=0;n--)if(i[n].contains(i[e])){i.splice(e,1),e--,t--;break}return i},isEdgePoint:function(e,t,n){return"end"!==n&&0===t||(!n||"front"!==n)&&!e.nodeValue&&1===t||(!n||"end"===n)&&!!e.nodeValue&&t===e.nodeValue.length},_isEdgeFormat:function(e,t,n){if(!this.isEdgePoint(e,t,n))return!1;const i=[];for(n="front"===n?"previousSibling":"nextSibling";e&&!r.isFormatElement(e)&&!r.isWysiwygDiv(e);){if(e[n]&&(!r.isBreak(e[n])||e[n][n]))return null;1===e.nodeType&&i.push(e.cloneNode(!1)),e=e.parentNode}return i},showLoading:function(){e.element.loading.style.display="block"},closeLoading:function(){e.element.loading.style.display="none"},appendFormatTag:function(e,t){const n=r.getFormatElement(this.getSelectionNode(),null),i=t?"string"==typeof t?t:t.nodeName:r.isFormatElement(n)&&!r.isFreeFormatElement(n)?n.nodeName:l.defaultTag,o=r.createElement(i);return o.innerHTML="<br>",(t&&"string"!=typeof t||!t&&r.isFormatElement(n))&&r.copyTagAttributes(o,t||n),r.isCell(e)?e.insertBefore(o,e.nextElementSibling):e.parentNode.insertBefore(o,e.nextElementSibling),o},insertComponent:function(e,t,n,i){if(n&&!this.checkCharCount(e,null))return null;const l=this.removeNode();this.getRange_addLine(this.getRange(),l.container);let o=null,s=this.getSelectionNode(),a=r.getFormatElement(s,null);if(r.isListCell(a))this.insertNode(e,s===a?null:l.container.nextSibling,!1),e.nextSibling||e.parentNode.appendChild(r.createElement("BR"));else{if(this.getRange().collapsed&&(3===l.container.nodeType||r.isBreak(l.container))){const e=r.getParentElement(l.container,function(e){return this.isRangeFormatElement(e)}.bind(r));o=r.splitElement(l.container,l.offset,e?r.getElementDepth(e)+1:0),o&&(a=o.previousSibling)}this.insertNode(e,a,!1),a&&r.onlyZeroWidthSpace(a)&&r.removeItem(a)}if(this.setRange(e,0,e,0),!i){const t=this.getFileComponent(e);t?this.selectComponent(t.target,t.pluginName):o&&(o=r.getEdgeChildNodes(o,null).sc||o,this.setRange(o,0,o,0))}return t||this.history.push(1),o||e},getFileComponent:function(e){if(!this._fileManager.queryString||!e)return null;let t,n;return(/^FIGURE$/i.test(e.nodeName)||/se-component/.test(e.className))&&(t=e.querySelector(this._fileManager.queryString)),!t&&e.nodeName&&this._fileManager.regExp.test(e.nodeName)&&(t=e),t&&(n=this._fileManager.pluginMap[t.nodeName.toLowerCase()],n)?{target:t,component:r.getParentElement(t,r.isComponent),pluginName:n}:null},selectComponent:function(e,t){if(r.isUneditableComponent(r.getParentElement(e,r.isComponent))||r.isUneditableComponent(e))return!1;this.hasFocus||this.focus();const n=this.plugins[t];n&&a.setTimeout(function(){"function"==typeof n.select&&this.callPlugin(t,n.select.bind(this,e),null),this._setComponentLineBreaker(e)}.bind(this))},_setComponentLineBreaker:function(t){this._lineBreaker.style.display="none";const n=r.getParentElement(t,r.isComponent),i=e.element.lineBreaker_t.style,l=e.element.lineBreaker_b.style,o="block"===this.context.resizing.resizeContainer.style.display?this.context.resizing.resizeContainer:t,s=r.isListCell(n.parentNode);let a,c,d;(s?n.previousSibling:r.isFormatElement(n.previousElementSibling))?i.display="none":(this._variable._lineBreakComp=n,c=e.element.wysiwyg.scrollTop,a=r.getOffset(t,e.element.wysiwygFrame).top+c,d=o.offsetWidth/2/2,i.top=a-c-12+"px",i.left=r.getOffset(o).left+d+"px",i.display="block"),(s?n.nextSibling:r.isFormatElement(n.nextElementSibling))?l.display="none":(a||(this._variable._lineBreakComp=n,c=e.element.wysiwyg.scrollTop,a=r.getOffset(t,e.element.wysiwygFrame).top+c,d=o.offsetWidth/2/2),l.top=a+o.offsetHeight-c-12+"px",l.left=r.getOffset(o).left+o.offsetWidth-d-24+"px",l.display="block")},insertNode:function(t,n,i){if(i&&!this.checkCharCount(t,null))return null;const o=r.getFreeFormatElement(this.getSelectionNode(),null),s=!o&&(r.isFormatElement(t)||r.isRangeFormatElement(t))||r.isComponent(t);if(!n&&(s||r.isComponent(t)||r.isMedia(t))){const e=this.removeNode();if(3===e.container.nodeType||r.isBreak(e.container)){const t=r.getParentElement(e.container,function(e){return this.isRangeFormatElement(e)||this.isListCell(e)}.bind(r));(n=r.splitElement(e.container,e.offset,t?r.getElementDepth(t)+1:0))&&(n=n.previousSibling)}}const a=n||s?this.getRange():this.getRange_addLine(this.getRange(),null),c=a.commonAncestorContainer,d=a.startOffset,u=a.endOffset,h=a.startContainer===c&&r.isFormatElement(c),p=h?c.childNodes[d]||c.childNodes[0]:a.startContainer,g=h?c.childNodes[u]||c.childNodes[c.childNodes.length-1]:a.endContainer;let m,f=null;if(n)m=n.parentNode,n=n.nextSibling,f=!0;else if(m=p,3===p.nodeType&&(m=p.parentNode),a.collapsed)if(3===c.nodeType)n=c.textContent.length>u?c.splitText(u):c.nextSibling;else if(r.isBreak(m))n=m,m=m.parentNode;else{let e=m.childNodes[d];const i=e&&3===e.nodeType&&r.onlyZeroWidthSpace(e)&&r.isBreak(e.nextSibling)?e.nextSibling:e;i?i.nextSibling?n=r.isBreak(i)&&!r.isBreak(t)?i:i.nextSibling:(m.removeChild(i),n=null):n=null}else{if(p===g){n=this.isEdgePoint(g,u)?g.nextSibling:g.splitText(u);let e=p;this.isEdgePoint(p,d)||(e=p.splitText(d)),m.removeChild(e),0===m.childNodes.length&&s&&(m.innerHTML="<br>")}else{const e=this.removeNode(),t=e.container,i=e.prevContainer;if(t&&0===t.childNodes.length&&s&&(r.isFormatElement(t)?t.innerHTML="<br>":r.isRangeFormatElement(t)&&(t.innerHTML="<"+l.defaultTag+"><br></"+l.defaultTag+">")),!s&&i)if(m=3===i.nodeType?i.parentNode:i,m.contains(t)){let e=!0;for(n=t;n.parentNode!==m;)n=n.parentNode,e=!1;e&&t===i&&(n=n.nextSibling)}else n=null;else m=(n=s?g:t===i?t.nextSibling:t)&&n.parentNode?n.parentNode:c;for(;n&&!r.isFormatElement(n)&&n.parentNode!==c;)n=n.parentNode}}try{if((r.isWysiwygDiv(n)||m===e.element.wysiwyg.parentNode)&&(m=e.element.wysiwyg,n=null),r.isFormatElement(t)||r.isRangeFormatElement(t)||!r.isListCell(m)&&r.isComponent(t)){const e=m;if(r.isList(n))m=n,n=null;else if(r.isListCell(n))m=n.previousElementSibling||n;else if(!f&&!n){const e=this.removeNode(),t=3===e.container.nodeType?r.isListCell(r.getFormatElement(e.container,null))?e.container:r.getFormatElement(e.container,null)||e.container.parentNode:e.container,i=r.isWysiwygDiv(t)||r.isRangeFormatElement(t);m=i?t:t.parentNode,n=i?null:t.nextSibling}0===e.childNodes.length&&m!==e&&r.removeItem(e)}if(!s||o||r.isRangeFormatElement(m)||r.isListCell(m)||r.isWysiwygDiv(m)||(n=m.nextElementSibling,m=m.parentNode),r.isWysiwygDiv(m)&&(3===t.nodeType||r.isBreak(t))){const e=r.createElement(l.defaultTag);e.appendChild(t),t=e}m.insertBefore(t,m===n?m.lastChild:n)}catch(e){m.appendChild(t)}finally{if((r.isFormatElement(t)||r.isComponent(t))&&p===g){const e=r.getFormatElement(c,null);e&&1===e.nodeType&&r.isEmptyLine(e)&&r.removeItem(e)}if(o&&(r.isFormatElement(t)||r.isRangeFormatElement(t))&&(t=this._setIntoFreeFormat(t)),!r.isComponent(t)){let e=1;if(3===t.nodeType){const e=t.previousSibling,n=t.nextSibling,i=!e||1===e.nodeType||r.onlyZeroWidthSpace(e)?"":e.textContent,l=!n||1===n.nodeType||r.onlyZeroWidthSpace(n)?"":n.textContent;e&&i.length>0&&(t.textContent=i+t.textContent,r.removeItem(e)),n&&n.length>0&&(t.textContent+=l,r.removeItem(n));const o={container:t,startOffset:i.length,endOffset:t.textContent.length-l.length};return this.setRange(t,o.startOffset,t,o.endOffset),o}if(!r.isBreak(t)&&r.isFormatElement(m)){let n=null;t.previousSibling&&!r.isBreak(t.previousSibling)||(n=r.createTextNode(r.zeroWidthSpace),t.parentNode.insertBefore(n,t)),t.nextSibling&&!r.isBreak(t.nextSibling)||(n=r.createTextNode(r.zeroWidthSpace),t.parentNode.insertBefore(n,t.nextSibling)),r._isIgnoreNodeChange(t)&&(t=t.nextSibling,e=0)}this.setRange(t,e,t,e)}return this.history.push(!0),t}},_setIntoFreeFormat:function(e){const t=e.parentNode;let n,i;for(;r.isFormatElement(e)||r.isRangeFormatElement(e);){for(n=e.childNodes,i=null;n[0];)if(i=n[0],r.isFormatElement(i)||r.isRangeFormatElement(i)){if(this._setIntoFreeFormat(i),!e.parentNode)break;n=e.childNodes}else t.insertBefore(i,e);0===e.childNodes.length&&r.removeItem(e),e=r.createElement("BR"),t.insertBefore(e,i.nextSibling)}return e},removeNode:function(){this._resetRangeToTextNode();const t=this.getRange();let n,i=0,l=t.startContainer,o=t.endContainer,s=t.startOffset,a=t.endOffset;const c=3===t.commonAncestorContainer.nodeType&&t.commonAncestorContainer.parentNode===l.parentNode?l.parentNode:t.commonAncestorContainer;c===l&&c===o&&(l=c.children[s],o=c.children[a],s=a=0);let d=null,u=null;const h=r.getListChildNodes(c,null);let p=r.getArrayIndex(h,l),g=r.getArrayIndex(h,o);if(h.length>0&&p>-1&&g>-1){for(let e=p+1,t=l;e>=0;e--)h[e]===t.parentNode&&h[e].firstChild===t&&0===s&&(p=e,t=t.parentNode);for(let e=g-1,t=o;e>p;e--)h[e]===t.parentNode&&1===h[e].nodeType&&(h.splice(e,1),t=t.parentNode,--g)}else{if(0===h.length){if(r.isFormatElement(c)||r.isRangeFormatElement(c)||r.isWysiwygDiv(c)||r.isBreak(c)||r.isMedia(c))return{container:c,offset:0};if(3===c.nodeType)return{container:c,offset:a};h.push(c),l=o=c}else if(l=o=h[0],r.isBreak(l)||r.onlyZeroWidthSpace(l))return{container:r.isMedia(c)?c:l,offset:0};p=g=0}function m(e){const t=r.getFormatElement(e,null);if(r.removeItem(e),r.isListCell(t)){const e=r.getArrayItem(t.children,r.isList,!1);if(e){const n=e.firstElementChild,i=n.childNodes;for(;i[0];)t.insertBefore(i[0],e);r.removeItemAllParents(n,null,null)}}}for(let e=p;e<=g;e++){const t=h[e];if(0===t.length||3===t.nodeType&&void 0===t.data)m(t);else if(t!==l)if(t!==o)m(t);else{if(1===o.nodeType){if(r.isComponent(o))continue;u=r.createTextNode(o.textContent)}else u=r.createTextNode(o.substringData(a,o.length-a));u.length>0?o.data=u.data:m(o)}else{if(1===l.nodeType){if(r.isComponent(l))continue;d=r.createTextNode(l.textContent)}else t===o?(d=r.createTextNode(l.substringData(0,s)+o.substringData(a,o.length-a)),i=s):d=r.createTextNode(l.substringData(0,s));if(d.length>0?l.data=d.data:m(l),t===o)break}}if(n=o&&o.parentNode?o:l&&l.parentNode?l:t.endContainer||t.startContainer,!r.isWysiwygDiv(n)&&0===n.childNodes.length){const t=r.removeItemAllParents(n,function(e){if(this.isComponent(e))return!1;const t=e.textContent;return 0===t.length||/^(\n|\u200B)+$/.test(t)}.bind(r),null);t&&(n=t.sc||t.ec||e.element.wysiwyg)}return this.setRange(n,i,n,i),this.history.push(!0),{container:n,offset:i,prevContainer:l&&l.parentNode?l:null}},applyRangeFormatElement:function(e){this.getRange_addLine(this.getRange(),null);const t=this.getSelectedElementsAndComponents(!1);if(!t||0===t.length)return;e:for(let e,n,i,l,o,s,a=0,c=t.length;a<c;a++)if(e=t[a],r.isListCell(e))if(n=e.lastElementChild,n&&r.isListCell(e.nextElementSibling)&&t.indexOf(e.nextElementSibling)>-1&&(l=n.lastElementChild,t.indexOf(l)>-1)){let e=null;for(;e=l.lastElementChild;)if(r.isList(e)){if(!(t.indexOf(e.lastElementChild)>-1))continue e;l=e.lastElementChild}i=n.firstElementChild,o=t.indexOf(i),s=t.indexOf(l),t.splice(o,s-o+1),c=t.length}else;let n,i,l,o=t[t.length-1];n=r.isRangeFormatElement(o)||r.isFormatElement(o)?o:r.getRangeFormatElement(o,null)||r.getFormatElement(o,null),r.isCell(n)?(i=null,l=n):(i=n.nextSibling,l=n.parentNode);let s=r.getElementDepth(n),a=null;const c=[],d=function(e,t,n){let i=null;if(e!==t&&!r.isTable(t)){if(t&&r.getElementDepth(e)===r.getElementDepth(t))return n;i=r.removeItemAllParents(t,null,e)}return i?i.ec:n};for(let n,o,u,h,p,g,m,f=0,_=t.length;f<_;f++)if(n=t[f],o=n.parentNode,o&&!e.contains(o))if(u=r.getElementDepth(n),r.isList(o)){if(null===a&&(g?(a=g,m=!0,g=null):a=o.cloneNode(!1)),c.push(n),p=t[f+1],f===_-1||p&&p.parentNode!==o){p&&n.contains(p.parentNode)&&(g=p.parentNode.cloneNode(!1));let t,f=o.parentNode;for(;r.isList(f);)t=r.createElement(f.nodeName),t.appendChild(a),a=t,f=f.parentNode;const _=this.detachRangeFormatElement(o,c,null,!0,!0);s>=u?(s=u,l=_.cc,i=d(l,o,_.ec),i&&(l=i.parentNode)):l===_.cc&&(i=_.ec),l!==_.cc&&(h=d(l,_.cc,h),i=void 0!==h?h:_.cc);for(let e=0,t=_.removeArray.length;e<t;e++)a.appendChild(_.removeArray[e]);m||e.appendChild(a),g&&_.removeArray[_.removeArray.length-1].appendChild(g),a=null,m=!1}}else s>=u&&(s=u,l=o,i=n.nextSibling),e.appendChild(n),l!==o&&(h=d(l,o),void 0!==h&&(i=h));if(this.effectNode=null,r.mergeSameTags(e,null,!1),r.mergeNestedTags(e,function(e){return this.isList(e)}.bind(r)),i&&r.getElementDepth(i)>0&&(r.isList(i.parentNode)||r.isList(i.parentNode.parentNode))){const t=r.getParentElement(i,function(e){return this.isRangeFormatElement(e)&&!this.isList(e)}.bind(r)),n=r.splitElement(i,null,t?r.getElementDepth(t)+1:0);n.parentNode.insertBefore(e,n)}else l.insertBefore(e,i),d(e,i);const u=r.getEdgeChildNodes(e.firstElementChild,e.lastElementChild);t.length>1?this.setRange(u.sc,0,u.ec,u.ec.textContent.length):this.setRange(u.ec,u.ec.textContent.length,u.ec,u.ec.textContent.length),this.history.push(!1)},detachRangeFormatElement:function(e,t,n,i,o){const s=this.getRange(),a=s.startOffset,c=s.endOffset;let d=r.getListChildNodes(e,(function(t){return t.parentNode===e})),u=e.parentNode,h=null,p=null,g=e.cloneNode(!1);const m=[],f=r.isList(n);let _=!1,b=!1,v=!1;function y(t,n,i,l){if(r.onlyZeroWidthSpace(n)&&(n.innerHTML=r.zeroWidthSpace),3===n.nodeType)return t.insertBefore(n,i),n;const o=(v?n:l).childNodes;let s=n.cloneNode(!1),a=null,c=null;for(;o[0];)c=o[0],!r._notTextNode(c)||r.isBreak(c)||r.isListCell(s)?s.appendChild(c):(s.childNodes.length>0&&(a||(a=s),t.insertBefore(s,i),s=n.cloneNode(!1)),t.insertBefore(c,i),a||(a=c));if(s.childNodes.length>0){if(r.isListCell(t)&&r.isListCell(s)&&r.isList(i))if(f){for(a=i;i;)s.appendChild(i),i=i.nextSibling;t.parentNode.insertBefore(s,t.nextElementSibling)}else{const t=l.nextElementSibling,n=r.detachNestedList(l,!1);if(e!==n||t!==l.nextElementSibling){const t=s.childNodes;for(;t[0];)l.appendChild(t[0]);e=n,b=!0}}else t.insertBefore(s,i);a||(a=s)}return a}for(let o,s,a,c=0,C=d.length;c<C;c++)if(o=d[c],3!==o.nodeType||!r.isList(g))if(v=!1,i&&0===c&&(h=t&&t.length!==C&&t[0]!==o?g:e.previousSibling),t&&(s=t.indexOf(o)),t&&-1===s)g||(g=e.cloneNode(!1)),g.appendChild(o);else{if(t&&(a=t[s+1]),g&&g.children.length>0&&(u.insertBefore(g,e),g=null),!f&&r.isListCell(o))if(a&&r.getElementDepth(o)!==r.getElementDepth(a)&&(r.isListCell(u)||r.getArrayItem(o.children,r.isList,!1))){const t=o.nextElementSibling,n=r.detachNestedList(o,!1);e===n&&t===o.nextElementSibling||(e=n,b=!0)}else{const t=o;o=r.createElement(i?t.nodeName:r.isList(e.parentNode)||r.isListCell(e.parentNode)?"LI":r.isCell(e.parentNode)?"DIV":l.defaultTag);const n=r.isListCell(o),s=t.childNodes;for(;s[0]&&(!r.isList(s[0])||n);)o.appendChild(s[0]);r.copyFormatAttributes(o,t),v=!0}else o=o.cloneNode(!1);if(!b&&(i?(m.push(o),r.removeItem(d[c])):(n?(_||(u.insertBefore(n,e),_=!0),o=y(n,o,null,d[c])):o=y(u,o,e,d[c]),b||(t?(p=o,h||(h=o)):h||(h=p=o))),b)){b=v=!1,d=r.getListChildNodes(e,(function(t){return t.parentNode===e})),g=e.cloneNode(!1),u=e.parentNode,c=-1,C=d.length;continue}}const C=e.parentNode;let w=e.nextSibling;g&&g.children.length>0&&C.insertBefore(g,w),n?h=n.previousSibling:h||(h=e.previousSibling),w=e.nextSibling,0===e.children.length||0===e.textContent.length?r.removeItem(e):r.removeEmptyNode(e,null);let x=null;if(i)x={cc:C,sc:h,ec:w,removeArray:m};else{h||(h=p),p||(p=h);const e=r.getEdgeChildNodes(h,p.parentNode?h:p);x={cc:(e.sc||e.ec).parentNode,sc:e.sc,ec:e.ec}}if(this.effectNode=null,o)return x;!i&&x&&(t?this.setRange(x.sc,a,x.ec,c):this.setRange(x.sc,0,x.sc,0)),this.history.push(!1)},detachList:function(e,t){let n={},i=!1,l=!1,o=null,s=null;const a=function(e){return!this.isComponent(e)}.bind(r);for(let c,d,u,h,p=0,g=e.length;p<g;p++){if(u=p===g-1,d=r.getRangeFormatElement(e[p],a),h=r.isList(d),!c&&h)c=d,n={r:c,f:[r.getParentElement(e[p],"LI")]},0===p&&(i=!0);else if(c&&h)if(c!==d){const a=this.detachRangeFormatElement(n.f[0].parentNode,n.f,null,t,!0);d=e[p].parentNode,i&&(o=a.sc,i=!1),u&&(s=a.ec),h?(c=d,n={r:c,f:[r.getParentElement(e[p],"LI")]},u&&(l=!0)):c=null}else n.f.push(r.getParentElement(e[p],"LI")),u&&(l=!0);if(u&&r.isList(c)){const e=this.detachRangeFormatElement(n.f[0].parentNode,n.f,null,t,!0);(l||1===g)&&(s=e.ec),i&&(o=e.sc||s)}}return{sc:o,ec:s}},nodeChange:function(e,t,n,i){this._resetRangeToTextNode();let l=this.getRange_addLine(this.getRange(),null);t=!!(t&&t.length>0)&&t,n=!!(n&&n.length>0)&&n;const o=!e,s=o&&!n&&!t;let c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset;if(s&&l.collapsed&&r.isFormatElement(c.parentNode)&&r.isFormatElement(u.parentNode)||c===u&&1===c.nodeType&&r.isNonEditable(c))return;if(l.collapsed&&!s&&1===c.nodeType&&!r.isBreak(c)&&!r.isComponent(c)){let e=null;const t=c.childNodes[d];t&&(e=t.nextSibling?r.isBreak(t)?t:t.nextSibling:null);const n=r.createTextNode(r.zeroWidthSpace);c.insertBefore(n,e),this.setRange(n,1,n,1),l=this.getRange(),c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset}r.isFormatElement(c)&&(c=c.childNodes[d]||c.firstChild,d=0),r.isFormatElement(u)&&(u=u.childNodes[h]||u.lastChild,h=u.textContent.length),o&&(e=r.createElement("DIV"));const p=a.RegExp,g=e.nodeName;if(!s&&c===u&&!n&&e){let t=c,n=0;const i=[],l=e.style;for(let e=0,t=l.length;e<t;e++)i.push(l[e]);const s=e.classList;for(let e=0,t=s.length;e<t;e++)i.push("."+s[e]);if(i.length>0){for(;!r.isFormatElement(t)&&!r.isWysiwygDiv(t);){for(let l=0;l<i.length;l++)if(1===t.nodeType){const s=i[l],a=!!/^\./.test(s)&&new p("\\s*"+s.replace(/^\./,"")+"(\\s+|$)","ig"),r=o?!!t.style[s]:!!t.style[s]&&!!e.style[s]&&t.style[s]===e.style[s],c=!1!==a&&(o?!!t.className.match(a):!!t.className.match(a)&&!!e.className.match(a));(r||c)&&n++}t=t.parentNode}if(n>=i.length)return}}let m,f={},_={},b="",v="",y="";if(t){for(let e,n=0,i=t.length;n<i;n++)e=t[n],/^\./.test(e)?v+=(v?"|":"\\s*(?:")+e.replace(/^\./,""):b+=(b?"|":"(?:;|^|\\s)(?:")+e;b&&(b+=")\\s*:[^;]*\\s*(?:;|$)",b=new p(b,"ig")),v&&(v+=")(?=\\s+|$)",v=new p(v,"ig"))}if(n){y="^(?:"+n[0];for(let e=1;e<n.length;e++)y+="|"+n[e];y+=")$",y=new p(y,"i")}const C=a.Boolean,w={v:!1},x=function(e){const t=e.cloneNode(!1);if(3===t.nodeType||r.isBreak(t))return t;if(s)return null;const n=!y&&o||y&&y.test(t.nodeName);if(n&&!i)return w.v=!0,null;const l=t.style.cssText;let a="";b&&l.length>0&&(a=l.replace(b,"").trim(),a!==l&&(w.v=!0));const c=t.className;let d="";return v&&c.length>0&&(d=c.replace(v,"").trim(),d!==c&&(w.v=!0)),(!o||!v&&c||!b&&l||a||d||!n)&&(a||d||t.nodeName!==g||C(b)!==C(l)||C(v)!==C(c))?(b&&l.length>0&&(t.style.cssText=a),t.style.cssText||t.removeAttribute("style"),v&&c.length>0&&(t.className=d.trim()),t.className.trim()||t.removeAttribute("class"),t.style.cssText||t.className||t.nodeName!==g&&!n?t:(w.v=!0,null)):(w.v=!0,null)},E=this.getSelectedElements(null);l=this.getRange(),c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset,r.getFormatElement(c,null)||(c=r.getChildElement(E[0],(function(e){return 3===e.nodeType}),!1),d=0),r.getFormatElement(u,null)||(u=r.getChildElement(E[E.length-1],(function(e){return 3===e.nodeType}),!1),h=u.textContent.length);const S=r.getFormatElement(c,null)===r.getFormatElement(u,null),N=E.length-(S?0:1);m=e.cloneNode(!1);const T=s||o&&function(e){for(let t=0,n=e.length;t<n;t++)if(r._isMaintainedNode(e[t])||r._isSizeNode(e[t]))return!0;return!1}(n),k=o||r._isSizeNode(m),L=this._util_getMaintainedNode.bind(r,T,k),B=this._util_isMaintainedNode.bind(r,T,k);if(S){const e=this._nodeChange_oneLine(E[0],m,x,c,d,u,h,s,o,l.collapsed,w,L,B);f.container=e.startContainer,f.offset=e.startOffset,_.container=e.endContainer,_.offset=e.endOffset,f.container===_.container&&r.onlyZeroWidthSpace(f.container)&&(f.offset=_.offset=1),this._setCommonListStyle(e.ancestor,null)}else{N>0&&(m=e.cloneNode(!1),_=this._nodeChange_endLine(E[N],m,x,u,h,s,o,w,L,B));for(let t,n=N-1;n>0;n--)m=e.cloneNode(!1),t=this._nodeChange_middleLine(E[n],m,x,s,o,w,_.container),t.endContainer&&(_.ancestor=null,_.container=t.endContainer),this._setCommonListStyle(t.ancestor,null);m=e.cloneNode(!1),f=this._nodeChange_startLine(E[0],m,x,c,d,s,o,w,L,B,_.container),f.endContainer&&(_.ancestor=null,_.container=f.endContainer),N<=0?_=f:_.container||(_.ancestor=null,_.container=f.container,_.offset=f.container.textContent.length),this._setCommonListStyle(f.ancestor,null),this._setCommonListStyle(_.ancestor||r.getFormatElement(_.container),null)}this.controllersOff(),this.setRange(f.container,f.offset,_.container,_.offset),this.history.push(!1)},_setCommonListStyle:function(e,t){if(!r.isListCell(e))return;t||e.removeAttribute("style");const n=r.getArrayItem((t||e).childNodes,(function(e){return!r.isBreak(e)&&!r.onlyZeroWidthSpace(e.textContent.trim())}),!0);if(n[0]&&1===n.length){if(!(t=n[0])||1!==t.nodeType)return;const i=t.style,l=e.style;/STRONG/i.test(t.nodeName)?l.fontWeight="bold":i.fontWeight&&(l.fontWeight=i.fontWeight),i.color&&(l.color=i.color),i.fontSize&&(l.fontSize=i.fontSize),this._setCommonListStyle(e,t)}},_stripRemoveNode:function(e){const t=e.parentNode;if(!e||3===e.nodeType||!t)return;const n=e.childNodes;for(;n[0];)t.insertBefore(n[0],e);t.removeChild(e)},_util_getMaintainedNode:function(e,t,n){return!n||e?null:this.getParentElement(n,this._isMaintainedNode.bind(this))||(t?null:this.getParentElement(n,this._isSizeNode.bind(this)))},_util_isMaintainedNode:function(e,t,n){if(!n||e||1!==n.nodeType)return!1;const i=this._isMaintainedNode(n);return this.getParentElement(n,this._isMaintainedNode.bind(this))?i:i||!t&&this._isSizeNode(n)},_nodeChange_oneLine:function(e,t,n,i,l,o,s,c,d,u,h,p,g){let m=i.parentNode;for(;!(m.nextSibling||m.previousSibling||r.isFormatElement(m.parentNode)||r.isWysiwygDiv(m.parentNode))&&m.nodeName!==t.nodeName;)m=m.parentNode;if(!d&&m===o.parentNode&&m.nodeName===t.nodeName&&r.onlyZeroWidthSpace(i.textContent.slice(0,l))&&r.onlyZeroWidthSpace(o.textContent.slice(s))){const e=m.childNodes;let n=!0;for(let t,l,s,a,c=0,d=e.length;c<d;c++)if(t=e[c],a=!r.onlyZeroWidthSpace(t),t!==i)if(t!==o){if(!l&&a||l&&s&&a){n=!1;break}}else s=!0;else l=!0;if(n)return r.copyTagAttributes(m,t),{startContainer:i,startOffset:l,endContainer:o,endOffset:s}}h.v=!1;const f=e,_=[t],b=e.cloneNode(!1),v=i===o;let y,C,w,x,E,S=i,N=l,T=o,k=s,L=!1,B=!1;const A=a.RegExp;function M(e){const t=new A("(?:;|^|\\s)(?:"+x+"null)\\s*:[^;]*\\s*(?:;|$)","ig");let n="";return t&&e.style.cssText.length>0&&(n=t.test(e.style.cssText)),!n}if(function e(i,l){const o=i.childNodes;for(let i,s=0,a=o.length;s<a;s++){let a=o[s];if(!a)continue;let d,h=l;if(!L&&a===S){let e=b;E=p(a);const o=r.createTextNode(1===S.nodeType?"":S.substringData(0,N)),s=r.createTextNode(1===S.nodeType?"":S.substringData(N,v&&k>=N?k-N:S.data.length-N));if(E){const t=p(l);if(t&&t.parentNode!==e){let n=t,i=null;for(;n.parentNode!==e;){for(l=i=n.parentNode.cloneNode(!1);n.childNodes[0];)i.appendChild(n.childNodes[0]);n.appendChild(i),n=n.parentNode}n.parentNode.appendChild(t)}E=E.cloneNode(!1)}r.onlyZeroWidthSpace(o)||l.appendChild(o);const c=p(l);for(c&&(E=c),E&&(e=E),C=a,y=[],x="";C!==e&&C!==f&&null!==C;)i=g(C)?null:n(C),i&&1===C.nodeType&&M(C)&&(y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;const d=y.pop()||s;for(w=C=d;y.length>0;)C=y.pop(),w.appendChild(C),w=C;if(t.appendChild(d),e.appendChild(t),E&&!p(T)&&(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),S=s,N=0,L=!0,C!==s&&C.appendChild(S),!v)continue}if(B||a!==T){if(L){if(1===a.nodeType&&!r.isBreak(a)){r._isIgnoreNodeChange(a)?(b.appendChild(a.cloneNode(!0)),u||(t=t.cloneNode(!1),b.appendChild(t),_.push(t))):e(a,a);continue}C=a,y=[],x="";const o=[];for(;null!==C.parentNode&&C!==f&&C!==t;)i=B?C.cloneNode(!1):n(C),1===C.nodeType&&!r.isBreak(a)&&i&&M(C)&&(g(C)?E||o.push(i):y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;y=y.concat(o);const s=y.pop()||a;for(w=C=s;y.length>0;)C=y.pop(),w.appendChild(C),w=C;if(!g(t.parentNode)||g(s)||r.onlyZeroWidthSpace(t)||(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),B||E||!g(s))s===a?l=B?b:t:B?(b.appendChild(s),l=C):(t.appendChild(s),l=C);else{t=t.cloneNode(!1);const e=s.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);s.appendChild(t),b.appendChild(s),_.push(t),l=t.children.length>0?C:t}if(E&&3===a.nodeType)if(p(a)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===b}.bind(r));E.appendChild(e),t=e.cloneNode(!1),_.push(t),b.appendChild(t)}else E=null}d=a.cloneNode(!1),l.appendChild(d),1!==a.nodeType||r.isBreak(a)||(h=d),e(a,h)}else{E=p(a);const e=r.createTextNode(1===T.nodeType?"":T.substringData(k,T.length-k)),l=r.createTextNode(v||1===T.nodeType?"":T.substringData(0,k));if(E?E=E.cloneNode(!1):g(t.parentNode)&&!E&&(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),!r.onlyZeroWidthSpace(e)){C=a,x="",y=[];const t=[];for(;C!==b&&C!==f&&null!==C;)1===C.nodeType&&M(C)&&(g(C)?t.push(C.cloneNode(!1)):y.push(C.cloneNode(!1)),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;for(y=y.concat(t),d=w=C=y.pop()||e;y.length>0;)C=y.pop(),w.appendChild(C),w=C;b.appendChild(d),C.textContent=e.data}if(E&&d){const e=p(d);e&&(E=e)}for(C=a,y=[],x="";C!==b&&C!==f&&null!==C;)i=g(C)?null:n(C),i&&1===C.nodeType&&M(C)&&(y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;const o=y.pop()||l;for(w=C=o;y.length>0;)C=y.pop(),w.appendChild(C),w=C;E?((t=t.cloneNode(!1)).appendChild(o),E.insertBefore(t,E.firstChild),b.appendChild(E),_.push(t),E=null):t.appendChild(o),T=l,k=l.data.length,B=!0,!c&&u&&(t=l,l.textContent=r.zeroWidthSpace),C!==l&&C.appendChild(T)}}}(e,b),d&&!c&&!h.v)return{ancestor:e,startContainer:i,startOffset:l,endContainer:o,endOffset:s};if(c=c&&d)for(let e=0;e<_.length;e++){let t,n,i,l=_[e];if(u)t=r.createTextNode(r.zeroWidthSpace),b.replaceChild(t,l);else{const e=l.childNodes;for(n=e[0];e[0];)i=e[0],b.insertBefore(i,l);r.removeItem(l)}0===e&&(u?S=T=t:(S=n,T=i))}else{if(d)for(let e=0;e<_.length;e++)this._stripRemoveNode(_[e]);u&&(S=T=t)}r.removeEmptyNode(b,t),u&&(N=S.textContent.length,k=T.textContent.length);const z=c||0===T.textContent.length;r.isBreak(T)||0!==T.textContent.length||(r.removeItem(T),T=S),k=z?T.textContent.length:k;const H={s:0,e:0},I=r.getNodePath(S,b,H),R=!T.parentNode;R&&(T=S);const D={s:0,e:0},O=r.getNodePath(T,b,R||z?null:D);N+=H.s,k=u?N:R?S.textContent.length:z?k+H.s:k+D.s;const F=r.mergeSameTags(b,[I,O],!0);return e.parentNode.replaceChild(b,e),S=r.getNodeFromPath(I,b),T=r.getNodeFromPath(O,b),{ancestor:b,startContainer:S,startOffset:N+F[0],endContainer:T,endOffset:k+F[1]}},_nodeChange_startLine:function(e,t,n,i,l,o,s,a,c,d,u){let h=i.parentNode;for(;!(h.nextSibling||h.previousSibling||r.isFormatElement(h.parentNode)||r.isWysiwygDiv(h.parentNode))&&h.nodeName!==t.nodeName;)h=h.parentNode;if(!s&&h.nodeName===t.nodeName&&!r.isFormatElement(h)&&!h.nextSibling&&r.onlyZeroWidthSpace(i.textContent.slice(0,l))){let n=!0,o=i.previousSibling;for(;o;){if(!r.onlyZeroWidthSpace(o)){n=!1;break}o=o.previousSibling}if(n)return r.copyTagAttributes(h,t),{ancestor:e,container:i,offset:l}}a.v=!1;const p=e,g=[t],m=e.cloneNode(!1);let f,_,b,v,y=i,C=l,w=!1;if(function e(i,l){const o=i.childNodes;for(let i,s,a=0,h=o.length;a<h;a++){const h=o[a];if(!h)continue;let x=l;if(w&&!r.isBreak(h)){if(1===h.nodeType){if(r._isIgnoreNodeChange(h)){if(t=t.cloneNode(!1),s=h.cloneNode(!0),m.appendChild(s),m.appendChild(t),g.push(t),u&&h.contains(u)){const e=r.getNodePath(u,h);u=r.getNodeFromPath(e,s)}}else e(h,h);continue}_=h,f=[];const o=[];for(;null!==_.parentNode&&_!==p&&_!==t;)i=n(_),1===_.nodeType&&i&&(d(_)?v||o.push(i):f.push(i)),_=_.parentNode;f=f.concat(o);const a=f.length>0,y=f.pop()||h;for(b=_=y;f.length>0;)_=f.pop(),b.appendChild(_),b=_;if(d(t.parentNode)&&!d(y)&&(t=t.cloneNode(!1),m.appendChild(t),g.push(t)),!v&&d(y)){t=t.cloneNode(!1);const e=y.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);y.appendChild(t),m.appendChild(y),l=d(_)?t:_,g.push(t)}else a?(t.appendChild(y),l=_):l=t;if(v&&3===h.nodeType)if(c(h)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===m}.bind(r));v.appendChild(e),t=e.cloneNode(!1),g.push(t),m.appendChild(t)}else v=null}if(w||h!==y)i=w?n(h):h.cloneNode(!1),i&&(l.appendChild(i),1!==h.nodeType||r.isBreak(h)||(x=i)),e(h,x);else{let e=m;v=c(h);const o=r.createTextNode(1===y.nodeType?"":y.substringData(0,C)),s=r.createTextNode(1===y.nodeType?"":y.substringData(C,y.length-C));if(v){const t=c(l);if(t&&t.parentNode!==e){let n=t,i=null;for(;n.parentNode!==e;){for(l=i=n.parentNode.cloneNode(!1);n.childNodes[0];)i.appendChild(n.childNodes[0]);n.appendChild(i),n=n.parentNode}n.parentNode.appendChild(t)}v=v.cloneNode(!1)}r.onlyZeroWidthSpace(o)||l.appendChild(o);const a=c(l);for(a&&(v=a),v&&(e=v),_=l,f=[];_!==e&&null!==_;)i=n(_),1===_.nodeType&&i&&f.push(i),_=_.parentNode;const d=f.pop()||l;for(b=_=d;f.length>0;)_=f.pop(),b.appendChild(_),b=_;d!==l?(t.appendChild(d),l=_):l=t,r.isBreak(h)&&t.appendChild(h.cloneNode(!1)),e.appendChild(t),y=s,C=0,w=!0,l.appendChild(y)}}}(e,m),s&&!o&&!a.v)return{ancestor:e,container:i,offset:l,endContainer:u};if(o=o&&s)for(let e=0;e<g.length;e++){let t=g[e];const n=t.childNodes,i=n[0];for(;n[0];)m.insertBefore(n[0],t);r.removeItem(t),0===e&&(y=i)}else if(s){t=t.firstChild;for(let e=0;e<g.length;e++)this._stripRemoveNode(g[e])}if(o||0!==m.childNodes.length){r.removeEmptyNode(m,t),r.onlyZeroWidthSpace(m.textContent)&&(y=m.firstChild,C=0);const n={s:0,e:0},i=r.getNodePath(y,m,n);C+=n.s;const l=r.mergeSameTags(m,[i],!0);e.parentNode.replaceChild(m,e),y=r.getNodeFromPath(i,m),C+=l[0]}else e.childNodes?y=e.childNodes[0]:(y=r.createTextNode(r.zeroWidthSpace),e.appendChild(y));return{ancestor:m,container:y,offset:C,endContainer:u}},_nodeChange_middleLine:function(e,t,n,i,l,o,s){if(!l){let n=null;s&&e.contains(s)&&(n=r.getNodePath(s,e));const i=e.cloneNode(!0),l=t.nodeName,o=t.style.cssText,a=t.className;let c,d=i.childNodes,u=0,h=d.length;for(;u<h&&(c=d[u],3!==c.nodeType);u++){if(c.nodeName!==l){if(!r.isBreak(c)&&r._isIgnoreNodeChange(c))continue;if(1===h){d=c.childNodes,h=d.length,u=-1;continue}break}c.style.cssText+=o,r.addClass(c,a)}if(h>0&&u===h)return e.innerHTML=i.innerHTML,{ancestor:e,endContainer:n?r.getNodeFromPath(n,e):null}}o.v=!1;const a=e.cloneNode(!1),c=[t];let d=!0;if(function e(i,l){const o=i.childNodes;for(let i,u,h=0,p=o.length;h<p;h++){let p=o[h];if(!p)continue;let g=l;if(r.isBreak(p)||!r._isIgnoreNodeChange(p))i=n(p),i&&(d=!1,l.appendChild(i),1===p.nodeType&&(g=i)),r.isBreak(p)||e(p,g);else if(t.childNodes.length>0&&(a.appendChild(t),t=t.cloneNode(!1)),u=p.cloneNode(!0),a.appendChild(u),a.appendChild(t),c.push(t),l=t,s&&p.contains(s)){const e=r.getNodePath(s,p);s=r.getNodeFromPath(e,u)}}}(e,t),d||l&&!i&&!o.v)return{ancestor:e,endContainer:s};if(a.appendChild(t),i&&l)for(let e=0;e<c.length;e++){let t=c[e];const n=t.childNodes;for(;n[0];)a.insertBefore(n[0],t);r.removeItem(t)}else if(l){t=t.firstChild;for(let e=0;e<c.length;e++)this._stripRemoveNode(c[e])}return r.removeEmptyNode(a,t),r.mergeSameTags(a,null,!0),e.parentNode.replaceChild(a,e),{ancestor:a,endContainer:s}},_nodeChange_endLine:function(e,t,n,i,l,o,s,a,c,d){let u=i.parentNode;for(;!(u.nextSibling||u.previousSibling||r.isFormatElement(u.parentNode)||r.isWysiwygDiv(u.parentNode))&&u.nodeName!==t.nodeName;)u=u.parentNode;if(!s&&u.nodeName===t.nodeName&&!r.isFormatElement(u)&&!u.previousSibling&&r.onlyZeroWidthSpace(i.textContent.slice(l))){let n=!0,o=i.nextSibling;for(;o;){if(!r.onlyZeroWidthSpace(o)){n=!1;break}o=o.nextSibling}if(n)return r.copyTagAttributes(u,t),{ancestor:e,container:i,offset:l}}a.v=!1;const h=e,p=[t],g=e.cloneNode(!1);let m,f,_,b,v=i,y=l,C=!1;if(function e(i,l){const o=i.childNodes;for(let i,s=o.length-1;0<=s;s--){const a=o[s];if(!a)continue;let u=l;if(C&&!r.isBreak(a)){if(1===a.nodeType){if(r._isIgnoreNodeChange(a)){t=t.cloneNode(!1);const e=a.cloneNode(!0);g.insertBefore(e,l),g.insertBefore(t,e),p.push(t)}else e(a,a);continue}f=a,m=[];const o=[];for(;null!==f.parentNode&&f!==h&&f!==t;)i=n(f),i&&1===f.nodeType&&(d(f)?b||o.push(i):m.push(i)),f=f.parentNode;m=m.concat(o);const s=m.length>0,u=m.pop()||a;for(_=f=u;m.length>0;)f=m.pop(),_.appendChild(f),_=f;if(d(t.parentNode)&&!d(u)&&(t=t.cloneNode(!1),g.insertBefore(t,g.firstChild),p.push(t)),!b&&d(u)){t=t.cloneNode(!1);const e=u.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);u.appendChild(t),g.insertBefore(u,g.firstChild),p.push(t),l=t.children.length>0?f:t}else s?(t.insertBefore(u,t.firstChild),l=f):l=t;if(b&&3===a.nodeType)if(c(a)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===g}.bind(r));b.appendChild(e),t=e.cloneNode(!1),p.push(t),g.insertBefore(t,g.firstChild)}else b=null}if(C||a!==v)i=C?n(a):a.cloneNode(!1),i&&(l.insertBefore(i,l.firstChild),1!==a.nodeType||r.isBreak(a)||(u=i)),e(a,u);else{b=c(a);const e=r.createTextNode(1===v.nodeType?"":v.substringData(y,v.length-y)),o=r.createTextNode(1===v.nodeType?"":v.substringData(0,y));if(b){b=b.cloneNode(!1);const e=c(l);if(e&&e.parentNode!==g){let t=e,n=null;for(;t.parentNode!==g;){for(l=n=t.parentNode.cloneNode(!1);t.childNodes[0];)n.appendChild(t.childNodes[0]);t.appendChild(n),t=t.parentNode}t.parentNode.insertBefore(e,t.parentNode.firstChild)}b=b.cloneNode(!1)}else d(t.parentNode)&&!b&&(t=t.cloneNode(!1),g.appendChild(t),p.push(t));for(r.onlyZeroWidthSpace(e)||l.insertBefore(e,l.firstChild),f=l,m=[];f!==g&&null!==f;)i=d(f)?null:n(f),i&&1===f.nodeType&&m.push(i),f=f.parentNode;const s=m.pop()||l;for(_=f=s;m.length>0;)f=m.pop(),_.appendChild(f),_=f;s!==l?(t.insertBefore(s,t.firstChild),l=f):l=t,r.isBreak(a)&&t.appendChild(a.cloneNode(!1)),b?(b.insertBefore(t,b.firstChild),g.insertBefore(b,g.firstChild),b=null):g.insertBefore(t,g.firstChild),v=o,y=o.data.length,C=!0,l.insertBefore(v,l.firstChild)}}}(e,g),s&&!o&&!a.v)return{ancestor:e,container:i,offset:l};if(o=o&&s)for(let e=0;e<p.length;e++){let t=p[e];const n=t.childNodes;let i=null;for(;n[0];)i=n[0],g.insertBefore(i,t);r.removeItem(t),e===p.length-1&&(v=i,y=i.textContent.length)}else if(s){t=t.firstChild;for(let e=0;e<p.length;e++)this._stripRemoveNode(p[e])}if(o||0!==g.childNodes.length){if(!s&&0===t.textContent.length)return r.removeEmptyNode(g,null),{ancestor:null,container:null,offset:0};r.removeEmptyNode(g,t),r.onlyZeroWidthSpace(g.textContent)?(v=g.firstChild,y=v.textContent.length):r.onlyZeroWidthSpace(v)&&(v=t,y=1);const n={s:0,e:0},i=r.getNodePath(v,g,n);y+=n.s;const l=r.mergeSameTags(g,[i],!0);e.parentNode.replaceChild(g,e),v=r.getNodeFromPath(i,g),y+=l[0]}else e.childNodes?v=e.childNodes[0]:(v=r.createTextNode(r.zeroWidthSpace),e.appendChild(v));return{ancestor:g,container:v,offset:y}},actionCall:function(t,n,i){if(n){if(/more/i.test(n)&&i!==this._moreLayerActiveButton){const n=e.element.toolbar.querySelector("."+t);return void(n&&(this._moreLayerActiveButton&&(e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command")).style.display="none",r.removeClass(this._moreLayerActiveButton,"on")),r.addClass(i,"on"),this._moreLayerActiveButton=i,n.style.display="block",u._showToolbarBalloon(),u._showToolbarInline()))}if(/submenu/.test(n)&&(null===this._menuTray[t]||i!==this.submenuActiveButton))return void this.callPlugin(t,this.submenuOn.bind(this,i),i);if(/dialog/.test(n))return void this.callPlugin(t,this.plugins[t].open.bind(this),i);if(/command/.test(n))this.callPlugin(t,this.plugins[t].action.bind(this),i);else{if(/container/.test(n)&&(null===this._menuTray[t]||i!==this.containerActiveButton))return void this.callPlugin(t,this.containerOn.bind(this,i),i);/fileBrowser/.test(n)&&this.callPlugin(t,this.plugins[t].open.bind(this,null),i)}}else t&&this.commandHandler(i,t);if(/more/i.test(n)){const t=e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command"));t&&(r.removeClass(this._moreLayerActiveButton,"on"),this._moreLayerActiveButton=null,t.style.display="none",u._showToolbarBalloon(),u._showToolbarInline())}else/submenu/.test(n)?this.submenuOff():/command/.test(n)||(this.submenuOff(),this.containerOff())},commandHandler:function(t,n){switch(n){case"copy":case"cut":this.execCommand(n);break;case"paste":break;case"selectAll":const i=e.element.wysiwyg;let o=r.getChildElement(i.firstChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1)||i.firstChild,s=r.getChildElement(i.lastChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0)||i.lastChild;if(!o||!s)return;if(r.isMedia(o)){const e=this.getFileComponent(o),t=r.createElement("BR"),n=r.createElement(l.defaultTag);n.appendChild(t),o=e?e.component:o,o.parentNode.insertBefore(n,o),o=t}if(r.isMedia(s)){const e=r.createElement("BR"),t=r.createElement(l.defaultTag);t.appendChild(e),i.appendChild(t),s=e}this.setRange(o,0,s,s.textContent.length);break;case"codeView":this.toggleCodeView();break;case"fullScreen":this.toggleFullScreen(t);break;case"indent":case"outdent":this.indent(n);break;case"undo":this.history.undo();break;case"redo":this.history.redo();break;case"removeFormat":this.removeFormat(),this.focus();break;case"print":this.print();break;case"preview":this.preview();break;case"showBlocks":this.toggleDisplayBlocks();break;case"save":if("function"==typeof l.callBackSave)l.callBackSave(this.getContents(!1),this._variable.isChanged);else{if(!this._variable.isChanged||"function"!=typeof h.save)throw Error("[SUNEDITOR.core.commandHandler.fail] Please register call back function in creation option. (callBackSave : Function)");h.save()}this._variable.isChanged=!1,e.tool.save&&e.tool.save.setAttribute("disabled",!0);break;default:n=this._defaultCommand[n.toLowerCase()]||n,this.commandMap[n]||(this.commandMap[n]=t);const a=this._variable.currentNodesMap,c=a.indexOf(n)>-1?null:r.createElement(n);let d=n;/^SUB$/i.test(n)&&a.indexOf("SUP")>-1?d="SUP":/^SUP$/i.test(n)&&a.indexOf("SUB")>-1&&(d="SUB"),this.nodeChange(c,null,[d],!1),this.focus()}},removeFormat:function(){this.nodeChange(null,null,null,null)},indent:function(e){const t=this.getRange(),n=this.getSelectedElements(null),i=[],o="indent"!==e,s=l.rtl?"marginRight":"marginLeft";let a=t.startContainer,c=t.endContainer,d=t.startOffset,u=t.endOffset;for(let e,t,l=0,a=n.length;l<a;l++)e=n[l],r.isListCell(e)&&this.plugins.list?(o||e.previousElementSibling)&&i.push(e):(t=/\d+/.test(e.style[s])?r.getNumber(e.style[s],0):0,o?t-=25:t+=25,r.setStyle(e,s,t<=0?"":t+"px"));i.length>0&&this.plugins.list.editInsideList.call(this,o,i),this.effectNode=null,this.setRange(a,d,c,u),this.history.push(!1)},toggleDisplayBlocks:function(){const t=e.element.wysiwyg;r.toggleClass(t,"se-show-block"),r.hasClass(t,"se-show-block")?r.addClass(this._styleCommandMap.showBlocks,"active"):r.removeClass(this._styleCommandMap.showBlocks,"active"),this._resourcesStateChange()},toggleCodeView:function(){const t=this._variable.isCodeView;this.controllersOff(),r.setDisabledButtons(!t,this.codeViewDisabledButtons),t?(this._setCodeDataToEditor(),e.element.wysiwygFrame.scrollTop=0,e.element.code.style.display="none",e.element.wysiwygFrame.style.display="block",this._variable._codeOriginCssText=this._variable._codeOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: none"),this._variable._wysiwygOriginCssText=this._variable._wysiwygOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: block"),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.style.height="0px"),this._variable.isCodeView=!1,this._variable.isFullScreen||(this._notHideToolbar=!1,/balloon|balloon-always/i.test(l.mode)&&(e.element._arrow.style.display="",this._isInline=!1,this._isBalloon=!0,u._hideToolbar())),this.nativeFocus(),r.removeClass(this._styleCommandMap.codeView,"active"),this.history.push(!1),this.history._resetCachingButton()):(this._setEditorDataToCodeView(),this._variable._codeOriginCssText=this._variable._codeOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: block"),this._variable._wysiwygOriginCssText=this._variable._wysiwygOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: none"),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.style.height=e.element.code.scrollHeight>0?e.element.code.scrollHeight+"px":"auto"),l.codeMirrorEditor&&l.codeMirrorEditor.refresh(),this._variable.isCodeView=!0,this._variable.isFullScreen||(this._notHideToolbar=!0,this._isBalloon&&(e.element._arrow.style.display="none",e.element.toolbar.style.left="",this._isInline=!0,this._isBalloon=!1,u._showToolbarInline())),this._variable._range=null,e.element.code.focus(),r.addClass(this._styleCommandMap.codeView,"active")),this._checkPlaceholder(),"function"==typeof h.toggleCodeView&&h.toggleCodeView(this._variable.isCodeView,this)},_setCodeDataToEditor:function(){const t=this._getCodeView();if(l.fullPage){const e=this._parser.parseFromString(t,"text/html"),n=e.head.children;for(let t=0,i=n.length;t<i;t++)/^script$/i.test(n[t].tagName)&&(e.head.removeChild(n[t]),t--,i--);this._wd.head.innerHTML=e.head.innerHTML,this._wd.body.innerHTML=this.convertContentsForEditor(e.body.innerHTML);const i=e.body.attributes;for(let e=0,t=i.length;e<t;e++)"contenteditable"!==i[e].name&&this._wd.body.setAttribute(i[e].name,i[e].value);if(!r.hasClass(this._wd.body,"sun-editor-editable")){const e=l._editableClass.split(" ");for(let t=0;t<e.length;t++)r.addClass(this._wd.body,l._editableClass[t])}}else e.element.wysiwyg.innerHTML=t.length>0?this.convertContentsForEditor(t):"<"+l.defaultTag+"><br></"+l.defaultTag+">"},_setEditorDataToCodeView:function(){const t=this.convertHTMLForCodeView(e.element.wysiwyg);let n="";if(l.fullPage){const e=r.getAttributesToString(this._wd.body,null);n="<!DOCTYPE html>\n<html>\n"+this._wd.head.outerHTML.replace(/>(?!\n)/g,">\n")+"<body "+e+">\n"+t+"</body>\n</html>"}else n=t;e.element.code.style.display="block",e.element.wysiwygFrame.style.display="none",this._setCodeView(n)},toggleFullScreen:function(t){const n=e.element.topArea,i=e.element.toolbar,o=e.element.editorArea,d=e.element.wysiwygFrame,p=e.element.code,g=this._variable;this.controllersOff(),g.isFullScreen?(g.isFullScreen=!1,d.style.cssText=g._wysiwygOriginCssText,p.style.cssText=g._codeOriginCssText,i.style.cssText="",o.style.cssText=g._editorAreaOriginCssText,n.style.cssText=g._originCssText,s.body.style.overflow=g._bodyOverflow,l.toolbarContainer&&l.toolbarContainer.appendChild(i),l.stickyToolbar>-1&&r.removeClass(i,"se-toolbar-sticky"),g._fullScreenAttrs.sticky&&!l.toolbarContainer&&(g._fullScreenAttrs.sticky=!1,e.element._stickyDummy.style.display="block",r.addClass(i,"se-toolbar-sticky")),this._isInline=g._fullScreenAttrs.inline,this._isBalloon=g._fullScreenAttrs.balloon,this._isInline&&u._showToolbarInline(),l.toolbarContainer&&r.removeClass(i,"se-toolbar-balloon"),u.onScroll_window(),r.changeElement(t.firstElementChild,c.expansion),e.element.topArea.style.marginTop="",r.removeClass(this._styleCommandMap.fullScreen,"active")):(g.isFullScreen=!0,g._fullScreenAttrs.inline=this._isInline,g._fullScreenAttrs.balloon=this._isBalloon,(this._isInline||this._isBalloon)&&(this._isInline=!1,this._isBalloon=!1),l.toolbarContainer&&e.element.relative.insertBefore(i,o),n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.width="100%",n.style.maxWidth="100%",n.style.height="100%",n.style.zIndex="2147483647",""!==e.element._stickyDummy.style.display&&(g._fullScreenAttrs.sticky=!0,e.element._stickyDummy.style.display="none",r.removeClass(i,"se-toolbar-sticky")),g._bodyOverflow=s.body.style.overflow,s.body.style.overflow="hidden",g._editorAreaOriginCssText=o.style.cssText,g._wysiwygOriginCssText=d.style.cssText,g._codeOriginCssText=p.style.cssText,o.style.cssText=i.style.cssText="",d.style.cssText=(d.style.cssText.match(/\s?display(\s+)?:(\s+)?[a-zA-Z]+;/)||[""])[0],p.style.cssText=(p.style.cssText.match(/\s?display(\s+)?:(\s+)?[a-zA-Z]+;/)||[""])[0],i.style.width=d.style.height=p.style.height="100%",i.style.position="relative",i.style.display="block",g.innerHeight_fullScreen=a.innerHeight-i.offsetHeight,o.style.height=g.innerHeight_fullScreen-l.fullScreenOffset+"px",r.changeElement(t.firstElementChild,c.reduction),l.iframe&&"auto"===l.height&&(o.style.overflow="auto",this._iframeAutoHeight()),e.element.topArea.style.marginTop=l.fullScreenOffset+"px",r.addClass(this._styleCommandMap.fullScreen,"active")),"function"==typeof h.toggleFullScreen&&h.toggleFullScreen(this._variable.isFullScreen,this)},print:function(){const e=r.createElement("IFRAME");e.style.display="none",s.body.appendChild(e);const t=l.printTemplate?l.printTemplate.replace(/\{\{\s*contents\s*\}\}/i,this.getContents(!0)):this.getContents(!0),n=r.getIframeDocument(e),i=this._wd;if(l.iframe){const e=null!==l._printClass?'class="'+l._printClass+'"':l.fullPage?r.getAttributesToString(i.body,["contenteditable"]):'class="'+l._editableClass+'"';n.write("<!DOCTYPE html><html><head>"+i.head.innerHTML+"</head><body "+e+">"+t+"</body></html>")}else{const e=s.head.getElementsByTagName("link"),i=s.head.getElementsByTagName("style");let o="";for(let t=0,n=e.length;t<n;t++)o+=e[t].outerHTML;for(let e=0,t=i.length;e<t;e++)o+=i[e].outerHTML;n.write("<!DOCTYPE html><html><head>"+o+'</head><body class="'+(null!==l._printClass?l._printClass:l._editableClass)+'">'+t+"</body></html>")}this.showLoading(),a.setTimeout((function(){try{if(e.focus(),r.isIE_Edge||s.documentMode||a.StyleMedia)try{e.contentWindow.document.execCommand("print",!1,null)}catch(t){e.contentWindow.print()}else e.contentWindow.print()}catch(e){throw Error("[SUNEDITOR.core.print.fail] error: "+e)}finally{d.closeLoading(),r.removeItem(e)}}),1e3)},preview:function(){d.submenuOff(),d.containerOff(),d.controllersOff();const e=l.previewTemplate?l.previewTemplate.replace(/\{\{\s*contents\s*\}\}/i,this.getContents(!0)):this.getContents(!0),t=a.open("","_blank");t.mimeType="text/html";const n=this._wd;if(l.iframe){const i=null!==l._printClass?'class="'+l._printClass+'"':l.fullPage?r.getAttributesToString(n.body,["contenteditable"]):'class="'+l._editableClass+'"';t.document.write("<!DOCTYPE html><html><head>"+n.head.innerHTML+"<style>body {overflow:auto !important; margin: 10px auto !important; height:auto !important; outline:1px dashed #ccc;}</style></head><body "+i+">"+e+"</body></html>")}else{const n=s.head.getElementsByTagName("link"),o=s.head.getElementsByTagName("style");let a="";for(let e=0,t=n.length;e<t;e++)a+=n[e].outerHTML;for(let e=0,t=o.length;e<t;e++)a+=o[e].outerHTML;t.document.write('<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><title>'+i.toolbar.preview+"</title>"+a+'</head><body class="'+(null!==l._printClass?l._printClass:l._editableClass)+'" style="margin:10px auto !important; height:auto !important; outline:1px dashed #ccc;">'+e+"</body></html>")}},setContents:function(t){this.removeRange();const n=null==t?"":this.convertContentsForEditor(t);if(this._resetComponents(),this._variable.isCodeView){const e=this.convertHTMLForCodeView(n);this._setCodeView(e)}else e.element.wysiwyg.innerHTML=n,this.history.push(!1)},setIframeContents:function(e){if(!l.iframe)return!1;e.head&&(this._wd.head.innerHTML=e.head.replace(/<script[\s\S]*>[\s\S]*<\/script>/gi,"")),e.body&&(this._wd.body.innerHTML=this.convertContentsForEditor(e.body))},getContents:function(t){const n=e.element.wysiwyg.innerHTML,i=r.createElement("DIV");i.innerHTML=n;const o=r.getListChildren(i,(function(e){return/FIGCAPTION/i.test(e.nodeName)}));for(let e=0,t=o.length;e<t;e++)o[e].removeAttribute("contenteditable");if(l.fullPage&&!t){const e=r.getAttributesToString(this._wd.body,["contenteditable"]);return"<!DOCTYPE html><html>"+this._wd.head.outerHTML+"<body "+e+">"+i.innerHTML+"</body></html>"}return i.innerHTML},_makeLine:function(e,t){const n=l.defaultTag;if(1===e.nodeType)return r._disallowedTags(e)?"":!t||r.isFormatElement(e)||r.isRangeFormatElement(e)||r.isComponent(e)||r.isMedia(e)||r.isAnchor(e)&&r.isMedia(e.firstElementChild)?e.outerHTML:"<"+n+">"+e.outerHTML+"</"+n+">";if(3===e.nodeType){if(!t)return r._HTMLConvertor(e.textContent);const i=e.textContent.split(/\n/g);let l="";for(let e,t=0,o=i.length;t<o;t++)e=i[t].trim(),e.length>0&&(l+="<"+n+">"+r._HTMLConvertor(e)+"</"+n+">");return l}return 8===e.nodeType&&this._allowHTMLComments?"\x3c!--"+e.textContent.trim()+"--\x3e":""},_tagConvertor:function(e){if(!this._disallowedTextTagsRegExp)return e;const t=l._textTagsMap;return e.replace(this._disallowedTextTagsRegExp,(function(e,n,i){return n+("string"==typeof t[i]?t[i]:i)}))},_deleteDisallowedTags:function(e){return e.replace(/\n/g,"").replace(/<(script|style)[\s\S]*>[\s\S]*<\/(script|style)>/gi,"").replace(/<[a-z0-9]+\:[a-z0-9]+[^>^\/]*>[^>]*<\/[a-z0-9]+\:[a-z0-9]+>/gi,"").replace(this.editorTagsWhitelistRegExp,"")},_cleanTags:function(e,t,n){if(/^<[a-z0-9]+\:[a-z0-9]+/i.test(t))return t;let i=null;const l=this._attributesTagsWhitelist[n.match(/(?!<)[a-zA-Z0-9\-]+/)[0].toLowerCase()];if(i=l?t.match(l):t.match(this._attributesWhitelistRegExp),(e||/<span/i.test(n))&&(!i||!/style=/i.test(i.toString()))){const e=t.match(/style\s*=\s*(?:"|')[^"']*(?:"|')/);e&&(i||(i=[]),i.push(e[0]))}if(/<a\b/i.test(n)){const e=t.match(/id\s*=\s*(?:"|')[^"']*(?:"|')/);e&&(i||(i=[]),i.push(e[0]))}if(i)for(let t=0,l=i.length;t<l;t++)e&&/^class="(?!(__se__|se-|katex))/.test(i[t])||(n+=" "+(/^href\s*=\s*('|"|\s)*javascript\s*\:/i.test(i[t])?"":i[t]));return n},cleanHTML:function(e,t){e=this._deleteDisallowedTags(this._parser.parseFromString(e,"text/html").body.innerHTML).replace(/(<[a-zA-Z0-9\-]+)[^>]*(?=>)/g,this._cleanTags.bind(this,!1));const n=s.createRange().createContextualFragment(e);try{r._consistencyCheckOfHTML(n,this._htmlCheckWhitelistRegExp)}catch(e){console.warn("[SUNEDITOR.cleanHTML.consistencyCheck.fail] "+e)}if(this.managedTagsInfo&&this.managedTagsInfo.query){const e=n.querySelectorAll(this.managedTagsInfo.query);for(let t,n,i=0,l=e.length;i<l;i++){n=[].slice.call(e[i].classList);for(let l=0,o=n.length;l<o;l++)if(t=this.managedTagsInfo.map[n[l]],t){t(e[i]);break}}}const i=n.childNodes;let l="",o=!1;for(let e,t=0,n=i.length;t<n;t++)if(e=i[t],1===e.nodeType&&!r.isTextStyleElement(e)&&!r.isBreak(e)&&!r._disallowedTags(e)){o=!0;break}for(let e=0,t=i.length;e<t;e++)l+=this._makeLine(i[e],o);return l=r.htmlRemoveWhiteSpace(l),this._tagConvertor(l?t?l.replace("string"==typeof t?r.createTagsWhitelist(t):t,""):l:e)},convertContentsForEditor:function(e){e=this._deleteDisallowedTags(this._parser.parseFromString(e,"text/html").body.innerHTML).replace(/(<[a-zA-Z0-9\-]+)[^>]*(?=>)/g,this._cleanTags.bind(this,!0));const t=s.createRange().createContextualFragment(e);try{r._consistencyCheckOfHTML(t,this._htmlCheckWhitelistRegExp)}catch(e){console.warn("[SUNEDITOR.convertContentsForEditor.consistencyCheck.fail] "+e)}if(this.managedTagsInfo&&this.managedTagsInfo.query){const e=t.querySelectorAll(this.managedTagsInfo.query);for(let t,n,i=0,l=e.length;i<l;i++){n=[].slice.call(e[i].classList);for(let l=0,o=n.length;l<o;l++)if(t=this.managedTagsInfo.map[n[l]],t){t(e[i]);break}}}const n=t.childNodes;let i="";for(let e=0,t=n.length;e<t;e++)i+=this._makeLine(n[e],!0);return 0===i.length?"<"+l.defaultTag+"><br></"+l.defaultTag+">":(i=r.htmlRemoveWhiteSpace(i),this._tagConvertor(i))},convertHTMLForCodeView:function(e){let t="";const n=a.RegExp,i=new n("^(BLOCKQUOTE|PRE|TABLE|THEAD|TBODY|TR|TH|TD|OL|UL|IMG|IFRAME|VIDEO|AUDIO|FIGURE|FIGCAPTION|HR|BR|CANVAS|SELECT)$","i"),l="string"==typeof e?s.createRange().createContextualFragment(e):e,o=function(e){return this.isFormatElement(e)||this.isComponent(e)}.bind(r);let c=1*this._variable.codeIndent;return c=c>0?new a.Array(c+1).join(" "):"",function e(l,s,d){const u=l.childNodes,h=i.test(l.nodeName),p=h?s:"";for(let g,m,f,_,b,v=0,y=u.length;v<y;v++)g=u[v],f=i.test(g.nodeName),m=f?"\n":"",d=!o(g)||h||/^(TH|TD)$/i.test(l.nodeName)?"":"\n",8!==g.nodeType?3!==g.nodeType?0!==g.childNodes.length?g.outerHTML?(_=g.nodeName.toLowerCase(),b=p||f?s:"",t+=(d||(h?"":m))+b+g.outerHTML.match(n("<"+_+"[^>]*>","i"))[0]+m,e(g,s+c,""),t+=(/\n$/.test(t)?b:"")+"</"+_+">"+(d||m||h||/^(TH|TD)$/i.test(g.nodeName)?"\n":"")):t+=(new a.XMLSerializer).serializeToString(g):t+=(/^HR$/i.test(g.nodeName)?"\n":"")+(/^PRE$/i.test(g.parentElement.nodeName)&&/^BR$/i.test(g.nodeName)?"":p)+g.outerHTML+m:r.isList(g.parentElement)||(t+=r._HTMLConvertor(/^\n+$/.test(g.data)?"":g.data)):t+="\n\x3c!-- "+g.textContent.trim()+" --\x3e"+m}(l,"","\n"),t.trim()+"\n"},addDocEvent:function(e,t,n){s.addEventListener(e,t,n),l.iframe&&this._wd.addEventListener(e,t)},removeDocEvent:function(e,t){s.removeEventListener(e,t),l.iframe&&this._wd.removeEventListener(e,t)},_charCount:function(e){const t=l.maxCharCount,n=l.charCounterType;let i=0;if(e&&(i=this.getCharLength(e,n)),this._setCharCount(),t>0){let e=!1;const l=h.getCharCount(n);if(l>t){if(e=!0,i>0){this._editorRange();const e=this.getRange(),n=e.endOffset-1,i=this.getSelectionNode().textContent,o=e.endOffset-(l-t);this.getSelectionNode().textContent=i.slice(0,o<0?0:o)+i.slice(e.endOffset,i.length),this.setRange(e.endContainer,n,e.endContainer,n)}}else l+i>t&&(e=!0);if(e&&(this._callCounterBlink(),i>0))return!1}return!0},checkCharCount:function(e,t){if(l.maxCharCount){const n=t||l.charCounterType,i=this.getCharLength("string"==typeof e?e:this._charTypeHTML&&1===e.nodeType?e.outerHTML:e.textContent,n);if(i>0&&i+h.getCharCount(n)>l.maxCharCount)return this._callCounterBlink(),!1}return!0},getCharLength:function(e,t){return/byte/.test(t)?r.getByteLength(e):e.length},_setCharCount:function(){e.element.charCounter&&a.setTimeout((function(){e.element.charCounter.textContent=h.getCharCount(l.charCounterType)}))},_callCounterBlink:function(){const t=e.element.charWrapper;t&&!r.hasClass(t,"se-blink")&&(r.addClass(t,"se-blink"),a.setTimeout((function(){r.removeClass(t,"se-blink")}),600))},_checkComponents:function(){for(let e=0,t=this._fileInfoPluginsCheck.length;e<t;e++)this._fileInfoPluginsCheck[e]()},_resetComponents:function(){for(let e=0,t=this._fileInfoPluginsReset.length;e<t;e++)this._fileInfoPluginsReset[e]()},_setCodeView:function(t){l.codeMirrorEditor?l.codeMirrorEditor.getDoc().setValue(t):e.element.code.value=t},_getCodeView:function(){return l.codeMirrorEditor?l.codeMirrorEditor.getDoc().getValue():e.element.code.value},_init:function(i,o){const c=a.RegExp;if(this._ww=l.iframe?e.element.wysiwygFrame.contentWindow:a,this._wd=s,this._charTypeHTML="byte-html"===l.charCounterType,!l.iframe&&"function"==typeof a.ShadowRoot){let t=e.element.wysiwygFrame;for(;t;){if(t.shadowRoot){this._shadowRoot=t.shadowRoot;break}if(t instanceof a.ShadowRoot){this._shadowRoot=t;break}t=t.parentNode}this._shadowRoot&&(this._shadowRootControllerEventTarget=[])}const d=a.Object.keys(l._textTagsMap),u=l.addTagsWhitelist?l.addTagsWhitelist.split("|").filter((function(e){return/b|i|ins|s|strike/i.test(e)})):[];for(let e=0;e<u.length;e++)d.splice(d.indexOf(u[e].toLowerCase()),1);this._disallowedTextTagsRegExp=0===d.length?null:new c("(<\\/?)("+d.join("|")+")\\b\\s*(?:[^>^<]+)?\\s*(?=>)","gi");const h="contenteditable|id|colspan|rowspan|target|href|download|rel|src|alt|class|type|controls|data-format|data-size|data-file-size|data-file-name|data-origin|data-align|data-image-link|data-rotate|data-proportion|data-percentage|origin-size|data-exp|data-font-size";this._allowHTMLComments=l._editorTagsWhitelist.indexOf("//")>-1,this._htmlCheckWhitelistRegExp=new c("^("+l._editorTagsWhitelist.replace("|//","")+")$","i"),this.editorTagsWhitelistRegExp=r.createTagsWhitelist(l._editorTagsWhitelist.replace("|//","|\x3c!--|--\x3e")),this.pasteTagsWhitelistRegExp=r.createTagsWhitelist(l.pasteTagsWhitelist);const p=l.attributesWhitelist,g={};let m="";if(p)for(let e in p)r.hasOwn(p,e)&&("all"===e?m=p[e]+"|":g[e]=new c("(?:"+p[e]+"|"+h+')\\s*=\\s*(")[^"]*\\1',"ig"));this._attributesWhitelistRegExp=new c("(?:"+m+h+')\\s*=\\s*(")[^"]*\\1',"ig"),this._attributesTagsWhitelist=g,this._isInline=/inline/i.test(l.mode),this._isBalloon=/balloon|balloon-always/i.test(l.mode),this._isBalloonAlways=/balloon-always/i.test(l.mode),this._cachingButtons(),this._fileInfoPluginsCheck=[],this._fileInfoPluginsReset=[],this.managedTagsInfo={query:"",map:{}};const f=[];this.activePlugins=[],this._fileManager.tags=[],this._fileManager.pluginMap={};let _,b,v=[];for(let e in n)if(r.hasOwn(n,e)){if(_=n[e],b=t[e],_.active&&b&&this.callPlugin(e,null,b),"function"==typeof _.checkFileInfo&&"function"==typeof _.resetFileInfo&&(this.callPlugin(e,null,b),this._fileInfoPluginsCheck.push(_.checkFileInfo.bind(this)),this._fileInfoPluginsReset.push(_.resetFileInfo.bind(this))),a.Array.isArray(_.fileTags)){const t=_.fileTags;this.callPlugin(e,null,b),this._fileManager.tags=this._fileManager.tags.concat(t),v.push(e);for(let n=0,i=t.length;n<i;n++)this._fileManager.pluginMap[t[n].toLowerCase()]=e}if(_.managedTags){const e=_.managedTags();f.push("."+e.className),this.managedTagsInfo.map[e.className]=e.method.bind(this)}}this.managedTagsInfo.query=f.toString(),this._fileManager.queryString=this._fileManager.tags.join(","),this._fileManager.regExp=new c("^("+this._fileManager.tags.join("|")+")$","i"),this._fileManager.pluginRegExp=new c("^("+(0===v.length?"undefined":v.join("|"))+")$","i"),this._variable._originCssText=e.element.topArea.style.cssText,this._placeholder=e.element.placeholder,this._lineBreaker=e.element.lineBreaker,this._lineBreakerButton=this._lineBreaker.querySelector("button"),this.history=function(e,t){const n=e._w,i=e.util,l=e.options.historyStackDelayTime;let o=e.context.element,s=e.context.tool.undo,a=e.context.tool.redo,r=null,c=0,d=[];function u(){const n=d[c];o.wysiwyg.innerHTML=n.contents,e.setRange(i.getNodeFromPath(n.s.path,o.wysiwyg),n.s.offset,i.getNodeFromPath(n.e.path,o.wysiwyg),n.e.offset),e.focus(),0===c?(s&&s.setAttribute("disabled",!0),a&&a.removeAttribute("disabled")):c===d.length-1?(s&&s.removeAttribute("disabled"),a&&a.setAttribute("disabled",!0)):(s&&s.removeAttribute("disabled"),a&&a.removeAttribute("disabled")),e.controllersOff(),e._checkComponents(),e._setCharCount(),e._resourcesStateChange(),t()}function h(){e._checkComponents();const n=e.getContents(!0);if(!n||d[c]&&n===d[c].contents)return;c++;const l=e._variable._range;d.length>c&&(d=d.slice(0,c),a&&a.setAttribute("disabled",!0)),d[c]=l?{contents:n,s:{path:i.getNodePath(l.startContainer,null,null),offset:l.startOffset},e:{path:i.getNodePath(l.endContainer,null,null),offset:l.endOffset}}:{contents:n,s:{path:[0,0],offset:[0,0]},e:{path:0,offset:0}},1===c&&s&&s.removeAttribute("disabled"),e._setCharCount(),t()}return{stack:d,push:function(t){n.setTimeout(e._resourcesStateChange.bind(e));const i="number"==typeof t?t>0?t:0:t?l:0;i&&!r||(n.clearTimeout(r),i)?r=n.setTimeout((function(){n.clearTimeout(r),r=null,h()}),i):h()},undo:function(){c>0&&(c--,u())},redo:function(){d.length-1>c&&(c++,u())},go:function(e){c=e<0?d.length-1:e,u()},reset:function(n){s&&s.setAttribute("disabled",!0),a&&a.setAttribute("disabled",!0),e._variable.isChanged=!1,e.context.tool.save&&e.context.tool.save.setAttribute("disabled",!0),d.splice(0),c=0,d[c]={contents:e.getContents(!0),s:{path:[0,0],offset:0},e:{path:[0,0],offset:0}},n||t()},_resetCachingButton:function(){o=e.context.element,s=e.context.tool.undo,a=e.context.tool.redo,0===c?(s&&s.setAttribute("disabled",!0),a&&c===d.length-1&&a.setAttribute("disabled",!0),e._variable.isChanged=!1,e.context.tool.save&&e.context.tool.save.setAttribute("disabled",!0)):c===d.length-1&&a&&a.setAttribute("disabled",!0)},_destroy:function(){r&&n.clearTimeout(r),d=null}}}(this,this._onChange_historyStack.bind(this)),this.addModule([M]),l.iframe&&(this._wd=e.element.wysiwygFrame.contentDocument,e.element.wysiwyg=this._wd.body,l._editorStyles.editor&&(e.element.wysiwyg.style.cssText=l._editorStyles.editor),"auto"===l.height&&(this._iframeAuto=this._wd.body)),this._initWysiwygArea(i,o)},_cachingButtons:function(){a.setTimeout(function(){this.codeViewDisabledButtons=e.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~="se-code-view-enabled"])'),this.resizingDisabledButtons=e.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~="se-resizing-enabled"]):not([data-display="MORE"])')}.bind(this));const t=e.tool;this.commandMap={SUB:t.subscript,SUP:t.superscript,OUTDENT:t.outdent,INDENT:t.indent},this.commandMap[l.textTags.bold.toUpperCase()]=t.bold,this.commandMap[l.textTags.underline.toUpperCase()]=t.underline,this.commandMap[l.textTags.italic.toUpperCase()]=t.italic,this.commandMap[l.textTags.strike.toUpperCase()]=t.strike,this._styleCommandMap={fullScreen:t.fullScreen,showBlocks:t.showBlocks,codeView:t.codeView}},_initWysiwygArea:function(t,n){e.element.wysiwyg.innerHTML=t?n:this.convertContentsForEditor("string"==typeof n?n:e.element.originElement.value)},_resourcesStateChange:function(){this._iframeAutoHeight(),this._checkPlaceholder()},_onChange_historyStack:function(){this.hasFocus&&u._applyTagEffects(),this._variable.isChanged=!0,e.tool.save&&e.tool.save.removeAttribute("disabled"),h.onChange&&h.onChange(this.getContents(!0),this),"block"===e.element.toolbar.style.display&&u._showToolbarBalloon()},_iframeAutoHeight:function(){this._iframeAuto&&a.setTimeout((function(){e.element.wysiwygFrame.style.height=d._iframeAuto.offsetHeight+"px"}))},_checkPlaceholder:function(){if(this._placeholder){if(this._variable.isCodeView)return void(this._placeholder.style.display="none");const t=e.element.wysiwyg;!r.onlyZeroWidthSpace(t.textContent)||t.querySelector(r._allowedEmptyNodeList)||(t.innerText.match(/\n/g)||"").length>1?this._placeholder.style.display="none":this._placeholder.style.display="block"}},_setDefaultFormat:function(e){if(this._fileManager.pluginRegExp.test(this.currentControllerName))return;const t=this.getRange(),n=t.commonAncestorContainer,i=t.startContainer,o=r.getRangeFormatElement(n,null);let s,a,c;const d=r.getParentElement(n,r.isComponent);if((!d||r.isTable(d))&&(!r.isRangeFormatElement(i)&&!r.isWysiwygDiv(i)||!r.isComponent(i.children[t.startOffset])&&!r.isComponent(i.children[t.startOffset-1]))){if(o)return c=r.createElement(e||l.defaultTag),c.innerHTML=o.innerHTML,0===c.childNodes.length&&(c.innerHTML=r.zeroWidthSpace),o.innerHTML=c.outerHTML,c=o.firstChild,s=r.getEdgeChildNodes(c,null).sc,s||(s=r.createTextNode(r.zeroWidthSpace),c.insertBefore(s,c.firstChild)),a=s.textContent.length,void this.setRange(s,a,s,a);if(r.isRangeFormatElement(n)&&n.childNodes.length<=1){let e=null;return 1===n.childNodes.length&&r.isBreak(n.firstChild)?e=n.firstChild:(e=r.createTextNode(r.zeroWidthSpace),n.appendChild(e)),void this.setRange(e,1,e,1)}if(this.execCommand("formatBlock",!1,e||l.defaultTag),s=r.getEdgeChildNodes(n,n),s=s?s.ec:n,c=r.getFormatElement(s,null),!c)return this.removeRange(),void this._editorRange();if(r.isBreak(c.nextSibling)&&r.removeItem(c.nextSibling),r.isBreak(c.previousSibling)&&r.removeItem(c.previousSibling),r.isBreak(s)){const e=r.createTextNode(r.zeroWidthSpace);s.parentNode.insertBefore(e,s),s=e}this.effectNode=null,this.nativeFocus()}},_setOptionsInit:function(t,n){this.context=e=A(t.originElement,this._getConstructed(t),l),this._componentsInfoReset=!0,this._editorInit(!0,n)},_editorInit:function(t,n){this._init(t,n),u._addEvent(),this._setCharCount(),u._offStickyToolbar(),u.onResize_window(),e.element.toolbar.style.visibility="",this._checkComponents(),this._componentsInfoInit=!1,this._componentsInfoReset=!1,this.history.reset(!0),this._resourcesStateChange(),a.setTimeout((function(){"function"==typeof h.onload&&h.onload(d,t)}))},_getConstructed:function(e){return{_top:e.topArea,_relative:e.relative,_toolBar:e.toolbar,_menuTray:e._menuTray,_editorArea:e.editorArea,_wysiwygArea:e.wysiwygFrame,_codeArea:e.code,_placeholder:e.placeholder,_resizingBar:e.resizingBar,_navigation:e.navigation,_charCounter:e.charCounter,_charWrapper:e.charWrapper,_loading:e.loading,_lineBreaker:e.lineBreaker,_lineBreaker_t:e.lineBreaker_t,_lineBreaker_b:e.lineBreaker_b,_resizeBack:e.resizeBackground,_stickyDummy:e._stickyDummy,_arrow:e._arrow}}},u={_IEisComposing:!1,_lineBreakerBind:null,_responsiveCurrentSize:"default",_responsiveButtonSize:null,_responsiveButtons:null,_directionKeyCode:new a.RegExp("^(8|13|3[2-9]|40|46)$"),_nonTextKeyCode:new a.RegExp("^(8|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145)$"),_historyIgnoreKeyCode:new a.RegExp("^(1[6-9]|20|27|3[3-9]|40|45|11[2-9]|12[0-3]|144|145)$"),_onButtonsCheck:new a.RegExp("^("+a.Object.keys(l._textTagsMap).join("|")+")$","i"),_frontZeroWidthReg:new a.RegExp(r.zeroWidthSpace+"+",""),_keyCodeShortcut:{65:"A",66:"B",83:"S",85:"U",73:"I",89:"Y",90:"Z",219:"[",221:"]"},_shortcutCommand:function(e,t){let n=null;switch(u._keyCodeShortcut[e]){case"A":n="selectAll";break;case"B":-1===l.shortcutsDisable.indexOf("bold")&&(n="bold");break;case"S":t&&-1===l.shortcutsDisable.indexOf("strike")?n="strike":t||-1!==l.shortcutsDisable.indexOf("save")||(n="save");break;case"U":-1===l.shortcutsDisable.indexOf("underline")&&(n="underline");break;case"I":-1===l.shortcutsDisable.indexOf("italic")&&(n="italic");break;case"Z":-1===l.shortcutsDisable.indexOf("undo")&&(n=t?"redo":"undo");break;case"Y":-1===l.shortcutsDisable.indexOf("undo")&&(n="redo");break;case"[":-1===l.shortcutsDisable.indexOf("indent")&&(n=l.rtl?"indent":"outdent");break;case"]":-1===l.shortcutsDisable.indexOf("indent")&&(n=l.rtl?"outdent":"indent")}return!!n&&(d.commandHandler(d.commandMap[n],n),!0)},_applyTagEffects:function(){let t=d.getSelectionNode();if(t===d.effectNode)return;d.effectNode=t;const i=l.rtl?"marginRight":"marginLeft",o=d.commandMap,s=this._onButtonsCheck,a=[],c=[],u=d.activePlugins,h=u.length;let p="";for(;t.firstChild;)t=t.firstChild;for(let e=t;!r.isWysiwygDiv(e)&&e;e=e.parentNode)if(1===e.nodeType&&!r.isBreak(e)){p=e.nodeName.toUpperCase(),c.push(p);for(let t,i=0;i<h;i++)t=u[i],-1===a.indexOf(t)&&n[t].active.call(d,e)&&a.push(t);r.isFormatElement(e)?(-1===a.indexOf("OUTDENT")&&o.OUTDENT&&(r.isListCell(e)||e.style[i]&&r.getNumber(e.style[i],0)>0)&&(a.push("OUTDENT"),o.OUTDENT.removeAttribute("disabled")),-1===a.indexOf("INDENT")&&o.INDENT&&(a.push("INDENT"),r.isListCell(e)&&!e.previousElementSibling?o.INDENT.setAttribute("disabled",!0):o.INDENT.removeAttribute("disabled"))):s.test(p)&&(a.push(p),r.addClass(o[p],"active"))}for(let e in o)a.indexOf(e)>-1||!r.hasOwn(o,e)||(u.indexOf(e)>-1?n[e].active.call(d,null):o.OUTDENT&&/^OUTDENT$/i.test(e)?o.OUTDENT.setAttribute("disabled",!0):o.INDENT&&/^INDENT$/i.test(e)?o.INDENT.removeAttribute("disabled"):r.removeClass(o[e],"active"));d._variable.currentNodes=c.reverse(),d._variable.currentNodesMap=a,l.showPathLabel&&(e.element.navigation.textContent=d._variable.currentNodes.join(" > "))},_cancelCaptionEdit:function(){this.setAttribute("contenteditable",!1),this.removeEventListener("blur",u._cancelCaptionEdit)},_buttonsEventHandler:function(e){let t=e.target;if(d._bindControllersOff&&e.stopPropagation(),/^(input|textarea|select|option)$/i.test(t.nodeName)?d._antiBlur=!1:e.preventDefault(),r.getParentElement(t,".se-submenu"))e.stopPropagation(),d._notHideToolbar=!0;else{let n=t.getAttribute("data-command"),i=t.className;for(;!n&&!/se-menu-list/.test(i)&&!/sun-editor-common/.test(i);)t=t.parentNode,n=t.getAttribute("data-command"),i=t.className;n!==d._submenuName&&n!==d._containerName||e.stopPropagation()}},onClick_toolbar:function(e){let t=e.target,n=t.getAttribute("data-display"),i=t.getAttribute("data-command"),l=t.className;for(d.controllersOff();t.parentNode&&!i&&!/se-menu-list/.test(l)&&!/se-toolbar/.test(l);)t=t.parentNode,i=t.getAttribute("data-command"),n=t.getAttribute("data-display"),l=t.className;(i||n)&&(t.disabled||(d.hasFocus||d.nativeFocus(),d._variable.isCodeView||d._editorRange(),d.actionCall(i,n,t)))},onMouseDown_wysiwyg:function(t){if(r.isNonEditable(e.element.wysiwyg))return;if("function"==typeof h.onMouseDown&&!1===h.onMouseDown(t,d))return;const n=r.getParentElement(t.target,r.isCell);if(n){const e=d.plugins.table;e&&n!==e._fixedCell&&!e._shift&&d.callPlugin("table",(function(){e.onTableCellMultiSelect.call(d,n,!1)}),null)}d._isBalloon&&u._hideToolbar(),/FIGURE/i.test(t.target.nodeName)&&t.preventDefault()},onClick_wysiwyg:function(t){const n=t.target;if(r.isNonEditable(e.element.wysiwyg))return;if("function"==typeof h.onClick&&!1===h.onClick(t,d))return;const i=d.getFileComponent(n);if(i)return t.preventDefault(),void d.selectComponent(i.target,i.pluginName);const o=r.getParentElement(n,"FIGCAPTION");if(r.isNonEditable(o)&&(t.preventDefault(),o.setAttribute("contenteditable",!0),o.focus(),d._isInline&&!d._inlineToolbarAttr.isShow)){u._showToolbarInline();const e=function(){u._hideToolbar(),o.removeEventListener("blur",e)};o.addEventListener("blur",e)}a.setTimeout(d._editorRange.bind(d)),d._editorRange();const s=d.getSelectionNode(),c=r.getFormatElement(s,null),p=r.getRangeFormatElement(s,null);if(c&&c!==p||r.isNonEditable(n)||r.isList(p))u._applyTagEffects();else{const e=d.getRange();if(r.getFormatElement(e.startContainer)===r.getFormatElement(e.endContainer))if(r.isList(p)){t.preventDefault();const e=r.createElement("LI"),n=s.nextElementSibling;e.appendChild(s),p.insertBefore(e,n),d.focus()}else r.isWysiwygDiv(s)||r.isComponent(s)||r.isTable(s)&&!r.isCell(s)?u._applyTagEffects():(t.preventDefault(),d._setDefaultFormat(r.isRangeFormatElement(p)?"DIV":l.defaultTag),d.focus())}d._isBalloon&&a.setTimeout(u._toggleToolbarBalloon)},_balloonDelay:null,_showToolbarBalloonDelay:function(){u._balloonDelay&&a.clearTimeout(u._balloonDelay),u._balloonDelay=a.setTimeout(function(){a.clearTimeout(this._balloonDelay),this._balloonDelay=null,this._showToolbarBalloon()}.bind(u),350)},_toggleToolbarBalloon:function(){d._editorRange();const e=d.getRange();d._bindControllersOff||!d._isBalloonAlways&&e.collapsed?u._hideToolbar():u._showToolbarBalloon(e)},_showToolbarBalloon:function(t){if(!d._isBalloon)return;const n=t||d.getRange(),i=e.element.toolbar,o=e.element.topArea,s=d.getSelection();let c;if(d._isBalloonAlways&&n.collapsed)c=!0;else if(s.focusNode===s.anchorNode)c=s.focusOffset<s.anchorOffset;else{const e=r.getListChildNodes(n.commonAncestorContainer,null);c=r.getArrayIndex(e,s.focusNode)<r.getArrayIndex(e,s.anchorNode)}let h=n.getClientRects();h=h[c?0:h.length-1];const p=d.getGlobalScrollOffset();let g=p.left,m=p.top;const f=o.offsetWidth,_=u._getEditorOffsets(null),b=_.top,v=_.left;if(i.style.top="-10000px",i.style.visibility="hidden",i.style.display="block",!h){const t=d.getSelectionNode();if(r.isFormatElement(t)){const e=r.createTextNode(r.zeroWidthSpace);d.insertNode(e,null,!1),d.setRange(e,1,e,1),d._editorRange(),h=d.getRange().getClientRects(),h=h[c?0:h.length-1]}if(!h){const n=r.getOffset(t,e.element.wysiwygFrame);h={left:n.left,top:n.top,right:n.left,bottom:n.top+t.offsetHeight,noText:!0},g=0,m=0}c=!0}const y=a.Math.round(e.element._arrow.offsetWidth/2),C=i.offsetWidth,w=i.offsetHeight,x=/iframe/i.test(e.element.wysiwygFrame.nodeName)?e.element.wysiwygFrame.getClientRects()[0]:null;if(x&&(h={left:h.left+x.left,top:h.top+x.top,right:h.right+x.right-x.width,bottom:h.bottom+x.bottom-x.height}),u._setToolbarOffset(c,h,i,v,f,g,m,b,y),C===i.offsetWidth&&w===i.offsetHeight||u._setToolbarOffset(c,h,i,v,f,g,m,b,y),l.toolbarContainer){const e=o.parentElement;let t=l.toolbarContainer,n=t.offsetLeft,s=t.offsetTop;for(;!t.parentElement.contains(e)||!/^(BODY|HTML)$/i.test(t.parentElement.nodeName);)t=t.offsetParent,n+=t.offsetLeft,s+=t.offsetTop;i.style.left=i.offsetLeft-n+o.offsetLeft+"px",i.style.top=i.offsetTop-s+o.offsetTop+"px"}i.style.visibility=""},_setToolbarOffset:function(t,n,i,l,o,c,d,h,p){const g=i.offsetWidth,m=n.noText&&!t?0:i.offsetHeight,f=(t?n.left:n.right)-l-g/2+c,_=f+g-o;let b=(t?n.top-m-p:n.bottom+p)-(n.noText?0:h)+d,v=f<0?1:_<0?f:f-_-1-1,y=!1;const C=b+(t?u._getEditorOffsets(null).top:i.offsetHeight-e.element.wysiwyg.offsetHeight);!t&&C>0&&u._getPageBottomSpace()<C?(t=!0,y=!0):t&&s.documentElement.offsetTop>C&&(t=!1,y=!0),y&&(b=(t?n.top-m-p:n.bottom+p)-(n.noText?0:h)+d),i.style.left=a.Math.floor(v)+"px",i.style.top=a.Math.floor(b)+"px",t?(r.removeClass(e.element._arrow,"se-arrow-up"),r.addClass(e.element._arrow,"se-arrow-down"),e.element._arrow.style.top=m+"px"):(r.removeClass(e.element._arrow,"se-arrow-down"),r.addClass(e.element._arrow,"se-arrow-up"),e.element._arrow.style.top=-p+"px");const w=a.Math.floor(g/2+(f-v));e.element._arrow.style.left=(w+p>i.offsetWidth?i.offsetWidth-p:w<p?p:w)+"px"},_showToolbarInline:function(){if(!d._isInline)return;const t=e.element.toolbar;l.toolbarContainer?t.style.position="relative":t.style.position="absolute",t.style.visibility="hidden",t.style.display="block",d._inlineToolbarAttr.width=t.style.width=l.toolbarWidth,d._inlineToolbarAttr.top=t.style.top=(l.toolbarContainer?0:-1-t.offsetHeight)+"px","function"==typeof h.showInline&&h.showInline(t,e,d),u.onScroll_window(),d._inlineToolbarAttr.isShow=!0,t.style.visibility=""},_hideToolbar:function(){d._notHideToolbar||d._variable.isFullScreen||(e.element.toolbar.style.display="none",d._inlineToolbarAttr.isShow=!1)},onInput_wysiwyg:function(e){if(d._editorRange(),"function"==typeof h.onInput&&!1===h.onInput(e,d))return;const t=(null===e.data?"":void 0===e.data?" ":e.data)||"";d._charCount(t)||(e.preventDefault(),e.stopPropagation()),d.history.push(!0)},_isUneditableNode:function(e,t){const n=t?e.startContainer:e.endContainer,i=t?e.startOffset:e.endOffset,l=t?"previousSibling":"nextSibling";let o;return 1===n.nodeType?(o=u._isUneditableNode_getSibling(n.childNodes[i],l,n),o&&1===o.nodeType&&"false"===o.getAttribute("contenteditable")):(o=u._isUneditableNode_getSibling(n,l,n),d.isEdgePoint(n,i,t?"front":"end")&&o&&1===o.nodeType&&"false"===o.getAttribute("contenteditable"))},_isUneditableNode_getSibling:function(e,t,n){if(!e)return null;let i=e[t];if(!i){if(i=r.getFormatElement(n),i=i?i[t]:null,!i||r.isComponent(i))return null;i="previousSibling"===t?i.firstElementChild:i.lastElementChild}return i},_onShortcutKey:!1,onKeyDown_wysiwyg:function(t){const n=t.keyCode,i=t.shiftKey,o=t.ctrlKey||t.metaKey||91===n||92===n||224===n,s=t.altKey;if(u._IEisComposing=229===n,d.submenuOff(),d._isBalloon&&u._hideToolbar(),"function"==typeof h.onKeyDown&&!1===h.onKeyDown(t,d))return;if(o&&u._shortcutCommand(n,i))return u._onShortcutKey=!0,t.preventDefault(),t.stopPropagation(),!1;u._onShortcutKey&&(u._onShortcutKey=!1);let c=d.getSelectionNode();const p=d.getRange(),g=!p.collapsed||p.startContainer!==p.endContainer,m=d._fileManager.pluginRegExp.test(d.currentControllerName)?d.currentControllerName:"";let f=r.getFormatElement(c,null)||c,_=r.getRangeFormatElement(f,null);switch(n){case 8:if(!g&&m){t.preventDefault(),t.stopPropagation(),d.plugins[m].destroy.call(d);break}if(g&&u._hardDelete()){t.preventDefault(),t.stopPropagation();break}if(!r.isFormatElement(f)&&!e.element.wysiwyg.firstElementChild&&!r.isComponent(c))return t.preventDefault(),t.stopPropagation(),d._setDefaultFormat(l.defaultTag),!1;if(!g&&!f.previousElementSibling&&0===p.startOffset&&!c.previousSibling&&!r.isListCell(f)&&r.isFormatElement(f)&&(!r.isFreeFormatElement(f)||r.isClosureFreeFormatElement(f))){if(r.isClosureRangeFormatElement(f.parentNode))return t.preventDefault(),t.stopPropagation(),!1;if(r.isWysiwygDiv(f.parentNode)&&f.childNodes.length<=1&&(!f.firstChild||r.onlyZeroWidthSpace(f.textContent))){if(t.preventDefault(),t.stopPropagation(),f.nodeName.toUpperCase()===l.defaultTag.toUpperCase()){f.innerHTML="<br>";const e=f.attributes;for(;e[0];)f.removeAttribute(e[0].name)}else{const e=r.createElement(l.defaultTag);e.innerHTML="<br>",f.parentElement.replaceChild(e,f)}return d.nativeFocus(),!1}}if(f&&p.startContainer===p.endContainer&&3===c.nodeType&&!r.isFormatElement(c.parentNode)&&(p.collapsed?1===c.textContent.length:p.endOffset-p.startOffset===c.textContent.length)){t.preventDefault();let e=null,n=c.parentNode.previousSibling;const i=c.parentNode.nextSibling;n||(i?(n=i,e=0):(n=r.createElement("BR"),f.appendChild(n))),c.textContent="",r.removeItemAllParents(c,null,f),e="number"==typeof e?e:3===n.nodeType?n.textContent.length:1,d.setRange(n,e,n,e);break}if(u._isUneditableNode(p,!0)){t.preventDefault(),t.stopPropagation();break}const n=p.commonAncestorContainer;if(f=r.getFormatElement(p.startContainer,null),_=r.getRangeFormatElement(f,null),_&&f&&!r.isCell(_)&&!/^FIGCAPTION$/i.test(_.nodeName)){if(r.isListCell(f)&&r.isList(_)&&(r.isListCell(_.parentNode)||f.previousElementSibling)&&(c===f||3===c.nodeType&&(!c.previousSibling||r.isList(c.previousSibling)))&&(r.getFormatElement(p.startContainer,null)!==r.getFormatElement(p.endContainer,null)?_.contains(p.startContainer):0===p.startOffset&&p.collapsed)){if(p.startContainer!==p.endContainer)t.preventDefault(),d.removeNode(),3===p.startContainer.nodeType&&d.setRange(p.startContainer,p.startContainer.textContent.length,p.startContainer,p.startContainer.textContent.length),d.history.push(!0);else{let e=f.previousElementSibling||_.parentNode;if(r.isListCell(e)){t.preventDefault();let n=e;if(!e.contains(f)&&r.isListCell(n)&&r.isList(n.lastElementChild)){for(n=n.lastElementChild.lastElementChild;r.isListCell(n)&&r.isList(n.lastElementChild);)n=n.lastElementChild&&n.lastElementChild.lastElementChild;e=n}let i=e===_.parentNode?_.previousSibling:e.lastChild;i||(i=r.createTextNode(r.zeroWidthSpace),_.parentNode.insertBefore(i,_.parentNode.firstChild));const l=3===i.nodeType?i.textContent.length:1,o=f.childNodes;let s=i,a=o[0];for(;a=o[0];)e.insertBefore(a,s.nextSibling),s=a;r.removeItem(f),0===_.children.length&&r.removeItem(_),d.setRange(i,l,i,l),d.history.push(!0)}}break}if(!g&&0===p.startOffset){let e=!0,i=n;for(;i&&i!==_&&!r.isWysiwygDiv(i);){if(i.previousSibling&&(1===i.previousSibling.nodeType||!r.onlyZeroWidthSpace(i.previousSibling.textContent.trim()))){e=!1;break}i=i.parentNode}if(e&&_.parentNode){t.preventDefault(),d.detachRangeFormatElement(_,r.isListCell(f)?[f]:null,null,!1,!1),d.history.push(!0);break}}}if(!g&&f&&(0===p.startOffset||c===f&&f.childNodes[p.startOffset])){const e=c===f?f.childNodes[p.startOffset]:c,i=f.previousSibling,l=(3===n.nodeType||r.isBreak(n))&&!n.previousSibling&&0===p.startOffset;if(!e.previousSibling&&(r.isComponent(n.previousSibling)||l&&r.isComponent(i))){const e=d.getFileComponent(i);e?(t.preventDefault(),t.stopPropagation(),0===f.textContent.length&&r.removeItem(f),!1===d.selectComponent(e.target,e.pluginName)&&d.blur()):r.isComponent(i)&&(t.preventDefault(),t.stopPropagation(),r.removeItem(i));break}if(r.isNonEditable(e.previousSibling)){t.preventDefault(),t.stopPropagation(),r.removeItem(e.previousSibling);break}}break;case 46:if(m){t.preventDefault(),t.stopPropagation(),d.plugins[m].destroy.call(d);break}if(g&&u._hardDelete()){t.preventDefault(),t.stopPropagation();break}if(u._isUneditableNode(p,!1)){t.preventDefault(),t.stopPropagation();break}if((r.isFormatElement(c)||null===c.nextSibling||r.onlyZeroWidthSpace(c.nextSibling)&&null===c.nextSibling.nextSibling)&&p.startOffset===c.textContent.length){let e=f.nextElementSibling;if(!e){t.preventDefault();break}if(r.isComponent(e)){if(t.preventDefault(),r.onlyZeroWidthSpace(f)&&(r.removeItem(f),r.isTable(e))){let t=r.getChildElement(e,r.isCell,!1);t=t.firstElementChild||t,d.setRange(t,0,t,0);break}const n=d.getFileComponent(e);n?(t.stopPropagation(),!1===d.selectComponent(n.target,n.pluginName)&&d.blur()):r.isComponent(e)&&(t.stopPropagation(),r.removeItem(e));break}}if(!g&&(d.isEdgePoint(p.endContainer,p.endOffset)||c===f&&f.childNodes[p.startOffset])){const e=c===f?f.childNodes[p.startOffset]:c;if(r.isNonEditable(e.nextSibling)){t.preventDefault(),t.stopPropagation(),r.removeItem(e.nextSibling);break}}if(f=r.getFormatElement(p.startContainer,null),_=r.getRangeFormatElement(f,null),r.isListCell(f)&&r.isList(_)&&(c===f||3===c.nodeType&&(!c.nextSibling||r.isList(c.nextSibling))&&(r.getFormatElement(p.startContainer,null)!==r.getFormatElement(p.endContainer,null)?_.contains(p.endContainer):p.endOffset===c.textContent.length&&p.collapsed))){p.startContainer!==p.endContainer&&d.removeNode();let e=r.getArrayItem(f.children,r.isList,!1);if(e=e||f.nextElementSibling||_.parentNode.nextElementSibling,e&&(r.isList(e)||r.getArrayItem(e.children,r.isList,!1))){let n,i;if(t.preventDefault(),r.isList(e)){const t=e.firstElementChild;for(i=t.childNodes,n=i[0];i[0];)f.insertBefore(i[0],e);r.removeItem(t)}else{for(n=e.firstChild,i=e.childNodes;i[0];)f.appendChild(i[0]);r.removeItem(e)}d.setRange(n,0,n,0),d.history.push(!0)}break}break;case 9:if(m||l.tabDisable)break;if(t.preventDefault(),o||s||r.isWysiwygDiv(c))break;const b=!p.collapsed||d.isEdgePoint(p.startContainer,p.startOffset),v=d.getSelectedElements(null);c=d.getSelectionNode();const y=[];let C=[],w=r.isListCell(v[0]),x=r.isListCell(v[v.length-1]),E={sc:p.startContainer,so:p.startOffset,ec:p.endContainer,eo:p.endOffset};for(let e,t=0,n=v.length;t<n;t++)if(e=v[t],r.isListCell(e)){if(!e.previousElementSibling&&!i)continue;y.push(e)}else C.push(e);if(y.length>0&&b&&d.plugins.list)E=d.plugins.list.editInsideList.call(d,i,y);else{const e=r.getParentElement(c,r.isCell);if(e&&b){const t=r.getParentElement(e,"table"),n=r.getListChildren(t,r.isCell);let l=i?r.prevIdx(n,e):r.nextIdx(n,e);l!==n.length||i||(l=0),-1===l&&i&&(l=n.length-1);let o=n[l];if(!o)break;o=o.firstElementChild||o,d.setRange(o,0,o,0);break}C=C.concat(y),w=x=null}if(C.length>0)if(i){const e=C.length-1;for(let t,n=0;n<=e;n++){t=C[n].childNodes;for(let e,n=0,i=t.length;n<i&&(e=t[n],e);n++)if(!r.onlyZeroWidthSpace(e)){/^\s{1,4}$/.test(e.textContent)?r.removeItem(e):/^\s{1,4}/.test(e.textContent)&&(e.textContent=e.textContent.replace(/^\s{1,4}/,""));break}}const t=r.getChildElement(C[0],"text",!1),n=r.getChildElement(C[e],"text",!0);!w&&t&&(E.sc=t,E.so=0),!x&&n&&(E.ec=n,E.eo=n.textContent.length)}else{const e=r.createTextNode(new a.Array(d._variable.tabSize+1).join(" "));if(1===C.length){const t=d.insertNode(e,null,!0);if(!t)return!1;w||(E.sc=e,E.so=t.endOffset),x||(E.ec=e,E.eo=t.endOffset)}else{const t=C.length-1;for(let n,i=0;i<=t;i++)n=C[i].firstChild,n&&(r.isBreak(n)?C[i].insertBefore(e.cloneNode(!1),n):n.textContent=e.textContent+n.textContent);const n=r.getChildElement(C[0],"text",!1),i=r.getChildElement(C[t],"text",!0);!w&&n&&(E.sc=n,E.so=0),!x&&i&&(E.ec=i,E.eo=i.textContent.length)}}d.setRange(E.sc,E.so,E.ec,E.eo),d.history.push(!1);break;case 13:const S=r.getFreeFormatElement(c,null);if(d._charTypeHTML){let e="";if(e=!i&&S||i?"<br>":"<"+f.nodeName+"><br></"+f.nodeName+">",!d.checkCharCount(e,"byte-html"))return t.preventDefault(),!1}if(!i){const e=d._isEdgeFormat(p.endContainer,p.endOffset,"end");if(e&&/^H[1-6]$/i.test(f.nodeName)||/^HR$/i.test(f.nodeName)){t.preventDefault();let n=null;const i=d.appendFormatTag(f,l.defaultTag);if(e&&e.length>0){n=e.pop();const t=n;for(;e.length>0;)n=n.appendChild(e.pop());i.appendChild(t)}n=n?n.appendChild(i.firstChild):i.firstChild,d.setRange(n,0,n,0);break}if(S){t.preventDefault();const e=c===S,n=d.getSelection(),i=c.childNodes,l=n.focusOffset,o=c.previousElementSibling,s=c.nextSibling;if(!r.isClosureFreeFormatElement(S)&&i&&(e&&p.collapsed&&i.length-1<=l+1&&r.isBreak(i[l])&&(!i[l+1]||(!i[l+2]||r.onlyZeroWidthSpace(i[l+2].textContent))&&3===i[l+1].nodeType&&r.onlyZeroWidthSpace(i[l+1].textContent))&&l>0&&r.isBreak(i[l-1])||!e&&r.onlyZeroWidthSpace(c.textContent)&&r.isBreak(o)&&(r.isBreak(o.previousSibling)||!r.onlyZeroWidthSpace(o.previousSibling.textContent))&&(!s||!r.isBreak(s)&&r.onlyZeroWidthSpace(s.textContent)))){e?r.removeItem(i[l-1]):r.removeItem(c);const t=d.appendFormatTag(S,r.isFormatElement(S.nextElementSibling)?S.nextElementSibling:null);r.copyFormatAttributes(t,S),d.setRange(t,1,t,1);break}if(e){h.insertHTML(p.collapsed&&r.isBreak(p.startContainer.childNodes[p.startOffset-1])?"<br>":"<br><br>",!0,!1);let e=n.focusNode;const t=n.focusOffset;S===e&&(e=e.childNodes[t-l>1?t-1:t]),d.setRange(e,1,e,1)}else{const e=n.focusNode.nextSibling,t=r.createElement("BR");d.insertNode(t,null,!1);const i=t.previousSibling,l=t.nextSibling;r.isBreak(e)||r.isBreak(i)||l&&!r.onlyZeroWidthSpace(l)?d.setRange(l,0,l,0):(t.parentNode.insertBefore(t.cloneNode(!1),t),d.setRange(t,1,t,1))}u._onShortcutKey=!0;break}}if(g)break;if(_&&f&&!r.isCell(_)&&!/^FIGCAPTION$/i.test(_.nodeName)){const e=d.getRange();if(d.isEdgePoint(e.endContainer,e.endOffset)&&r.isList(c.nextSibling)){t.preventDefault();const e=r.createElement("LI"),n=r.createElement("BR");e.appendChild(n),f.parentNode.insertBefore(e,f.nextElementSibling),e.appendChild(c.nextSibling),d.setRange(n,1,n,1);break}if((3!==e.commonAncestorContainer.nodeType||!e.commonAncestorContainer.nextElementSibling)&&r.onlyZeroWidthSpace(f.innerText.trim())){t.preventDefault();let e=null;if(r.isListCell(_.parentNode)){if(_=f.parentNode.parentNode.parentNode,e=r.splitElement(f,null,r.getElementDepth(f)-2),!e){const t=r.createElement("LI");t.innerHTML="<br>",_.insertBefore(t,e),e=t}}else{const t=r.isCell(_.parentNode)?"DIV":r.isList(_.parentNode)?"LI":r.isFormatElement(_.nextElementSibling)?_.nextElementSibling.nodeName:r.isFormatElement(_.previousElementSibling)?_.previousElementSibling.nodeName:l.defaultTag;e=r.createElement(t);const n=d.detachRangeFormatElement(_,[f],null,!0,!0);n.cc.insertBefore(e,n.ec)}e.innerHTML="<br>",r.copyFormatAttributes(e,f),r.removeItemAllParents(f,null,null),d.setRange(e,1,e,1);break}}if(_&&r.getParentElement(_,"FIGCAPTION")&&r.getParentElement(_,r.isList)&&(t.preventDefault(),f=d.appendFormatTag(f,null),d.setRange(f,0,f,0)),m){t.preventDefault(),t.stopPropagation();const n=e[m],i=n._container,o=i.previousElementSibling||i.nextElementSibling;let s=null;r.isListCell(i.parentNode)?s=r.createElement("BR"):(s=r.createElement(r.isFormatElement(o)?o.nodeName:l.defaultTag),s.innerHTML="<br>"),i.parentNode.insertBefore(s,i),d.callPlugin(m,(function(){!1===d.selectComponent(n._element,m)&&d.blur()}),null)}break;case 27:if(m)return t.preventDefault(),t.stopPropagation(),d.controllersOff(),!1}if(i&&16===n){t.preventDefault(),t.stopPropagation();const e=d.plugins.table;if(e&&!e._shift&&!e._ref){const t=r.getParentElement(f,r.isCell);if(t)return void e.onTableCellMultiSelect.call(d,t,!0)}}else if(i&&(r.isOSX_IOS?s:o)&&32===n){t.preventDefault(),t.stopPropagation();const e=d.insertNode(r.createTextNode(" "));if(e&&e.container)return void d.setRange(e.container,e.endOffset,e.container,e.endOffset)}if(!(o||s||g||u._nonTextKeyCode.test(n))&&p.collapsed&&p.startContainer===p.endContainer&&r.isBreak(p.commonAncestorContainer)){const e=r.createTextNode(r.zeroWidthSpace);d.insertNode(e,null,!1),d.setRange(e,1,e,1)}},onKeyUp_wysiwyg:function(e){if(u._onShortcutKey)return;d._editorRange();const t=d.getRange(),n=e.keyCode,i=e.ctrlKey||e.metaKey||91===n||92===n||224===n,o=e.altKey;let s=d.getSelectionNode();if(d._isBalloon&&(d._isBalloonAlways&&27!==n||!t.collapsed)){if(!d._isBalloonAlways)return void u._showToolbarBalloon();27!==n&&u._showToolbarBalloonDelay()}if("function"==typeof h.onKeyUp&&!1===h.onKeyUp(e,d))return;if(8===n&&r.isWysiwygDiv(s)&&""===s.textContent&&0===s.children.length){e.preventDefault(),e.stopPropagation(),s.innerHTML="";const t=r.createElement(r.isFormatElement(d._variable.currentNodes[0])?d._variable.currentNodes[0]:l.defaultTag);return t.innerHTML="<br>",s.appendChild(t),d.setRange(t,0,t,0),u._applyTagEffects(),void d.history.push(!1)}const a=r.getFormatElement(s,null),c=r.getRangeFormatElement(s,null);(a||!t.collapsed)&&a!==c||r.isComponent(s)||r.isList(s)||(d._setDefaultFormat(r.isRangeFormatElement(c)?"DIV":l.defaultTag),s=d.getSelectionNode()),u._directionKeyCode.test(n)&&u._applyTagEffects();if(!i&&!o&&!u._nonTextKeyCode.test(n)&&3===s.nodeType&&r.zeroWidthRegExp.test(s.textContent)&&!(void 0!==e.isComposing?e.isComposing:u._IEisComposing)){let e=t.startOffset,n=t.endOffset;const i=(s.textContent.substring(0,n).match(u._frontZeroWidthReg)||"").length;e=t.startOffset-i,n=t.endOffset-i,s.textContent=s.textContent.replace(r.zeroWidthRegExp,""),d.setRange(s,e<0?0:e,s,n<0?0:n)}d._charCount(""),d.history.push(!0)},onScroll_wysiwyg:function(e){d.controllersOff(),d._isBalloon&&u._hideToolbar(),"function"==typeof h.onScroll&&h.onScroll(e,d)},onFocus_wysiwyg:function(e){d._antiBlur||(d.hasFocus=!0,u._applyTagEffects(),d._isInline&&u._showToolbarInline(),"function"==typeof h.onFocus&&h.onFocus(e,d))},onBlur_wysiwyg:function(t){if(d._antiBlur||d._variable.isCodeView)return;d.hasFocus=!1,d.controllersOff(),(d._isInline||d._isBalloon)&&u._hideToolbar(),"function"==typeof h.onBlur&&h.onBlur(t,d);const i=d.commandMap,o=d.activePlugins;for(let e in i)r.hasOwn(i,e)&&(o.indexOf(e)>-1?n[e].active.call(d,null):i.OUTDENT&&/^OUTDENT$/i.test(e)?i.OUTDENT.setAttribute("disabled",!0):i.INDENT&&/^INDENT$/i.test(e)?i.INDENT.removeAttribute("disabled"):r.removeClass(i[e],"active"));d._variable.currentNodes=[],d._variable.currentNodesMap=[],l.showPathLabel&&(e.element.navigation.textContent="")},onMouseDown_resizingBar:function(t){t.stopPropagation(),d.submenuOff(),d.controllersOff();const n=r.getNumber(e.element.wysiwygFrame.style.height,0);d._variable.resizeClientY=t.clientY,e.element.resizeBackground.style.display="block",s.addEventListener("mousemove",u._resize_editor),s.addEventListener("mouseup",(function t(){e.element.resizeBackground.style.display="none",s.removeEventListener("mousemove",u._resize_editor),s.removeEventListener("mouseup",t),"function"==typeof h.onResizeEditor&&h.onResizeEditor(r.getNumber(e.element.wysiwygFrame.style.height,0),n,d)}))},_resize_editor:function(t){const n=e.element.editorArea.offsetHeight+(t.clientY-d._variable.resizeClientY);e.element.wysiwygFrame.style.height=e.element.code.style.height=(n<d._variable.minResizingSize?d._variable.minResizingSize:n)+"px",d._variable.resizeClientY=t.clientY},onResize_window:function(){d.controllersOff();const t=u._responsiveButtonSize;if(t){let n=0;n=(d._isBalloon||d._isInline)&&"auto"===l.toolbarWidth?e.element.topArea.offsetWidth:e.element.toolbar.offsetWidth;let i="default";for(let e=1,l=t.length;e<l;e++)if(n<t[e]){i=t[e]+"";break}u._responsiveCurrentSize!==i&&(u._responsiveCurrentSize=i,h.setToolbarButtons(u._responsiveButtons[i]))}if(0!==e.element.toolbar.offsetWidth){if(e.fileBrowser&&"block"===e.fileBrowser.area.style.display&&(e.fileBrowser.body.style.maxHeight=a.innerHeight-e.fileBrowser.header.offsetHeight-50+"px"),d.submenuActiveButton&&d.submenu&&d._setMenuPosition(d.submenuActiveButton,d.submenu),d._variable.isFullScreen)return d._variable.innerHeight_fullScreen+=a.innerHeight-e.element.toolbar.offsetHeight-d._variable.innerHeight_fullScreen,void(e.element.editorArea.style.height=d._variable.innerHeight_fullScreen+"px");d._variable.isCodeView&&d._isInline?u._showToolbarInline():(d._iframeAutoHeight(),d._sticky&&(e.element.toolbar.style.width=e.element.topArea.offsetWidth-2+"px",u.onScroll_window()))}},onScroll_window:function(){if(d._variable.isFullScreen||0===e.element.toolbar.offsetWidth||l.stickyToolbar<0)return;const t=e.element,n=t.editorArea.offsetHeight,i=(this.scrollY||s.documentElement.scrollTop)+l.stickyToolbar,o=u._getEditorOffsets(l.toolbarContainer).top-(d._isInline?t.toolbar.offsetHeight:0);i<o?u._offStickyToolbar():i+d._variable.minResizingSize>=n+o?(d._sticky||u._onStickyToolbar(),t.toolbar.style.top=n+o+l.stickyToolbar-i-d._variable.minResizingSize+"px"):i>=o&&u._onStickyToolbar()},_getEditorOffsets:function(t){let n=t||e.element.topArea,i=0,l=0,o=0;for(;n;)i+=n.offsetTop,l+=n.offsetLeft,o+=n.scrollTop,n=n.offsetParent;return{top:i,left:l,scroll:o}},_getPageBottomSpace:function(){return s.documentElement.scrollHeight-(u._getEditorOffsets(null).top+e.element.topArea.offsetHeight)},_onStickyToolbar:function(){const t=e.element;d._isInline||l.toolbarContainer||(t._stickyDummy.style.height=t.toolbar.offsetHeight+"px",t._stickyDummy.style.display="block"),t.toolbar.style.top=l.stickyToolbar+"px",t.toolbar.style.width=d._isInline?d._inlineToolbarAttr.width:t.toolbar.offsetWidth+"px",r.addClass(t.toolbar,"se-toolbar-sticky"),d._sticky=!0},_offStickyToolbar:function(){const t=e.element;t._stickyDummy.style.display="none",t.toolbar.style.top=d._isInline?d._inlineToolbarAttr.top:"",t.toolbar.style.width=d._isInline?d._inlineToolbarAttr.width:"",t.editorArea.style.marginTop="",r.removeClass(t.toolbar,"se-toolbar-sticky"),d._sticky=!1},_codeViewAutoHeight:function(){e.element.code.style.height=e.element.code.scrollHeight+"px"},_hardDelete:function(){const e=d.getRange(),t=e.startContainer,n=e.endContainer,i=r.getRangeFormatElement(t),l=r.getRangeFormatElement(n),o=r.isCell(i),s=r.isCell(l);if((o&&!i.previousElementSibling&&!i.parentElement.previousElementSibling||s&&!l.nextElementSibling&&!l.parentElement.nextElementSibling)&&i!==l)if(o){if(s)return r.removeItem(r.getParentElement(i,r.isComponent)),d.nativeFocus(),!0;r.removeItem(r.getParentElement(i,r.isComponent))}else r.removeItem(r.getParentElement(l,r.isComponent));const a=1===t.nodeType?r.getParentElement(t,".se-component"):null,c=1===n.nodeType?r.getParentElement(n,".se-component"):null;return a&&r.removeItem(a),c&&r.removeItem(c),!1},onPaste_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;return!t||u._dataTransferAction("paste",e,t)},_setClipboardComponent:function(e,t,n){e.preventDefault(),e.stopPropagation(),n.setData("text/html",t.component.outerHTML)},onCopy_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;if("function"==typeof h.onCopy&&!h.onCopy(e,t,d))return e.preventDefault(),e.stopPropagation(),!1;const n=d.currentFileComponentInfo;n&&!r.isIE&&(u._setClipboardComponent(e,n,t),r.addClass(n.component,"se-component-copy"),a.setTimeout((function(){r.removeClass(n.component,"se-component-copy")}),150))},onCut_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;if("function"==typeof h.onCut&&!h.onCut(e,t,d))return e.preventDefault(),e.stopPropagation(),!1;const n=d.currentFileComponentInfo;n&&!r.isIE&&(u._setClipboardComponent(e,n,t),r.removeItem(n.component),d.controllersOff()),a.setTimeout((function(){d.history.push(!1)}))},onDrop_wysiwyg:function(e){const t=e.dataTransfer;return!t||(r.isIE?(e.preventDefault(),e.stopPropagation(),!1):(d.removeNode(),u._setDropLocationSelection(e),u._dataTransferAction("drop",e,t)))},_setDropLocationSelection:function(e){if(e.rangeParent)d.setRange(e.rangeParent,e.rangeOffset,e.rangeParent,e.rangeOffset);else if(d._wd.caretRangeFromPoint){const t=d._wd.caretRangeFromPoint(e.clientX,e.clientY);d.setRange(t.startContainer,t.startOffset,t.endContainer,t.endOffset)}else{const e=d.getRange();d.setRange(e.startContainer,e.startOffset,e.endContainer,e.endOffset)}},_dataTransferAction:function(t,n,i){let l,o;if(r.isIE){l=i.getData("Text");const s=d.getRange(),c=r.createElement("DIV"),h={sc:s.startContainer,so:s.startOffset,ec:s.endContainer,eo:s.endOffset};return c.setAttribute("contenteditable",!0),c.style.cssText="position:absolute; top:0; left:0; width:1px; height:1px; overflow:hidden;",e.element.relative.appendChild(c),c.focus(),a.setTimeout((function(){o=c.innerHTML,r.removeItem(c),d.setRange(h.sc,h.so,h.ec,h.eo),u._setClipboardData(t,n,l,o,i)})),!0}if(l=i.getData("text/plain"),o=i.getData("text/html"),!1===u._setClipboardData(t,n,l,o,i))return n.preventDefault(),n.stopPropagation(),!1},_setClipboardData:function(e,t,n,i,l){const o=/class=["']*Mso(Normal|List)/i.test(i)||/content=["']*Word.Document/i.test(i)||/content=["']*OneNote.File/i.test(i)||/content=["']*Excel.Sheet/i.test(i);!i?i=r._HTMLConvertor(n).replace(/\n/g,"<br>"):(o?(i=i.replace(/\n/g," "),n=n.replace(/\n/g," ")):i=(n===i?n:i).replace(/\n/g,"<br>"),i=d.cleanHTML(i,d.pasteTagsWhitelistRegExp));const s=d._charCount(d._charTypeHTML?i:n);if("paste"===e&&"function"==typeof h.onPaste){const e=h.onPaste(t,i,s,d);if(!e)return!1;"string"==typeof e&&(i=e)}if("drop"===e&&"function"==typeof h.onDrop){const e=h.onDrop(t,i,s,d);if(!e)return!1;"string"==typeof e&&(i=e)}const a=l.files;return a.length>0&&!o?(/^image/.test(a[0].type)&&d.plugins.image&&h.insertImage(a),!1):!!s&&(i?(h.insertHTML(i,!0,!1),!1):void 0)},onMouseMove_wysiwyg:function(t){if(d.isDisabled)return;const n=r.getParentElement(t.target,r.isComponent),i=d._lineBreaker.style;if(n&&!d.currentControllerName){const o=e.element;let s=0,a=o.wysiwyg;do{s+=a.scrollTop,a=a.parentElement}while(a&&!/^(BODY|HTML)$/i.test(a.nodeName));const c=o.wysiwyg.scrollTop,h=u._getEditorOffsets(null),p=r.getOffset(n,o.wysiwygFrame).top+c,g=t.pageY+s+(l.iframe&&!l.toolbarContainer?o.toolbar.offsetHeight:0),m=p+(l.iframe?s:h.top),f=r.isListCell(n.parentNode);let _="",b="";if((f?!n.previousSibling:!r.isFormatElement(n.previousElementSibling))&&g<m+20)b=p,_="t";else{if((f?n.nextSibling:r.isFormatElement(n.nextElementSibling))||!(g>m+n.offsetHeight-20))return void(i.display="none");b=p+n.offsetHeight,_="b"}d._variable._lineBreakComp=n,d._variable._lineBreakDir=_,i.top=b-c+"px",d._lineBreakerButton.style.left=r.getOffset(n).left+n.offsetWidth/2-15+"px",i.display="block"}else"none"!==i.display&&(i.display="none")},_onMouseDown_lineBreak:function(e){e.preventDefault()},_onLineBreak:function(e){e.preventDefault();const t=d._variable._lineBreakComp,n=this?this:d._variable._lineBreakDir,i=r.isListCell(t.parentNode),o=r.createElement(i?"BR":r.isCell(t.parentNode)?"DIV":l.defaultTag);if(i||(o.innerHTML="<br>"),d._charTypeHTML&&!d.checkCharCount(o.outerHTML,"byte-html"))return;t.parentNode.insertBefore(o,"t"===n?t:t.nextSibling),d._lineBreaker.style.display="none",d._variable._lineBreakComp=null;const s=i?o:o.firstChild;d.setRange(s,1,s,1),d.history.push(!1)},_addEvent:function(){const t=l.iframe?d._ww:e.element.wysiwyg;e.element.toolbar.addEventListener("mousedown",u._buttonsEventHandler,!1),e.element._menuTray.addEventListener("mousedown",u._buttonsEventHandler,!1),e.element.toolbar.addEventListener("click",u.onClick_toolbar,!1),t.addEventListener("mousedown",u.onMouseDown_wysiwyg,!1),t.addEventListener("click",u.onClick_wysiwyg,!1),t.addEventListener(r.isIE?"textinput":"input",u.onInput_wysiwyg,!1),t.addEventListener("keydown",u.onKeyDown_wysiwyg,!1),t.addEventListener("keyup",u.onKeyUp_wysiwyg,!1),t.addEventListener("paste",u.onPaste_wysiwyg,!1),t.addEventListener("copy",u.onCopy_wysiwyg,!1),t.addEventListener("cut",u.onCut_wysiwyg,!1),t.addEventListener("drop",u.onDrop_wysiwyg,!1),t.addEventListener("scroll",u.onScroll_wysiwyg,!1),t.addEventListener("focus",u.onFocus_wysiwyg,!1),t.addEventListener("blur",u.onBlur_wysiwyg,!1),u._lineBreakerBind={a:u._onLineBreak.bind(""),t:u._onLineBreak.bind("t"),b:u._onLineBreak.bind("b")},t.addEventListener("mousemove",u.onMouseMove_wysiwyg,!1),d._lineBreakerButton.addEventListener("mousedown",u._onMouseDown_lineBreak,!1),d._lineBreakerButton.addEventListener("click",u._lineBreakerBind.a,!1),e.element.lineBreaker_t.addEventListener("mousedown",u._lineBreakerBind.t,!1),e.element.lineBreaker_b.addEventListener("mousedown",u._lineBreakerBind.b,!1),d.plugins.table&&t.addEventListener("touchstart",u.onMouseDown_wysiwyg,{passive:!0,useCapture:!1}),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.addEventListener("keydown",u._codeViewAutoHeight,!1),e.element.code.addEventListener("keyup",u._codeViewAutoHeight,!1),e.element.code.addEventListener("paste",u._codeViewAutoHeight,!1)),e.element.resizingBar&&(/\d+/.test(l.height)?e.element.resizingBar.addEventListener("mousedown",u.onMouseDown_resizingBar,!1):r.addClass(e.element.resizingBar,"se-resizing-none")),u._setResponsiveToolbar(),a.removeEventListener("resize",u.onResize_window),a.removeEventListener("scroll",u.onScroll_window),a.addEventListener("resize",u.onResize_window,!1),l.stickyToolbar>-1&&a.addEventListener("scroll",u.onScroll_window,!1)},_removeEvent:function(){const t=l.iframe?d._ww:e.element.wysiwyg;e.element.toolbar.removeEventListener("mousedown",u._buttonsEventHandler),e.element._menuTray.removeEventListener("mousedown",u._buttonsEventHandler),e.element.toolbar.removeEventListener("click",u.onClick_toolbar),t.removeEventListener("mousedown",u.onMouseDown_wysiwyg),t.removeEventListener("click",u.onClick_wysiwyg),t.removeEventListener(r.isIE?"textinput":"input",u.onInput_wysiwyg),t.removeEventListener("keydown",u.onKeyDown_wysiwyg),t.removeEventListener("keyup",u.onKeyUp_wysiwyg),t.removeEventListener("paste",u.onPaste_wysiwyg),t.removeEventListener("copy",u.onCopy_wysiwyg),t.removeEventListener("cut",u.onCut_wysiwyg),t.removeEventListener("drop",u.onDrop_wysiwyg),t.removeEventListener("scroll",u.onScroll_wysiwyg),t.removeEventListener("mousemove",u.onMouseMove_wysiwyg),d._lineBreakerButton.removeEventListener("mousedown",u._onMouseDown_lineBreak),d._lineBreakerButton.removeEventListener("click",u._lineBreakerBind.a),e.element.lineBreaker_t.removeEventListener("mousedown",u._lineBreakerBind.t),e.element.lineBreaker_b.removeEventListener("mousedown",u._lineBreakerBind.b),u._lineBreakerBind=null,t.removeEventListener("touchstart",u.onMouseDown_wysiwyg,{passive:!0,useCapture:!1}),t.removeEventListener("focus",u.onFocus_wysiwyg),t.removeEventListener("blur",u.onBlur_wysiwyg),e.element.code.removeEventListener("keydown",u._codeViewAutoHeight),e.element.code.removeEventListener("keyup",u._codeViewAutoHeight),e.element.code.removeEventListener("paste",u._codeViewAutoHeight),e.element.resizingBar&&e.element.resizingBar.removeEventListener("mousedown",u.onMouseDown_resizingBar),a.removeEventListener("resize",u.onResize_window),a.removeEventListener("scroll",u.onScroll_window)},_setResponsiveToolbar:function(){if(0===o.length)return void(o=null);u._responsiveCurrentSize="default";const e=u._responsiveButtonSize=[],t=u._responsiveButtons={default:o[0]};for(let n,i,l=1,s=o.length;l<s;l++)i=o[l],n=1*i[0],e.push(n),t[n]=i[1];e.sort((function(e,t){return e-t})).unshift("default")}},h={core:d,util:r,onload:null,onScroll:null,onMouseDown:null,onClick:null,onInput:null,onKeyDown:null,onKeyUp:null,onCopy:null,onCut:null,onFocus:null,onBlur:null,onChange:null,onDrop:null,onPaste:null,showInline:null,showController:null,toggleCodeView:null,toggleFullScreen:null,imageUploadHandler:null,videoUploadHandler:null,audioUploadHandler:null,onImageUploadBefore:null,onVideoUploadBefore:null,onAudioUploadBefore:null,onImageUpload:null,onVideoUpload:null,onAudioUpload:null,onImageUploadError:null,onVideoUploadError:null,onAudioUploadError:null,onResizeEditor:null,setToolbarButtons:function(i){d.submenuOff(),d.containerOff();const a=B._createToolBar(s,i,d.plugins,l);o=a.responsiveButtons,d._moreLayerActiveButton=null,u._setResponsiveToolbar(),e.element.toolbar.replaceChild(a._buttonTray,e.element._buttonTray);const c=A(e.element.originElement,d._getConstructed(e.element),l);e.element=c.element,e.tool=c.tool,l.iframe&&(e.element.wysiwyg=d._wd.body),d._cachingButtons(),d.history._resetCachingButton(),d.activePlugins=[];const h=t;let p,g,m;t=a.pluginCallButtons;for(let e in t)r.hasOwn(t,e)&&(p=n[e],g=t[e],p.active&&g&&(m=h[e],d.callPlugin(e,null,m||g),m&&(g.parentElement.replaceChild(m,g),t[e]=m)));d.hasFocus&&u._applyTagEffects(),d._variable.isCodeView&&r.addClass(d._styleCommandMap.codeView,"active"),d._variable.isFullScreen&&r.addClass(d._styleCommandMap.fullScreen,"active"),r.hasClass(e.element.wysiwyg,"se-show-block")&&r.addClass(d._styleCommandMap.showBlocks,"active")},setOptions:function(s){u._removeEvent(),d._resetComponents(),r.removeClass(d._styleCommandMap.showBlocks,"active"),r.removeClass(d._styleCommandMap.codeView,"active"),d._variable.isCodeView=!1,d._iframeAuto=null,d.plugins=s.plugins||d.plugins;const c=[l,s].reduce((function(e,t){for(let n in t)if(r.hasOwn(t,n))if("plugins"===n&&t[n]&&e[n]){let i=e[n],l=t[n];i=i.length?i:a.Object.keys(i).map((function(e){return i[e]})),l=l.length?l:a.Object.keys(l).map((function(e){return l[e]})),e[n]=l.filter((function(e){return-1===i.indexOf(e)})).concat(i)}else e[n]=t[n];return e}),{}),h=e.element,p=h.wysiwyg.innerHTML,g=B._setOptions(c,e,l);g.callButtons&&(t=g.callButtons,d.initPlugins={}),g.plugins&&(d.plugins=n=g.plugins),0===h._menuTray.children.length&&(this._menuTray={}),o=g.toolbar.responsiveButtons,d.options=l=c,d.lang=i=l.lang,l.iframe&&h.wysiwygFrame.addEventListener("load",(function(){r._setIframeDocument(this,l),d._setOptionsInit(h,p)})),h.editorArea.appendChild(h.wysiwygFrame),l.iframe||d._setOptionsInit(h,p)},setDefaultStyle:function(t){const n=l._editorStyles=r._setDefaultOptionStyle(l,t),i=e.element;i.topArea.style.cssText=n.top,i.code.style.cssText=l._editorStyles.frame,i.code.style.display="none","auto"===l.height?i.code.style.overflow="hidden":i.code.style.overflow="",l.iframe?(i.wysiwygFrame.style.cssText=n.frame,i.wysiwyg.style.cssText=n.editor):i.wysiwygFrame.style.cssText=n.frame+n.editor},noticeOpen:function(e){d.notice.open.call(d,e)},noticeClose:function(){d.notice.close.call(d)},save:function(){e.element.originElement.value=d.getContents(!1)},getContext:function(){return e},getContents:function(e){return d.getContents(e)},getText:function(){return e.element.wysiwyg.textContent},getCharCount:function(t){return t="string"==typeof t?t:l.charCounterType,d.getCharLength(d._charTypeHTML?e.element.wysiwyg.innerHTML:e.element.wysiwyg.textContent,t)},getImagesInfo:function(){return e.image?e.image._infoList:[]},getFilesInfo:function(t){return e[t]?e[t]._infoList:[]},insertImage:function(e){d.plugins.image&&e&&(d.initPlugins.image?d.plugins.image.submitAction.call(d,e):d.callPlugin("image",d.plugins.image.submitAction.bind(d,e),null),d.focus())},insertHTML:function(e,t,n,i){if("string"==typeof e){t||(e=d.cleanHTML(e,null));try{const t=s.createRange().createContextualFragment(e).childNodes;if(n){const e=d._charTypeHTML?"outerHTML":"textContent";let n="";for(let i=0,l=t.length;i<l;i++)n+=t[i][e];if(!d.checkCharCount(n,null))return}let l,o,a,c,u;for(;l=t[0];)c&&3===c.nodeType&&o&&1===o.nodeType&&r.isBreak(l)?(c=l,r.removeItem(l)):(a=d.insertNode(l,o,!1),o=a.container||a,u||(u=a),c=l);3===c.nodeType&&1===o.nodeType&&(o=c);const h=3===o.nodeType?a.endOffset||o.textContent.length:o.childNodes.length;i?d.setRange(u.container||u,u.startOffset||0,o,h):d.setRange(o,h,o,h)}catch(t){console.warn("[SUNEDITOR.insertHTML.fail] "+t),d.execCommand("insertHTML",!1,e)}}else if(r.isComponent(e))d.insertComponent(e,!1,n,!1);else{let t=null;(r.isFormatElement(e)||r.isMedia(e))&&(t=r.getFormatElement(d.getSelectionNode(),null)),d.insertNode(e,t,n)}d.effectNode=null,d.focus(),d.history.push(!1)},setContents:function(e){d.setContents(e)},appendContents:function(t){const n=d.convertContentsForEditor(t);if(d._variable.isCodeView)d._setCodeView(d._getCodeView()+"\n"+d.convertHTMLForCodeView(n));else{const t=r.createElement("DIV");t.innerHTML=n;const i=e.element.wysiwyg,l=t.children;for(let e=0,t=l.length;e<t;e++)i.appendChild(l[e])}d.history.push(!1)},disabled:function(){e.tool.cover.style.display="block",e.element.wysiwyg.setAttribute("contenteditable",!1),d.isDisabled=!0,l.codeMirrorEditor?l.codeMirrorEditor.setOption("readOnly",!0):e.element.code.setAttribute("disabled","disabled")},enabled:function(){e.tool.cover.style.display="none",e.element.wysiwyg.setAttribute("contenteditable",!0),d.isDisabled=!1,l.codeMirrorEditor?l.codeMirrorEditor.setOption("readOnly",!1):e.element.code.removeAttribute("disabled")},show:function(){const t=e.element.topArea.style;"none"===t.display&&(t.display=l.display)},hide:function(){e.element.topArea.style.display="none"},destroy:function(){d.submenuOff(),d.containerOff(),d.controllersOff(),d.notice&&d.notice.close.call(d),d.modalForm&&d.plugins.dialog.close.call(d),d.history._destroy(),u._removeEvent(),r.removeItem(e.element.toolbar),r.removeItem(e.element.topArea);for(let e in d.functions)r.hasOwn(d,e)&&delete d.functions[e];for(let e in d)r.hasOwn(d,e)&&delete d[e];for(let e in u)r.hasOwn(u,e)&&delete u[e];for(let t in e)r.hasOwn(e,t)&&delete e[t];for(let e in t)r.hasOwn(t,e)&&delete t[e];for(let e in this)r.hasOwn(this,e)&&delete this[e]},toolbar:{disabled:function(){e.tool.cover.style.display="block"},enabled:function(){e.tool.cover.style.display="none"},show:function(){d._isInline?u._showToolbarInline():(e.element.toolbar.style.display="",e.element._stickyDummy.style.display="")},hide:function(){d._isInline?u._hideToolbar():(e.element.toolbar.style.display="none",e.element._stickyDummy.style.display="none")}}};d.functions=h,d.options=l;let p=e.element,g=p.originElement,m=p.topArea;return g.style.display="none",m.style.display="block",l.iframe&&p.wysiwygFrame.addEventListener("load",(function(){r._setIframeDocument(this,l),d._editorInit(!1,l.value),l.value=null})),"object"==typeof g.nextElementSibling?g.parentNode.insertBefore(m,g.nextElementSibling):g.parentNode.appendChild(m),p.editorArea.appendChild(p.wysiwygFrame),p=g=m=null,l.iframe||(d._editorInit(!1,l.value),l.value=null),h}(A(i,l.constructed,l.options),l.pluginCallButtons,l.plugins,l.options.lang,t,l._responsiveButtons)}};window.SUNEDITOR||Object.defineProperty(window,"SUNEDITOR",{enumerable:!0,writable:!1,configurable:!1,value:z.init({plugins:E})})},ZED3:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"component",set_container:function(e,t){const n=this.util.createElement("DIV");return n.className="se-component "+t,n.setAttribute("contenteditable",!1),n.appendChild(e),n},set_cover:function(e){const t=this.util.createElement("FIGURE");return t.appendChild(e),t},create_caption:function(){const e=this.util.createElement("FIGCAPTION");return e.setAttribute("contenteditable",!0),e.innerHTML="<div>"+this.lang.dialogBox.caption+"</div>",e}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"component",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},ee5k:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"resizing",add:function(e){const t=e.icons,n=e.context;n.resizing={_resizeClientX:0,_resizeClientY:0,_resize_plugin:"",_resize_w:0,_resize_h:0,_origin_w:0,_origin_h:0,_rotateVertical:!1,_resize_direction:"",_move_path:null,_isChange:!1,alignIcons:{basic:t.align_justify,left:t.align_left,right:t.align_right,center:t.align_center}};let i=this.setController_resize(e);n.resizing.resizeContainer=i,n.resizing.resizeDiv=i.querySelector(".se-modal-resize"),n.resizing.resizeDot=i.querySelector(".se-resize-dot"),n.resizing.resizeDisplay=i.querySelector(".se-resize-display");let l=this.setController_button(e);n.resizing.resizeButton=l;let o=n.resizing.resizeHandles=n.resizing.resizeDot.querySelectorAll("span");n.resizing.resizeButtonGroup=l.querySelector("._se_resizing_btn_group"),n.resizing.rotationButtons=l.querySelectorAll("._se_resizing_btn_group ._se_rotation"),n.resizing.percentageButtons=l.querySelectorAll("._se_resizing_btn_group ._se_percentage"),n.resizing.alignMenu=l.querySelector(".se-resizing-align-list"),n.resizing.alignMenuList=n.resizing.alignMenu.querySelectorAll("button"),n.resizing.alignButton=l.querySelector("._se_resizing_align_button"),n.resizing.autoSizeButton=l.querySelector("._se_resizing_btn_group ._se_auto_size"),n.resizing.captionButton=l.querySelector("._se_resizing_caption_button"),i.addEventListener("mousedown",(function(e){e.preventDefault()})),o[0].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[1].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[2].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[3].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[4].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[5].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[6].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[7].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),l.addEventListener("click",this.onClick_resizeButton.bind(e)),n.element.relative.appendChild(i),n.element.relative.appendChild(l),i=null,l=null,o=null},setController_resize:function(e){const t=e.util.createElement("DIV");return t.className="se-controller se-resizing-container",t.style.display="none",t.innerHTML='<div class="se-modal-resize"></div><div class="se-resize-dot"><span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span><span class="lw"></span><span class="th"></span><span class="rw"></span><span class="bh"></span><div class="se-resize-display"></div></div>',t},setController_button:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-resizing",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="se-btn-group _se_resizing_btn_group"><button type="button" data-command="percent" data-value="1" class="se-tooltip _se_percentage"><span>100%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize100+'</span></span></button><button type="button" data-command="percent" data-value="0.75" class="se-tooltip _se_percentage"><span>75%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize75+'</span></span></button><button type="button" data-command="percent" data-value="0.5" class="se-tooltip _se_percentage"><span>50%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize50+'</span></span></button><button type="button" data-command="auto" class="se-btn se-tooltip _se_auto_size">'+n.auto_size+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.autoSize+'</span></span></button><button type="button" data-command="rotate" data-value="-90" class="se-btn se-tooltip _se_rotation">'+n.rotate_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.rotateLeft+'</span></span></button><button type="button" data-command="rotate" data-value="90" class="se-btn se-tooltip _se_rotation">'+n.rotate_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.rotateRight+'</span></span></button></div><div class="se-btn-group" style="padding-top: 0;"><button type="button" data-command="mirror" data-value="h" class="se-btn se-tooltip">'+n.mirror_horizontal+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.mirrorHorizontal+'</span></span></button><button type="button" data-command="mirror" data-value="v" class="se-btn se-tooltip">'+n.mirror_vertical+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.mirrorVertical+'</span></span></button><button type="button" data-command="onalign" class="se-btn se-tooltip _se_resizing_align_button">'+n.align_justify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.toolbar.align+'</span></span></button><div class="se-btn-group-sub sun-editor-common se-list-layer se-resizing-align-list"><div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="basic">'+n.align_justify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.basic+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="left">'+n.align_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.left+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="center">'+n.align_center+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.center+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="right">'+n.align_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.right+'</span></span></button></li></ul></div></div><button type="button" data-command="caption" class="se-btn se-tooltip _se_resizing_caption_button">'+n.caption+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.caption+'</span></span></button><button type="button" data-command="revert" class="se-btn se-tooltip">'+n.revert+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.revertButton+'</span></span></button><button type="button" data-command="update" class="se-btn se-tooltip">'+n.modify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div>",i},_module_getSizeX:function(e,t,n,i){return t||(t=e._element),n||(n=e._cover),i||(i=e._container),t?/%$/.test(t.style.width)?(i&&this.util.getNumber(i.style.width,2)||100)+"%":t.style.width:""},_module_getSizeY:function(e,t,n,i){return t||(t=e._element),n||(n=e._cover),i||(i=e._container),i&&n?this.util.getNumber(n.style.paddingBottom,0)>0&&!this.context.resizing._rotateVertical?n.style.height:/%$/.test(t.style.height)&&/%$/.test(t.style.width)?(i&&this.util.getNumber(i.style.height,2)||100)+"%":t.style.height:t&&t.style.height||""},_module_setModifyInputSize:function(e,t){const n=e._onlyPercentage&&this.context.resizing._rotateVertical;e.proportion.checked=e._proportionChecked="false"!==e._element.getAttribute("data-proportion");let i=n?"":this.plugins.resizing._module_getSizeX.call(this,e);if(i===e._defaultSizeX&&(i=""),e._onlyPercentage&&(i=this.util.getNumber(i,2)),e.inputX.value=i,t.setInputSize.call(this,"x"),!e._onlyPercentage){let t=n?"":this.plugins.resizing._module_getSizeY.call(this,e);t===e._defaultSizeY&&(t=""),e._onlyPercentage&&(t=this.util.getNumber(t,2)),e.inputY.value=t}e.inputX.disabled=!!n,e.inputY.disabled=!!n,e.proportion.disabled=!!n,t.setRatio.call(this)},_module_setInputSize:function(e,t){if(e._onlyPercentage)"x"===t&&e.inputX.value>100&&(e.inputX.value=100);else if(e.proportion.checked&&e._ratio&&/\d/.test(e.inputX.value)&&/\d/.test(e.inputY.value)){const n=e.inputX.value.replace(/\d+|\./g,"")||e.sizeUnit,i=e.inputY.value.replace(/\d+|\./g,"")||e.sizeUnit;if(n!==i)return;const l="%"===n?2:0;"x"===t?e.inputY.value=this.util.getNumber(e._ratioY*this.util.getNumber(e.inputX.value,l),l)+i:e.inputX.value=this.util.getNumber(e._ratioX*this.util.getNumber(e.inputY.value,l),l)+n}},_module_setRatio:function(e){const t=e.inputX.value,n=e.inputY.value;if(e.proportion.checked&&/\d+/.test(t)&&/\d+/.test(n)){if((t.replace(/\d+|\./g,"")||e.sizeUnit)!==(n.replace(/\d+|\./g,"")||e.sizeUnit))e._ratio=!1;else if(!e._ratio){const i=this.util.getNumber(t,0),l=this.util.getNumber(n,0);e._ratio=!0,e._ratioX=i/l,e._ratioY=l/i}}else e._ratio=!1},_module_sizeRevert:function(e){e._onlyPercentage?e.inputX.value=e._origin_w>100?100:e._origin_w:(e.inputX.value=e._origin_w,e.inputY.value=e._origin_h)},_module_saveCurrentSize:function(e){const t=this.plugins.resizing._module_getSizeX.call(this,e),n=this.plugins.resizing._module_getSizeY.call(this,e);e._element.setAttribute("data-size",t+","+n),e._videoRatio&&(e._videoRatio=n)},call_controller_resize:function(e,t){const n=this.context.resizing,i=this.context[t];n._resize_plugin=t;const l=n.resizeContainer,o=n.resizeDiv,s=this.util.getOffset(e,this.context.element.wysiwygFrame),a=n._rotateVertical=/^(90|270)$/.test(Math.abs(e.getAttribute("data-rotate")).toString()),r=a?e.offsetHeight:e.offsetWidth,c=a?e.offsetWidth:e.offsetHeight,d=s.top,u=s.left-this.context.element.wysiwygFrame.scrollLeft;l.style.top=d+"px",l.style.left=u+"px",l.style.width=r+"px",l.style.height=c+"px",o.style.top="0px",o.style.left="0px",o.style.width=r+"px",o.style.height=c+"px";let h=e.getAttribute("data-align")||"basic";h="none"===h?"basic":h;const p=this.util.getParentElement(e,this.util.isComponent),g=this.util.getParentElement(e,"FIGURE"),m=this.plugins.resizing._module_getSizeX.call(this,i,e,g,p)||"auto",f=i._onlyPercentage&&"image"===t?"":", "+(this.plugins.resizing._module_getSizeY.call(this,i,e,g,p)||"auto");this.util.changeTxt(n.resizeDisplay,this.lang.dialogBox[h]+" ("+m+f+")"),n.resizeButtonGroup.style.display=i._resizing?"":"none";const _=!i._resizing||i._resizeDotHide||i._onlyPercentage?"none":"flex",b=n.resizeHandles;for(let e=0,t=b.length;e<t;e++)b[e].style.display=_;if(i._resizing){const e=n.rotationButtons;e[0].style.display=e[1].style.display=i._rotation?"":"none"}const v=n.alignMenuList;this.util.changeElement(n.alignButton.firstElementChild,n.alignIcons[h]);for(let e=0,t=v.length;e<t;e++)v[e].getAttribute("data-value")===h?this.util.addClass(v[e],"on"):this.util.removeClass(v[e],"on");const y=n.percentageButtons,C=/%$/.test(e.style.width)&&/%$/.test(p.style.width)?this.util.getNumber(p.style.width,0)/100+"":"";for(let e=0,t=y.length;e<t;e++)y[e].getAttribute("data-value")===C?this.util.addClass(y[e],"active"):this.util.removeClass(y[e],"active");i._captionShow?(n.captionButton.style.display="",this.util.getChildElement(e.parentNode,"figcaption")?(this.util.addClass(n.captionButton,"active"),i._captionChecked=!0):(this.util.removeClass(n.captionButton,"active"),i._captionChecked=!1)):n.captionButton.style.display="none",l.style.display="block";const w={left:0,top:50};this.options.iframe&&(w.left-=this.context.element.wysiwygFrame.parentElement.offsetLeft,w.top-=this.context.element.wysiwygFrame.parentElement.offsetTop),this.setControllerPosition(n.resizeButton,l,"bottom",w),this.controllersOn(l,n.resizeButton,this.util.setDisabledButtons.bind(this,!1,this.resizingDisabledButtons),e,t),this.util.setDisabledButtons(!0,this.resizingDisabledButtons),n._resize_w=r,n._resize_h=c;const x=(e.getAttribute("origin-size")||"").split(",");return n._origin_w=x[0]||e.naturalWidth,n._origin_h=x[1]||e.naturalHeight,{w:r,h:c,t:d,l:u}},_closeAlignMenu:null,openAlignMenu:function(){const e=this.context.resizing.alignButton;this.util.addClass(e,"on"),this.context.resizing.alignMenu.style.top=e.offsetTop+e.offsetHeight+"px",this.context.resizing.alignMenu.style.left=e.offsetLeft-e.offsetWidth/2+"px",this.context.resizing.alignMenu.style.display="block",this.plugins.resizing._closeAlignMenu=function(){this.util.removeClass(this.context.resizing.alignButton,"on"),this.context.resizing.alignMenu.style.display="none",this.removeDocEvent("click",this.plugins.resizing._closeAlignMenu),this.plugins.resizing._closeAlignMenu=null}.bind(this),this.addDocEvent("click",this.plugins.resizing._closeAlignMenu)},onClick_resizeButton:function(e){e.stopPropagation();const t=e.target,n=t.getAttribute("data-command")||t.parentNode.getAttribute("data-command");if(!n)return;const i=t.getAttribute("data-value")||t.parentNode.getAttribute("data-value"),l=this.context.resizing._resize_plugin,o=this.context[l],s=o._element,a=this.plugins[l];if(e.preventDefault(),"function"!=typeof this.plugins.resizing._closeAlignMenu||(this.plugins.resizing._closeAlignMenu(),"onalign"!==n)){switch(n){case"auto":this.plugins.resizing.resetTransform.call(this,s),a.setAutoSize.call(this),this.selectComponent(s,l);break;case"percent":let e=this.plugins.resizing._module_getSizeY.call(this,o);if(this.context.resizing._rotateVertical){const t=s.getAttribute("data-percentage");t&&(e=t.split(",")[1])}this.plugins.resizing.resetTransform.call(this,s),a.setPercentSize.call(this,100*i,null!==this.util.getNumber(e,0)&&/%$/.test(e)?e:""),this.selectComponent(s,l);break;case"mirror":const t=s.getAttribute("data-rotate")||"0";let n=s.getAttribute("data-rotateX")||"",r=s.getAttribute("data-rotateY")||"";"h"===i&&!this.context.resizing._rotateVertical||"v"===i&&this.context.resizing._rotateVertical?r=r?"":"180":n=n?"":"180",s.setAttribute("data-rotateX",n),s.setAttribute("data-rotateY",r),this.plugins.resizing._setTransForm(s,t,n,r);break;case"rotate":const c=this.context.resizing,d=1*s.getAttribute("data-rotate")+1*i,u=this._w.Math.abs(d)>=360?0:d;s.setAttribute("data-rotate",u),c._rotateVertical=/^(90|270)$/.test(this._w.Math.abs(u).toString()),this.plugins.resizing.setTransformSize.call(this,s,null,null),this.selectComponent(s,l);break;case"onalign":return void this.plugins.resizing.openAlignMenu.call(this);case"align":const h="basic"===i?"none":i;a.setAlign.call(this,h,null,null,null),this.selectComponent(s,l);break;case"caption":const p=!o._captionChecked;if(a.openModify.call(this,!0),o._captionChecked=o.captionCheckEl.checked=p,a.update_image.call(this,!1,!1,!1),p){const e=this.util.getChildElement(o._caption,(function(e){return 3===e.nodeType}));e?this.setRange(e,0,e,e.textContent.length):o._caption.focus(),this.controllersOff()}else this.selectComponent(s,l),a.openModify.call(this,!0);break;case"revert":a.setOriginSize.call(this),this.selectComponent(s,l);break;case"update":a.openModify.call(this),this.controllersOff();break;case"delete":a.destroy.call(this)}this.history.push(!1)}},resetTransform:function(e){const t=(e.getAttribute("data-size")||e.getAttribute("data-origin")||"").split(",");this.context.resizing._rotateVertical=!1,e.style.maxWidth="",e.style.transform="",e.style.transformOrigin="",e.setAttribute("data-rotate",""),e.setAttribute("data-rotateX",""),e.setAttribute("data-rotateY",""),this.plugins[this.context.resizing._resize_plugin].setSize.call(this,t[0]?t[0]:"auto",t[1]?t[1]:"",!0)},setTransformSize:function(e,t,n){let i=e.getAttribute("data-percentage");const l=this.context.resizing._rotateVertical,o=1*e.getAttribute("data-rotate");let s="";if(i&&!l)i=i.split(","),"auto"===i[0]&&"auto"===i[1]?this.plugins[this.context.resizing._resize_plugin].setAutoSize.call(this):this.plugins[this.context.resizing._resize_plugin].setPercentSize.call(this,i[0],i[1]);else{const i=this.util.getParentElement(e,"FIGURE"),a=t||e.offsetWidth,r=n||e.offsetHeight,c=(l?r:a)+"px",d=(l?a:r)+"px";if(this.plugins[this.context.resizing._resize_plugin].cancelPercentAttr.call(this),this.plugins[this.context.resizing._resize_plugin].setSize.call(this,a+"px",r+"px",!0),i.style.width=c,i.style.height=this.context[this.context.resizing._resize_plugin]._caption?"":d,l){let e=a/2+"px "+a/2+"px 0",t=r/2+"px "+r/2+"px 0";s=90===o||-270===o?t:e}}e.style.transformOrigin=s,this.plugins.resizing._setTransForm(e,o.toString(),e.getAttribute("data-rotateX")||"",e.getAttribute("data-rotateY")||""),e.style.maxWidth=l?"none":"",this.plugins.resizing.setCaptionPosition.call(this,e)},_setTransForm:function(e,t,n,i){let l=(e.offsetWidth-e.offsetHeight)*(/-/.test(t)?1:-1),o="";if(/[1-9]/.test(t)&&(n||i))switch(o=n?"Y":"X",t){case"90":o=n&&i?"X":i?o:"";break;case"270":l*=-1,o=n&&i?"Y":n?o:"";break;case"-90":o=n&&i?"Y":n?o:"";break;case"-270":l*=-1,o=n&&i?"X":i?o:"";break;default:o=""}t%180==0&&(e.style.maxWidth=""),e.style.transform="rotate("+t+"deg)"+(n?" rotateX("+n+"deg)":"")+(i?" rotateY("+i+"deg)":"")+(o?" translate"+o+"("+l+"px)":"")},setCaptionPosition:function(e){const t=this.util.getChildElement(this.util.getParentElement(e,"FIGURE"),"FIGCAPTION");t&&(t.style.marginTop=(this.context.resizing._rotateVertical?e.offsetWidth-e.offsetHeight:0)+"px")},onMouseDown_resize_handle:function(e){e.stopPropagation(),e.preventDefault();const t=this.context.resizing,n=t._resize_direction=e.target.classList[0];t._resizeClientX=e.clientX,t._resizeClientY=e.clientY,this.context.element.resizeBackground.style.display="block",t.resizeButton.style.display="none",t.resizeDiv.style.float=/l/.test(n)?"right":/r/.test(n)?"left":"none";const i=function(e){if("keydown"===e.type&&27!==e.keyCode)return;const o=t._isChange;t._isChange=!1,this.removeDocEvent("mousemove",l),this.removeDocEvent("mouseup",i),this.removeDocEvent("keydown",i),"keydown"===e.type?(this.controllersOff(),this.context.element.resizeBackground.style.display="none",this.plugins[this.context.resizing._resize_plugin].init.call(this)):(this.plugins.resizing.cancel_controller_resize.call(this,n),o&&this.history.push(!1))}.bind(this),l=this.plugins.resizing.resizing_element.bind(this,t,n,this.context[t._resize_plugin]);this.addDocEvent("mousemove",l),this.addDocEvent("mouseup",i),this.addDocEvent("keydown",i)},resizing_element:function(e,t,n,i){const l=i.clientX,o=i.clientY;let s=n._element_w,a=n._element_h;const r=n._element_w+(/r/.test(t)?l-e._resizeClientX:e._resizeClientX-l),c=n._element_h+(/b/.test(t)?o-e._resizeClientY:e._resizeClientY-o),d=n._element_h/n._element_w*r;/t/.test(t)&&(e.resizeDiv.style.top=n._element_h-(/h/.test(t)?c:d)+"px"),/l/.test(t)&&(e.resizeDiv.style.left=n._element_w-r+"px"),/r|l/.test(t)&&(e.resizeDiv.style.width=r+"px",s=r),/^(t|b)[^h]$/.test(t)?(e.resizeDiv.style.height=d+"px",a=d):/^(t|b)h$/.test(t)&&(e.resizeDiv.style.height=c+"px",a=c),e._resize_w=s,e._resize_h=a,this.util.changeTxt(e.resizeDisplay,this._w.Math.round(s)+" x "+this._w.Math.round(a)),e._isChange=!0},cancel_controller_resize:function(e){const t=this.context.resizing._rotateVertical;this.controllersOff(),this.context.element.resizeBackground.style.display="none";let n=this._w.Math.round(t?this.context.resizing._resize_h:this.context.resizing._resize_w),i=this._w.Math.round(t?this.context.resizing._resize_w:this.context.resizing._resize_h);if(!t&&!/%$/.test(n)){const e=16,t=this.context.element.wysiwygFrame.clientWidth-2*e-2;this.util.getNumber(n,0)>t&&(i=this._w.Math.round(i/n*t),n=t)}const l=this.context.resizing._resize_plugin;this.plugins[l].setSize.call(this,n,i,!1,e),t&&this.plugins.resizing.setTransformSize.call(this,this.context[this.context.resizing._resize_plugin]._element,n,i),this.selectComponent(this.context[l]._element,l)}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"resizing",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},"gjS+":function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"fileManager",_xmlHttp:null,_checkMediaComponent:function(e){return/IMG/i.test(e)?!/FIGURE/i.test(e.parentElement.nodeName)||!/FIGURE/i.test(e.parentElement.parentElement.nodeName):!/VIDEO/i.test(e)||!/FIGURE/i.test(e.parentElement.nodeName)},upload:function(e,t,n,i,l){this.showLoading();const o=this.plugins.fileManager,s=o._xmlHttp=this.util.getXMLHttpRequest();if(s.onreadystatechange=o._callBackUpload.bind(this,s,i,l),s.open("post",e,!0),null!==t&&"object"==typeof t&&this._w.Object.keys(t).length>0)for(let e in t)s.setRequestHeader(e,t[e]);s.send(n)},_callBackUpload:function(e,t,n){if(4===e.readyState)if(200===e.status)try{t(e)}catch(e){throw Error('[SUNEDITOR.fileManager.upload.callBack.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}else{this.closeLoading();const t=e.responseText?JSON.parse(e.responseText):e;if("function"!=typeof n||n("",t,this)){const n="[SUNEDITOR.fileManager.upload.serverException] status: "+e.status+", response: "+(t.errorMessage||e.responseText);throw this.functions.noticeOpen(n),Error(n)}}},checkInfo:function(e,t,n,i,l){let o=[];for(let e=0,n=t.length;e<n;e++)o=o.concat([].slice.call(this.context.element.wysiwyg.getElementsByTagName(t[e])));const s=this.plugins.fileManager,a=this.context[e],r=a._infoList,c=s.setInfo.bind(this);if(o.length===r.length){if(this._componentsInfoReset){for(let t=0,i=o.length;t<i;t++)c(e,o[t],n,null,l);return}{let e=!1;for(let t,n=0,i=r.length;n<i;n++)if(t=r[n],0===o.filter((function(e){return t.src===e.src&&t.index.toString()===e.getAttribute("data-index")})).length){e=!0;break}if(!e)return}}const d=l?this.context.resizing._resize_plugin:"";l&&(this.context.resizing._resize_plugin=e);const u=[],h=[];for(let e=0,t=r.length;e<t;e++)h[e]=r[e].index;for(let t,r=0,d=o.length;r<d;r++)t=o[r],this.util.getParentElement(t,this.util.isMediaComponent)&&s._checkMediaComponent(t)?!t.getAttribute("data-index")||h.indexOf(1*t.getAttribute("data-index"))<0?(u.push(a._infoIndex),t.removeAttribute("data-index"),c(e,t,n,null,l)):u.push(1*t.getAttribute("data-index")):(u.push(a._infoIndex),i(t));for(let e,t=0;t<r.length;t++)e=r[t].index,u.indexOf(e)>-1||(r.splice(t,1),"function"==typeof n&&n(null,e,"delete",null,0,this),t--);l&&(this.context.resizing._resize_plugin=d)},setInfo:function(e,t,n,i,l){const o=l?this.context.resizing._resize_plugin:"";l&&(this.context.resizing._resize_plugin=e);const s=this.plugins[e],a=this.context[e],r=a._infoList;let c=t.getAttribute("data-index"),d=null,u="";if(i||(i={name:t.getAttribute("data-file-name")||("string"==typeof t.src?t.src.split("/").pop():""),size:t.getAttribute("data-file-size")||0}),!c||this._componentsInfoInit)u="create",c=a._infoIndex++,t.setAttribute("data-index",c),t.setAttribute("data-file-name",i.name),t.setAttribute("data-file-size",i.size),d={src:t.src,index:1*c,name:i.name,size:i.size},r.push(d);else{u="update",c*=1;for(let e=0,t=r.length;e<t;e++)if(c===r[e].index){d=r[e];break}d||(c=a._infoIndex++,d={index:c},r.push(d)),d.src=t.src,d.name=t.getAttribute("data-file-name"),d.size=1*t.getAttribute("data-file-size")}if(d.element=t,d.delete=s.destroy.bind(this,t),d.select=function(e){e.scrollIntoView(!0),this._w.setTimeout(s.select.bind(this,e))}.bind(this,t),l){if(!t.getAttribute("origin-size")&&t.naturalWidth&&t.setAttribute("origin-size",t.naturalWidth+","+t.naturalHeight),!t.getAttribute("data-origin")){const e=this.util.getParentElement(t,this.util.isMediaComponent),n=this.util.getParentElement(t,"FIGURE"),i=this.plugins.resizing._module_getSizeX.call(this,a,t,n,e),l=this.plugins.resizing._module_getSizeY.call(this,a,t,n,e);t.setAttribute("data-origin",i+","+l),t.setAttribute("data-size",i+","+l)}if(!t.style.width){const e=(t.getAttribute("data-size")||t.getAttribute("data-origin")||"").split(",");s.onModifyMode.call(this,t,null),s.applySize.call(this,e[0],e[1])}this.context.resizing._resize_plugin=o}"function"==typeof n&&n(t,c,u,d,--a._uploadFileLength<0?0:a._uploadFileLength,this)},deleteInfo:function(e,t,n){if(t>=0){const i=this.context[e]._infoList;for(let e=0,l=i.length;e<l;e++)if(t===i[e].index)return i.splice(e,1),void("function"==typeof n&&n(null,t,"delete",null,0,this))}},resetInfo:function(e,t){const n=this.context[e];if("function"==typeof t){const e=n._infoList;for(let n=0,i=e.length;n<i;n++)t(null,e[n].index,"delete",null,0,this)}n._infoList=[],n._infoIndex=0}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"fileManager",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)}});
  2. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9kaWFsb2cuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9maWxlQnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGFuZy9lbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9tb2R1bGVzL19jb2xvclBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2ZvbnRDb2xvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2hpbGl0ZUNvbG9yLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9fc2VsZWN0TWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9tb2R1bGVzL19hbmNob3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL2xpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL2ltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2RpYWxvZy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9kaWFsb2cvYXVkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL21hdGguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvY29tbWFuZC9ibG9ja3F1b3RlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvYWxpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS9mb250LmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvZm9udFNpemUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS9ob3Jpem9udGFsUnVsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2xpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2Zvcm1hdEJsb2NrLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvbGluZUhlaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L3BhcmFncmFwaFN0eWxlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvdGV4dFN0eWxlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2ZpbGVCcm93c2VyL2ltYWdlR2FsbGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2RlZmF1bHRJY29ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGliL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGliL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9fbm90aWNlLmpzIiwid2VicGFjazovLy8uL3NyYy9zdW5lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9jb3JlLmpzIiwid2VicGFjazovLy8uL3NyYy9saWIvaGlzdG9yeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VuZWRpdG9yX2J1aWxkLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL21vZHVsZXMvY29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL21vZHVsZXMvcmVzaXppbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9maWxlTWFuYWdlci5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsImZhY3RvcnkiLCJ3aW5kb3ciLCJ0aGlzIiwibm9HbG9iYWwiLCJkaWFsb2ciLCJhZGQiLCJjb3JlIiwiY29udGV4dCIsImtpbmQiLCJ1cGRhdGVNb2RhbCIsIl9jbG9zZVNpZ25hbCIsImRpYWxvZ19kaXYiLCJ1dGlsIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImRpYWxvZ19iYWNrIiwic3R5bGUiLCJkaXNwbGF5IiwiZGlhbG9nX2FyZWEiLCJhcHBlbmRDaGlsZCIsIm1vZGFsQXJlYSIsImJhY2siLCJtb2RhbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25Nb3VzZURvd25fZGlhbG9nIiwiX29uQ2xpY2tfZGlhbG9nIiwiZWxlbWVudCIsInJlbGF0aXZlIiwiZSIsInRlc3QiLCJ0YXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJwbHVnaW5zIiwiY2xvc2UiLCJvcGVuIiwidXBkYXRlIiwibW9kYWxGb3JtIiwiX2JpbmRDbG9zZSIsIl9kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleUNvZGUiLCJvcHRpb25zIiwicG9wdXBEaXNwbGF5IiwicG9zaXRpb24iLCJmb2N1c0VsZW1lbnQiLCJvbiIsImZvY3VzIiwiaW5pdCIsIlNVTkVESVRPUl9NT0RVTEVTIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJkb2N1bWVudCIsInciLCJFcnJvciIsImZpbGVCcm93c2VyIiwiX3htbEh0dHAiLCJfbG9hZGluZyIsImFyZWEiLCJoZWFkZXIiLCJ0YWdBcmVhIiwiYm9keSIsImxpc3QiLCJ0YWdFbGVtZW50cyIsIml0ZW1zIiwic2VsZWN0ZWRUYWdzIiwic2VsZWN0b3JIYW5kbGVyIiwiY29udGV4dFBsdWdpbiIsImNvbHVtblNpemUiLCJicm93c2VyX2RpdiIsImNvbnRlbnQiLCJpbm5lckhUTUwiLCJzZXRfYnJvd3NlciIsInF1ZXJ5U2VsZWN0b3IiLCJ0aXRsZUFyZWEiLCJvbkNsaWNrVGFnIiwib25DbGlja0ZpbGUiLCJfb25Nb3VzZURvd25fYnJvd3NlciIsIl9vbkNsaWNrX2Jyb3dzZXIiLCJsYW5nIiwiZGlhbG9nQm94IiwiaWNvbnMiLCJjYW5jZWwiLCJzdG9wUHJvcGFnYXRpb24iLCJwbHVnaW5OYW1lIiwiZmlsZUJyb3dzZXJDb250ZXh0IiwicGx1Z2luQ29udGV4dCIsImxpc3RDbGFzc05hbWUiLCJsaXN0Q2xhc3MiLCJoYXNDbGFzcyIsInRleHRDb250ZW50IiwidGl0bGUiLCJfZHJhd0ZpbGVMaXN0IiwidXJsIiwiZmlsZUJyb3dzZXJQbHVnaW4iLCJhYm9ydCIsInNob3dCcm93c2VyTG9hZGluZyIsImNsb3NlQnJvd3NlckxvYWRpbmciLCJicm93c2VySGVhZGVyIiwieG1sSHR0cCIsImdldFhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiX2NhbGxCYWNrR2V0IiwiX3ciLCJrZXlzIiwibGVuZ3RoIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJyZWFkeVN0YXRlIiwic3RhdHVzIiwiX2RyYXdMaXN0SXRlbSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInJlc3VsdCIsIm1lc3NhZ2UiLCJtYXhIZWlnaHQiLCJpbm5lckhlaWdodCIsIm9mZnNldEhlaWdodCIsInJlcyIsImVyciIsImVycm9yTWVzc2FnZSIsIl90YWdzIiwibGVuIiwic3BsaXRTaXplIiwiTWF0aCIsInJvdW5kIiwiZHJhd0l0ZW1IYW5kbGVyIiwiaXRlbVRlbXBsYXRlSGFuZGxlciIsInRhZ3NIVE1MIiwibGlzdEhUTUwiLCJjb2x1bW5zIiwiaXRlbSIsInRhZ3MiLCJ0YWciLCJzcGxpdCIsIm1hcCIsInYiLCJ0cmltIiwidExlbiIsImluZGV4T2YiLCJwdXNoIiwicXVlcnlTZWxlY3RvckFsbCIsImlzQW5jaG9yIiwidGFnTmFtZSIsInNlbGVjdFRhZyIsInNUYWdJbmRleCIsInNwbGljZSIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJmaWx0ZXIiLCJzb21lIiwicHJldmVudERlZmF1bHQiLCJsaXN0RWwiLCJjb21tYW5kIiwicGFyZW50Tm9kZSIsImhhbmRsZXIiLCJjb2RlIiwidG9vbGJhciIsImRlZmF1bHQiLCJzYXZlIiwiZm9udCIsImZvcm1hdHMiLCJmb250U2l6ZSIsImJvbGQiLCJ1bmRlcmxpbmUiLCJpdGFsaWMiLCJzdHJpa2UiLCJzdWJzY3JpcHQiLCJzdXBlcnNjcmlwdCIsInJlbW92ZUZvcm1hdCIsImZvbnRDb2xvciIsImhpbGl0ZUNvbG9yIiwiaW5kZW50Iiwib3V0ZGVudCIsImFsaWduIiwiYWxpZ25MZWZ0IiwiYWxpZ25SaWdodCIsImFsaWduQ2VudGVyIiwiYWxpZ25KdXN0aWZ5Iiwib3JkZXJMaXN0IiwidW5vcmRlckxpc3QiLCJob3Jpem9udGFsUnVsZSIsImhyX3NvbGlkIiwiaHJfZG90dGVkIiwiaHJfZGFzaGVkIiwidGFibGUiLCJsaW5rIiwibWF0aCIsImltYWdlIiwidmlkZW8iLCJhdWRpbyIsImZ1bGxTY3JlZW4iLCJzaG93QmxvY2tzIiwiY29kZVZpZXciLCJ1bmRvIiwicmVkbyIsInByZXZpZXciLCJwcmludCIsInRhZ19wIiwidGFnX2RpdiIsInRhZ19oIiwidGFnX2Jsb2NrcXVvdGUiLCJ0YWdfcHJlIiwidGVtcGxhdGUiLCJsaW5lSGVpZ2h0IiwicGFyYWdyYXBoU3R5bGUiLCJ0ZXh0U3R5bGUiLCJpbWFnZUdhbGxlcnkiLCJtZW50aW9uIiwibGlua0JveCIsInRleHQiLCJuZXdXaW5kb3dDaGVjayIsImRvd25sb2FkTGlua0NoZWNrIiwiYm9va21hcmsiLCJtYXRoQm94IiwiaW5wdXRMYWJlbCIsImZvbnRTaXplTGFiZWwiLCJwcmV2aWV3TGFiZWwiLCJpbWFnZUJveCIsImZpbGUiLCJhbHRUZXh0IiwidmlkZW9Cb3giLCJhdWRpb0JveCIsImJyb3dzZXIiLCJzZWFyY2giLCJjYXB0aW9uIiwic3VibWl0QnV0dG9uIiwicmV2ZXJ0QnV0dG9uIiwicHJvcG9ydGlvbiIsImJhc2ljIiwibGVmdCIsInJpZ2h0IiwiY2VudGVyIiwid2lkdGgiLCJoZWlnaHQiLCJzaXplIiwicmF0aW8iLCJjb250cm9sbGVyIiwiZWRpdCIsInVubGluayIsInJlbW92ZSIsImluc2VydFJvd0Fib3ZlIiwiaW5zZXJ0Um93QmVsb3ciLCJkZWxldGVSb3ciLCJpbnNlcnRDb2x1bW5CZWZvcmUiLCJpbnNlcnRDb2x1bW5BZnRlciIsImRlbGV0ZUNvbHVtbiIsImZpeGVkQ29sdW1uV2lkdGgiLCJyZXNpemUxMDAiLCJyZXNpemU3NSIsInJlc2l6ZTUwIiwicmVzaXplMjUiLCJhdXRvU2l6ZSIsIm1pcnJvckhvcml6b250YWwiLCJtaXJyb3JWZXJ0aWNhbCIsInJvdGF0ZUxlZnQiLCJyb3RhdGVSaWdodCIsIm1heFNpemUiLCJtaW5TaXplIiwidGFibGVIZWFkZXIiLCJtZXJnZUNlbGxzIiwic3BsaXRDZWxscyIsIkhvcml6b250YWxTcGxpdCIsIlZlcnRpY2FsU3BsaXQiLCJtZW51Iiwic3BhY2VkIiwiYm9yZGVyZWQiLCJuZW9uIiwidHJhbnNsdWNlbnQiLCJzaGFkb3ciLCJTVU5FRElUT1JfTEFORyIsImNvbG9yUGlja2VyIiwiY29sb3JMaXN0SFRNTCIsIl9jb2xvcklucHV0IiwiX2RlZmF1bHRDb2xvciIsIl9zdHlsZVByb3BlcnR5IiwiX2N1cnJlbnRDb2xvciIsIl9jb2xvckxpc3QiLCJjcmVhdGVDb2xvckxpc3QiLCJfbWFrZUNvbG9yTGlzdCIsIm1ha2VDb2xvciIsIm9wdGlvbiIsImNvbG9yTGlzdCIsImNvbG9yQXJyIiwiY29sb3IiLCJjaGVja2VkIiwiZXJhc2UiLCJub2RlIiwiZmlsbENvbG9yIiwiZ2V0Q29sb3JJbk5vZGUiLCJpc0hleENvbG9yIiwicmdiMmhleCIsInRvTG93ZXJDYXNlIiwic2V0SW5wdXRUZXh0IiwiY29sb3JOYW1lMmhleCIsInNldEN1cnJlbnRDb2xvciIsImhleENvbG9yU3RyIiwiYm9yZGVyQ29sb3IiLCJmaW5kQ29sb3IiLCJzdHlsZVByb3BlcnR5IiwiaXNXeXNpd3lnRGl2Iiwibm9kZVR5cGUiLCJzdHIiLCJyZ2IiLCJyZ2JNYXRjaCIsIm1hdGNoIiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29sb3JOYW1lIiwidGVtcCIsImNvbG9ycyIsImdldENvbXB1dGVkU3R5bGUiLCJhIiwicmVtb3ZlSXRlbSIsInN1YnN0ciIsInRhcmdldEVsZW1lbnQiLCJhZGRNb2R1bGUiLCJwcmV2aWV3RWwiLCJjb2xvcklucHV0IiwibGlzdERpdiIsInNldFN1Ym1lbnUiLCJvbkNoYW5nZUlucHV0Iiwic3VibWl0IiwicGlja3VwIiwiaW5pdE1lbnVUYXJnZXQiLCJjb2xvckFyZWEiLCJjb250ZXh0UGlja2VyIiwiY29udGV4dEZvbnRDb2xvciIsInd3Q29tcHV0ZWRTdHlsZSIsImdldFNlbGVjdGlvbk5vZGUiLCJhcHBseUNvbG9yIiwibm9kZUNoYW5nZSIsInN1Ym1lbnVPZmYiLCJuZXdOb2RlIiwiY29udGV4dEhpbGl0ZUNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwidGVtcGxhdGVEaXYiLCJ0ZW1wbGF0ZUxpc3QiLCJ0ZW1wbGF0ZXMiLCJodG1sIiwic2V0Q29udGVudHMiLCJzZWxlY3RNZW51IiwiY2FsbGVyIiwiY2FsbGVyQ29udGV4dCIsInNldEZvcm0iLCJjcmVhdGVMaXN0IiwibGlzdENvbnRleHQiLCJmb3JtIiwibWVudXMiLCJpbml0RXZlbnQiLCJmb3JtcyIsImluZGV4IiwiY2xpY2tNZXRob2QiLCJjYWxsZXJOYW1lIiwib25Nb3VzZWRvd25fbGlzdCIsIm9uTW91c2VNb3ZlX2xpc3QiLCJvbkNsaWNrX2xpc3QiLCJtb3ZlSXRlbSIsIm51bSIsInNlbGVjdEluZGV4IiwiZ2V0SXRlbSIsInBvc2l0aW9uSGFuZGxlciIsInZpc2liaWxpdHkiLCJhbmNob3IiLCJzZXREaWFsb2dGb3JtIiwiaG9zdCIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwicmVsTGlzdCIsImxpbmtSZWwiLCJkZWZhdWx0UmVsIiwibGlua1JlbERlZmF1bHQiLCJwcm90b2NvbCIsImRvd25sb2FkIiwicmVsIiwiYW5jaG9yUGx1Z2luIiwidXJsSW5wdXQiLCJsaW5rRGVmYXVsdFJlbCIsImN1cnJlbnRSZWwiLCJsaW5rQW5jaG9yIiwibGlua1ZhbHVlIiwiX2NoYW5nZSIsImNoZWNrX25ld193aW5kb3ciLCJjaGVja19ib29rbWFyayIsImFuY2hvclRleHQiLCJkb3dubG9hZENoZWNrIiwiYm9va21hcmtCdXR0b24iLCJyZWxCdXR0b24iLCJyZWxQcmV2aWV3Iiwib25DbGlja19yZWxCdXR0b24iLCJvbkNsaWNrX3JlbExpc3QiLCJvbkNoYW5nZV9uZXdXaW5kb3dDaGVjayIsIm9uQ2hhbmdlX2Rvd25sb2FkQ2hlY2siLCJvbkNoYW5nZUFuY2hvclRleHQiLCJvbkNoYW5nZVVybElucHV0Iiwib25LZXlEb3duVXJsSW5wdXQiLCJvbkZvY3VzVXJsSW5wdXQiLCJvbkJsdXJVcmxJbnB1dCIsIm9uQ2xpY2tfYm9va21hcmtCdXR0b24iLCJjb250ZXh0QW5jaG9yIiwiaHJlZiIsImxhc3RJbmRleE9mIiwiZ2V0U2VsZWN0aW9uIiwic2V0UmVsIiwic2V0TGlua1ByZXZpZXciLCJzZXRIZWFkZXJCb29rbWFyayIsIl9jbG9zZVJlbE1lbnUiLCJ0b2dnbGVSZWxMaXN0Iiwic2hvdyIsInJ0bCIsIm9mZnNldExlZnQiLCJvZmZzZXRXaWR0aCIsInRvcCIsIm9mZnNldFRvcCIsImNvbnRhaW5zIiwiY21kIiwiY3VycmVudCIsInRvZ2dsZUNsYXNzIiwiam9pbiIsInJlbEF0dHIiLCJyZWxMaXN0RWwiLCJyZWxzIiwiY2hlY2tlZFJlbCIsImNyZWF0ZUhlYWRlckxpc3QiLCJjb250ZXh0TGlzdCIsInVybFZhbHVlIiwiaGVhZGVycyIsImdldExpc3RDaGlsZHJlbiIsInd5c2l3eWciLCJub2RlTmFtZSIsInZhbHVlUmVnRXhwIiwiUmVnRXhwIiwiaCIsIl9zZXRNZW51TGlzdFBvc2l0aW9uIiwiaWQiLCJyYW5kb20iLCJjb250ZXh0TGluayIsImxpbmtQcm90b2NvbCIsInJlc2VydmVkUHJvdG9jb2wiLCJzYW1lUHJvdG9jb2wiLCJzZXRDdHgiLCJ1cGRhdGVBbmNob3IiLCJhbHQiLCJub3RUZXh0Iiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiY2hpbGRyZW4iLCJjcmVhdGVBbmNob3IiLCJvQSIsIl9yZWxNZXJnZSIsIl9yZWxEZWxldGUiLCJfbGlua0FuY2hvciIsImFuY2hvckN0eCIsImxpbmtfZGlhbG9nIiwic2V0RGlhbG9nIiwibGlua19jb250cm9sbGVyIiwic2V0Q29udHJvbGxlcl9MaW5rQnV0dG9uIiwibGlua0NvbnRyb2xsZXIiLCJvbkNsaWNrX2xpbmtDb250cm9sbGVyIiwibGlua19idG4iLCJkZWxldGUiLCJjdXJyZW50Q29udHJvbGxlck5hbWUiLCJzaG93TG9hZGluZyIsInRleHROb2RlIiwiY2hpbGROb2RlcyIsInNldFJhbmdlIiwic2VsZWN0ZWRGb3JtYXRzIiwiZ2V0U2VsZWN0ZWRFbGVtZW50cyIsIm9Gb3JtYXQiLCJpbnNlcnROb2RlIiwiY2xvc2VMb2FkaW5nIiwiaGlzdG9yeSIsImFjdGl2ZSIsImNvbnRyb2xsZXJBcnJheSIsImNhbGxfY29udHJvbGxlciIsImNvbnRyb2xsZXJzT2ZmIiwic2VsZWN0aW9uQVRhZyIsImVkaXRMaW5rIiwibGlua0J0biIsInNldENvbnRyb2xsZXJQb3NpdGlvbiIsImNvbnRyb2xsZXJzT24iLCJzYyIsImdldENoaWxkRWxlbWVudCIsImVjIiwiY29tcG9uZW50IiwicmVzaXppbmciLCJmaWxlTWFuYWdlciIsImNvbnRleHRJbWFnZSIsIl9pbmZvTGlzdCIsIl9pbmZvSW5kZXgiLCJfdXBsb2FkRmlsZUxlbmd0aCIsInNpemVVbml0IiwiX2ltYWdlU2l6ZVVuaXQiLCJfbGlua0VsZW1lbnQiLCJfYWx0VGV4dCIsIl9hbGlnbiIsIl9mbG9hdENsYXNzUmVnRXhwIiwiX3Zfc3JjIiwiX2xpbmtWYWx1ZSIsInN2Z0RlZmF1bHRTaXplIiwiYmFzZTY0UmVuZGVySW5kZXgiLCJfZWxlbWVudCIsIl9jb3ZlciIsIl9jb250YWluZXIiLCJpbnB1dFgiLCJpbnB1dFkiLCJfZWxlbWVudF93IiwiX2VsZW1lbnRfaCIsIl9lbGVtZW50X2wiLCJfZWxlbWVudF90IiwiX2RlZmF1bHRTaXplWCIsIl9kZWZhdWx0U2l6ZVkiLCJfb3JpZ2luX3ciLCJpbWFnZVdpZHRoIiwiX29yaWdpbl9oIiwiaW1hZ2VIZWlnaHQiLCJfcHJvcG9ydGlvbkNoZWNrZWQiLCJfcmVzaXppbmciLCJpbWFnZVJlc2l6aW5nIiwiX3Jlc2l6ZURvdEhpZGUiLCJpbWFnZUhlaWdodFNob3ciLCJfcm90YXRpb24iLCJpbWFnZVJvdGF0aW9uIiwiX29ubHlQZXJjZW50YWdlIiwiaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UiLCJfcmF0aW8iLCJfcmF0aW9YIiwiX3JhdGlvWSIsIl9jYXB0aW9uU2hvdyIsIl9jYXB0aW9uQ2hlY2tlZCIsIl9jYXB0aW9uIiwiY2FwdGlvbkNoZWNrRWwiLCJpbWFnZV9kaWFsb2ciLCJpbWdJbnB1dEZpbGUiLCJpbWdVcmxGaWxlIiwicHJldmlld1NyYyIsIm9wZW5UYWIiLCJfcmVtb3ZlU2VsZWN0ZWRGaWxlcyIsIl9vbkxpbmtQcmV2aWV3IiwiX2ZpbGVJbnB1dENoYW5nZSIsImltYWdlR2FsbGVyeUJ1dHRvbiIsIl9vcGVuR2FsbGVyeSIsInNldElucHV0U2l6ZSIsInNldFJhdGlvIiwic2l6ZVJldmVydCIsImltYWdlRmlsZUlucHV0IiwiaW1hZ2VBY2NlcHQiLCJpbWFnZU11bHRpcGxlRmlsZSIsImltYWdlVXJsSW5wdXQiLCJpbWFnZUdhbGxlcnlVcmwiLCJpbWFnZV9nYWxsZXJ5Iiwib25seVBlcmNlbnRhZ2UiLCJvbmx5UGVyY2VudERpc3BsYXkiLCJoZWlnaHREaXNwbGF5IiwicmV2ZXJ0IiwidGV4dERlY29yYXRpb24iLCJjYWxsUGx1Z2luIiwiX3NldFVybElucHV0Iiwic3JjIiwiZmlsZVRhZ3MiLCJzZWxlY3QiLCJvbk1vZGlmeU1vZGUiLCJjYWxsX2NvbnRyb2xsZXJfcmVzaXplIiwiZGVzdHJveSIsImltYWdlRWwiLCJpbWFnZUNvbnRhaW5lciIsImdldFBhcmVudEVsZW1lbnQiLCJpc01lZGlhQ29tcG9uZW50IiwiZGF0YUluZGV4IiwiZm9jdXNFbCIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJuZXh0RWxlbWVudFNpYmxpbmciLCJlbXB0eURpdiIsInJlbW92ZUl0ZW1BbGxQYXJlbnRzIiwiZm9jdXNFZGdlIiwiZGVsZXRlSW5mbyIsImZ1bmN0aW9ucyIsIm9uSW1hZ2VVcGxvYWQiLCJ0YWJOYW1lIiwidGFiQ29udGVudCIsInRhYkxpbmtzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImltYWdlUGx1Z2luIiwidXBkYXRlX2ltYWdlIiwiZmlsZXMiLCJzdWJtaXRBY3Rpb24iLCJvblJlbmRlcl9pbWdVcmwiLCJlcnJvciIsImZpbGVMaXN0IiwiZmlsZVNpemUiLCJ0eXBlIiwibGltaXRTaXplIiwiaW1hZ2VVcGxvYWRTaXplTGltaXQiLCJpbmZvU2l6ZSIsImltYWdlc0luZm8iLCJvbkltYWdlVXBsb2FkRXJyb3IiLCJub3RpY2VPcGVuIiwiaW5mbyIsImlucHV0V2lkdGgiLCJpbnB1dEhlaWdodCIsImlzVXBkYXRlIiwib25JbWFnZVVwbG9hZEJlZm9yZSIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJyZWdpc3RlciIsInVwbG9hZCIsInJlc3BvbnNlIiwiaW1hZ2VVcGxvYWRVcmwiLCJmaWxlc0xlbiIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJpbWFnZVVwbG9hZEhlYWRlciIsImNhbGxCYWNrX2ltZ1VwbG9hZCIsInNldHVwX3JlYWRlciIsImltYWdlVXBsb2FkSGFuZGxlciIsInVwZGF0ZV9zcmMiLCJjcmVhdGVfaW1hZ2UiLCJ3RmlsZVJlYWRlciIsIkZpbGVSZWFkZXIiLCJmaWxlc1N0YWNrIiwicmVhZGVyIiwib25sb2FkIiwidXBkYXRlRWxlbWVudCIsIm9uUmVuZGVyX2ltZ0Jhc2U2NCIsInJlYWRBc0RhdGFVUkwiLCJ1cGRhdGVNZXRob2QiLCJjcmVhdGVNZXRob2QiLCJwb3AiLCJvblJlbmRlcl9saW5rIiwiaW1nVGFnIiwieHkiLCJfbW9kdWxlX3NldElucHV0U2l6ZSIsIl9tb2R1bGVfc2V0UmF0aW8iLCJjaGVja0ZpbGVJbmZvIiwibW9kaWZ5SGFuZGxlciIsIm9wZW5Nb2RpZnkiLCJmb3JtYXQiLCJnZXRGb3JtYXRFbGVtZW50IiwidGV4dEFsaWduIiwiZmxvYXQiLCJjaGVja0luZm8iLCJyZXNldEZpbGVJbmZvIiwicmVzZXRJbmZvIiwiX3Jlc2l6ZV9wbHVnaW4iLCJvSW1nIiwiY292ZXIiLCJzZXRfY292ZXIiLCJjb250YWluZXIiLCJzZXRfY29udGFpbmVyIiwiY3JlYXRlX2NhcHRpb24iLCJhcHBseVNpemUiLCJzZXRBbGlnbiIsIl9pbWFnZV9jcmVhdGVfb25sb2FkIiwiaW5zZXJ0Q29tcG9uZW50Iiwic2V0SW5mbyIsIm1lZGlhQXV0b1NlbGVjdCIsInNlbGVjdENvbXBvbmVudCIsImxpbmUiLCJhcHBlbmRGb3JtYXRUYWciLCJvcGVuQ29udHJvbGxlciIsIm5vdEhpc3RvcnlQdXNoIiwiY2hhbmdlU2l6ZSIsImlzTmV3Q29udGFpbmVyIiwiY2xvbmVOb2RlIiwieCIsImlzTnVtYmVyIiwieSIsIm1vZGlmaWVkQ2FwdGlvbiIsImluc2VydEJlZm9yZSIsImltYWdlRWxlbWVudCIsIm5ld0VsIiwicmVtb3ZlQ2hpbGQiLCJleGlzdEVsZW1lbnQiLCJpc1JhbmdlRm9ybWF0RWxlbWVudCIsImlzRm9ybWF0RWxlbWVudCIsInJlbW92ZUVtcHR5Tm9kZSIsImh0bWxSZW1vdmVXaGl0ZVNwYWNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVwbGFjZUNoaWxkIiwiX3JvdGF0ZVZlcnRpY2FsIiwicmVzZXRUcmFuc2Zvcm0iLCJzZXRUcmFuc2Zvcm1TaXplIiwiZ2V0TnVtYmVyIiwic2V0VGltZW91dCIsInVzZXJTaXplIiwibm90T3BlbiIsIl9tb2R1bGVfc2V0TW9kaWZ5SW5wdXRTaXplIiwic2V0UGVyY2VudFNpemUiLCJzZXRTaXplIiwic2V0QXV0b1NpemUiLCJfbW9kdWxlX3NpemVSZXZlcnQiLCJub3RSZXNldFBlcmNlbnRhZ2UiLCJkaXJlY3Rpb24iLCJvbmx5VyIsImNhbmNlbFBlcmNlbnRBdHRyIiwiX21vZHVsZV9zYXZlQ3VycmVudFNpemUiLCJtYXhXaWR0aCIsInNldE9yaWdpblNpemUiLCJvcmlnaW5TaXplIiwiaGVpZ2h0UGVyY2VudGFnZSIsInNldENhcHRpb25Qb3NpdGlvbiIsIm1hcmdpbiIsIm1pbldpZHRoIiwiY29udGV4dFZpZGVvIiwiX3ZpZGVvU2l6ZVVuaXQiLCJfeW91dHViZVF1ZXJ5IiwieW91dHViZVF1ZXJ5IiwiX3ZpZGVvUmF0aW8iLCJ2aWRlb1JhdGlvIiwiX2RlZmF1bHRSYXRpbyIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsInZpZGVvUmVzaXppbmciLCJ2aWRlb0hlaWdodFNob3ciLCJ2aWRlb1JvdGF0aW9uIiwidmlkZW9TaXplT25seVBlcmNlbnRhZ2UiLCJ2aWRlb19kaWFsb2ciLCJ2aWRlb0lucHV0RmlsZSIsInZpZGVvVXJsRmlsZSIsInZpZGVvUmF0aW9PcHRpb24iLCJzZXRWaWRlb1JhdGlvIiwidmlkZW9GaWxlSW5wdXQiLCJ2aWRlb0FjY2VwdCIsInZpZGVvTXVsdGlwbGVGaWxlIiwidmlkZW9VcmxJbnB1dCIsInJhdGlvTGlzdCIsInZpZGVvUmF0aW9MaXN0IiwicmF0aW9EaXNwbGF5IiwidmlkZW9SYXRpb1Nob3ciLCJvbmx5V2lkdGhEaXNwbGF5IiwiX3NldFRhZ0F0dHJzIiwiYXR0cnMiLCJ2aWRlb1RhZ0F0dHJzIiwiaGFzT3duIiwiY3JlYXRlVmlkZW9UYWciLCJ2aWRlb1RhZyIsIl9zZXRJZnJhbWVBdHRycyIsImZyYW1lQm9yZGVyIiwiYWxsb3dGdWxsc2NyZWVuIiwidmlkZW9JZnJhbWVBdHRycyIsImNyZWF0ZUlmcmFtZVRhZyIsImlmcmFtZVRhZyIsImZyYW1lIiwib25WaWRlb1VwbG9hZCIsImRpc2FibGVkIiwic2V0VmlkZW9SYXRpb1NlbGVjdCIsInNlbGVjdGVkSW5kZXgiLCJwbGFjZWhvbGRlciIsInZpZGVvUGx1Z2luIiwic2V0dXBfdXJsIiwidmlkZW9VcGxvYWRTaXplTGltaXQiLCJ2aWRlb3NJbmZvIiwib25WaWRlb1VwbG9hZEVycm9yIiwib25WaWRlb1VwbG9hZEJlZm9yZSIsInZpZGVvVXBsb2FkVXJsIiwidmlkZW9VcGxvYWRIZWFkZXIiLCJjYWxsQmFja192aWRlb1VwbG9hZCIsInZpZGVvVXBsb2FkSGFuZGxlciIsImNyZWF0ZV92aWRlbyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInNwbGl0VXJsIiwiZW5kc1dpdGgiLCJvRnJhbWUiLCJpc1lvdXR1YmUiLCJpc1ZpbWVvIiwibmV3VGFnIiwiaW5wdXRVcGRhdGUiLCJfbW9kdWxlX2dldFNpemVYIiwiX21vZHVsZV9nZXRTaXplWSIsImlzUGVyY2VudCIsImNoYW5nZWQiLCJfdXBkYXRlX3ZpZGVvQ292ZXIiLCJwcmV2RnJhbWUiLCJmaWdjYXB0aW9uIiwiY29uc29sZSIsIndhcm4iLCJyYXRpb1NlbGVjdGVkIiwicmF0aW9PcHRpb25zIiwic2VsZWN0ZWQiLCJvbmx5SCIsInBhZGRpbmdCb3R0b20iLCJkYXRhU2l6ZSIsImNvbnRleHRBdWRpbyIsInRhcmdldFNlbGVjdCIsImF1ZGlvV2lkdGgiLCJhdWRpb0hlaWdodCIsImF1ZGlvX2RpYWxvZyIsImF1ZGlvSW5wdXRGaWxlIiwiYXVkaW9VcmxGaWxlIiwiYXVkaW9fY29udHJvbGxlciIsInNldENvbnRyb2xsZXIiLCJvbkNsaWNrX2NvbnRyb2xsZXIiLCJhdWRpb0ZpbGVJbnB1dCIsImF1ZGlvQWNjZXB0IiwiYXVkaW9NdWx0aXBsZUZpbGUiLCJhdWRpb1VybElucHV0IiwiX2NyZWF0ZUF1ZGlvVGFnIiwib0F1ZGlvIiwiY3NzVGV4dCIsImF1ZGlvVGFnQXR0cnMiLCJpc0NvbXBvbmVudCIsIm9uQXVkaW9VcGxvYWQiLCJ1cGRhdGVDb3ZlciIsInNldHVwVXJsIiwiYXVkaW9VcGxvYWRTaXplTGltaXQiLCJhdWRpb3NJbmZvIiwib25BdWRpb1VwbG9hZEVycm9yIiwib25BdWRpb1VwbG9hZEJlZm9yZSIsImF1ZGlvVXBsb2FkVXJsIiwiYXVkaW9VcGxvYWRIZWFkZXIiLCJjYWxsQmFja191cGxvYWQiLCJhdWRpb1VwbG9hZEhhbmRsZXIiLCJjcmVhdGVfYXVkaW8iLCJwcmV2RWxlbWVudCIsInNlbGVjdGlvblRhZyIsIm9uQ29udHJvbGxlck9mZiIsInByZXZpZXdFbGVtZW50IiwiZm9udFNpemVFbGVtZW50IiwiZGVmYXVsdEZvbnRTaXplIiwiX21hdGhFeHAiLCJtYXRoX2RpYWxvZyIsIl9yZW5kZXJNYXRoRXhwIiwibWF0aF9jb250cm9sbGVyIiwic2V0Q29udHJvbGxlcl9NYXRoQnV0dG9uIiwibWF0aENvbnRyb2xsZXIiLCJvbkNsaWNrX21hdGhDb250cm9sbGVyIiwibWF0aEZvbnRTaXplIiwiZiIsIm1hdGhfYnRuIiwibWFuYWdlZFRhZ3MiLCJtZXRob2QiLCJrYXRleCIsImRvbSIsImNyZWF0ZVJhbmdlIiwiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiwiX3JlbmRlcmVyIiwiSFRNTERlY29kZXIiLCJleHAiLCJyZW5kZXJUb1N0cmluZyIsImNvbnRleHRNYXRoIiwibWF0aEV4cCIsImthdGV4RWwiLCJIVE1MRW5jb2RlciIsImNvbnRhaW5lckVsIiwiZW1wdHkiLCJjcmVhdGVUZXh0Tm9kZSIsInplcm9XaWR0aFNwYWNlIiwibmV4dFNpYmxpbmciLCJtYXRoVGFnIiwibWF0aEJ0biIsImJsb2NrcXVvdGUiLCJ0YXJnZXRCdXR0b24iLCJhY3Rpb24iLCJjdXJyZW50QmxvY2txdW90ZSIsImRldGFjaFJhbmdlRm9ybWF0RWxlbWVudCIsImFwcGx5UmFuZ2VGb3JtYXRFbGVtZW50IiwiX2FsaWduTGlzdCIsImN1cnJlbnRBbGlnbiIsImRlZmF1bHREaXIiLCJqdXN0aWZ5IiwiYWxpZ25fanVzdGlmeSIsImFsaWduX2xlZnQiLCJhbGlnbl9yaWdodCIsImFsaWduX2NlbnRlciIsImxpc3RVbCIsImxlZnREaXIiLCJsZWZ0TWVudSIsInJpZ2h0TWVudSIsImFsaWduQ29udGV4dCIsImZpcnN0RWxlbWVudENoaWxkIiwiY2hhbmdlRWxlbWVudCIsImFsaWduTGlzdCIsInNlbGVjdGVkRm9ybXN0cyIsInNldFN0eWxlIiwiZWZmZWN0Tm9kZSIsInRhcmdldFRleHQiLCJ0YXJnZXRUb29sdGlwIiwiX2ZvbnRMaXN0IiwiY3VycmVudEZvbnQiLCJmb250TGlzdCIsInRvb2x0aXAiLCJmb250RmFtaWx5Iiwic2VsZWN0Rm9udCIsImNoYW5nZVR4dCIsImhhc0ZvY3VzIiwiZm9udENvbnRleHQiLCJfc2l6ZUxpc3QiLCJjdXJyZW50U2l6ZSIsInNpemVMaXN0IiwidW5pdCIsImZvbnRTaXplVW5pdCIsImZvbnRTaXplQ29udGV4dCIsImN1cnJlbnRIUiIsImhvcml6b250YWxSdWxlUGljayIsImFwcGVuZEhyIiwib0hyIiwib05vZGUiLCJfbGlzdCIsImN1cnJlbnRMaXN0IiwiYnVsbGV0cyIsImxpc3RfYnVsbGV0cyIsIm51bWJlciIsImxpc3RfbnVtYmVyIiwiYnV0dG9uIiwiaWNvbiIsImlzTGlzdCIsImVkaXRMaXN0Iiwic2VsZWN0ZWRDZWxscyIsImRldGFjaCIsInJhbmdlIiwiZ2V0UmFuZ2UiLCJnZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyIsImdldFJhbmdlX2FkZExpbmUiLCJzb3J0QnlEZXB0aCIsImZpcnN0U2VsIiwibGFzdFNlbCIsInRvcEVsIiwiaXNMaXN0Q2VsbCIsImJvdHRvbUVsIiwib3JpZ2luUmFuZ2UiLCJzdGFydENvbnRhaW5lciIsInNvIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbyIsImVuZE9mZnNldCIsImlzUmVtb3ZlIiwiZ2V0UmFuZ2VGb3JtYXRFbGVtZW50IiwidG9VcHBlckNhc2UiLCJ0b3BFbFBhcmVudCIsImJvdHRvbUVsUGFyZW50IiwibWVyZ2VUb3AiLCJtZXJnZUJvdHRvbSIsImZpcnN0TGlzdCIsImxhc3RMaXN0IiwidG9wTnVtYmVyIiwiYm90dG9tTnVtYmVyIiwicGFzc0NvbXBvbmVudCIsIm5ld0NlbGwiLCJmVGFnIiwiaXNDZWxsIiwibmV4dCIsIm9yaWdpblBhcmVudCIsIm5leHRQYXJlbnQiLCJwYXJlbnRUYWciLCJzaWJsaW5nVGFnIiwicmFuZ2VUYWciLCJfaXNJZ25vcmVOb2RlQ2hhbmdlIiwiY29weUZvcm1hdEF0dHJpYnV0ZXMiLCJpc0hSIiwib3V0ZXJIVE1MIiwiZkNoaWxkcmVuIiwiZ2V0RWxlbWVudERlcHRoIiwiaiIsImN1cnJlbnRGb3JtYXQiLCJyYW5nZUFyciIsInRlbXBMaXN0IiwiX2RldGFjaE5lc3RlZCIsImNlbGxzIiwiZmlyc3QiLCJsYXN0Iiwib3JpZ2luTGlzdCIsInNpYmxpbmciLCJjTGVuIiwibmV3TGlzdCIsImdldFBvc2l0aW9uSW5kZXgiLCJtZXJnZVNhbWVUYWdzIiwiZWRnZSIsImdldEVkZ2VDaGlsZE5vZGVzIiwiY2MiLCJlZGl0SW5zaWRlTGlzdCIsImNlbGxzTGVuIiwiZWwiLCJsYXN0Q2VsbCIsImlubmVyTGlzdCIsInByZXYiLCJub2RlUGF0aCIsInNsIiwiX2luc2llZExpc3QiLCJnZXROb2RlRnJvbVBhdGgiLCJpbnNlcnRQcmV2IiwiZ2V0Tm9kZVBhdGgiLCJmaXJzdENoaWxkIiwic2xQYXRoIiwibGFzdEVsZW1lbnRDaGlsZCIsIm1lcmdlTmVzdGVkVGFncyIsImNvbnRleHRUYWJsZSIsIl90ZEVsZW1lbnQiLCJfdHJFbGVtZW50IiwiX3RyRWxlbWVudHMiLCJfdGFibGVYWSIsIl9tYXhXaWR0aCIsIl9maXhlZENvbHVtbiIsIl9ydGwiLCJjZWxsQ29udHJvbGxlclRvcCIsInRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiIsInJlc2l6ZVRleHQiLCJoZWFkZXJCdXR0b24iLCJtZXJnZUJ1dHRvbiIsInNwbGl0QnV0dG9uIiwic3BsaXRNZW51IiwibWF4VGV4dCIsIm1pblRleHQiLCJfcGh5c2ljYWxfY2VsbENudCIsIl9sb2dpY2FsX2NlbGxDbnQiLCJfcm93Q250IiwiX3Jvd0luZGV4IiwiX3BoeXNpY2FsX2NlbGxJbmRleCIsIl9sb2dpY2FsX2NlbGxJbmRleCIsIl9jdXJyZW50X2NvbFNwYW4iLCJfY3VycmVudF9yb3dTcGFuIiwiZXhwYW5zaW9uIiwicmVkdWN0aW9uIiwidGFibGVQaWNrZXIiLCJ0YWJsZUhpZ2hsaWdodCIsInRhYmxlVW5IaWdobGlnaHQiLCJ0YWJsZURpc3BsYXkiLCJ0YWJsZUNvbnRyb2xsZXIiLCJzZXRDb250cm9sbGVyX3RhYmxlIiwicmVzaXplQnV0dG9uIiwiY29sdW1uRml4ZWRCdXR0b24iLCJyZXNpemVEaXYiLCJzZXRDb250cm9sbGVyX3RhYmxlRWRpdG9yIiwiaW5zZXJ0Um93QWJvdmVCdXR0b24iLCJpbnNlcnRSb3dCZWxvd0J1dHRvbiIsIm9uTW91c2VNb3ZlX3RhYmxlUGlja2VyIiwiYXBwZW5kVGFibGUiLCJvbkNsaWNrX3RhYmxlQ29udHJvbGxlciIsInRhYmxlUmVzaXplIiwiZml4ZWRfY29sdW1uX3dpZHRoIiwidGFibGVfaGVhZGVyIiwiaW5zZXJ0X3Jvd19hYm92ZSIsImluc2VydF9yb3dfYmVsb3ciLCJkZWxldGVfcm93IiwibWVyZ2VfY2VsbCIsImluc2VydF9jb2x1bW5fbGVmdCIsImluc2VydF9jb2x1bW5fcmlnaHQiLCJkZWxldGVfY29sdW1uIiwic3BsaXRfY2VsbCIsIm9UYWJsZSIsImNyZWF0ZUNlbGxzIiwidGFibGVIVE1MIiwiZmlyc3RUZCIsInJlc2V0X3RhYmxlX3BpY2tlciIsImNudCIsInJldHVybkVsZW1lbnQiLCJjZWxsIiwiY2VsbHNIVE1MIiwiY2VpbCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiaGlnaGxpZ2h0IiwidW5IaWdobGlnaHQiLCJ0YWJsZVBsdWdpbiIsIl9yZW1vdmVFdmVudHMiLCJfc2VsZWN0ZWRUYWJsZSIsIl90b2dnbGVFZGl0b3IiLCJfc2hpZnQiLCJfc2VsZWN0ZWRDZWxscyIsIl9yZWYiLCJfZml4ZWRDZWxsIiwiX3NlbGVjdGVkQ2VsbCIsIl9maXhlZENlbGxOYW1lIiwiY2FsbF9jb250cm9sbGVyX3RhYmxlRWRpdCIsInRkRWxlbWVudCIsImlzQ29sbGFwc2VkIiwidGFibGVFbGVtZW50IiwidGFibGVMYXlvdXQiLCJzZXRUYWJsZVN0eWxlIiwic2V0UG9zaXRpb25Db250cm9sbGVyVG9wIiwic2V0UG9zaXRpb25Db250cm9sbGVyRGl2IiwicmVzZXQiLCJzZXRDZWxsSW5mbyIsInJvd3MiLCJjZWxsSW5kZXgiLCJjZWxsQ250IiwiY29sU3BhbiIsInJvd0luZGV4Iiwicm93U3BhbiIsInJvd1NwYW5BcnIiLCJzcGFuSW5kZXgiLCJjcyIsInJzIiwibG9nY2FsSW5kZXgiLCJhcnIiLCJyb3ciLCJjb25jYXQiLCJzb3J0IiwiYiIsImVkaXRUYWJsZSIsImlzUm93IiwidGFibGVBdHRyIiwicG9zaXRpb25DZWxsIiwiZWRpdFJvdyIsInJlbW92ZUNlbGxzIiwiZmlyc3RSb3ciLCJyaWdodENlbGwiLCJlZGl0Q2VsbCIsInBvc2l0aW9uUmVzZXRFbGVtZW50IiwidXAiLCJvcmlnaW5Sb3dJbmRleCIsInNpZ24iLCJzcGFuQ2VsbHMiLCJzcGFuQ2VsbCIsInNoaWZ0IiwiaW5zZXJ0Um93IiwicGFzc0NlbGwiLCJyZW1vdmVDZWxsIiwicmVtb3ZlU3BhbkFyciIsImluc2VydEluZGV4IiwiYXBwbHlTcGFuIiwiY2VsbENvbFNwYW4iLCJyZW1vdmVJbmRleCIsImdldE92ZXJsYXBSYW5nZUF0SW5kZXgiLCJyZW1vdmVGaXJzdCIsInJlbW92ZUVuZCIsInJMZW4iLCJnZXRBcnJheUluZGV4Iiwicm93U3BhbkNlbGwiLCJfY2xvc2VTcGxpdE1lbnUiLCJvcGVuU3BsaXRNZW51IiwicmVtb3ZlRG9jRXZlbnQiLCJhZGREb2NFdmVudCIsInZlcnRpY2FsIiwiY3VycmVudENlbGwiLCJjdXJyZW50Um93IiwiY3VycmVudENvbFNwYW4iLCJmbG9vciIsImN1cnJlbnRSb3dTcGFuIiwibmV3Um93U3BhbiIsIm5leHRSb3dJbmRleCIsIm5leHRSb3ciLCJuZXh0Q2VsbHMiLCJuZXdSb3ciLCJwaHlzaWNhbEluZGV4IiwicmVmIiwibWVyZ2VDZWxsIiwiZW1wdHlSb3dGaXJzdCIsImVtcHR5Um93TGFzdCIsImNlIiwicmUiLCJtZXJnZUhUTUwiLCJjaCIsIm9ubHlaZXJvV2lkdGhTcGFjZSIsInJvd0luZGV4Rmlyc3QiLCJyb3dJbmRleExhc3QiLCJyZW1vdmVSb3dzIiwic2V0QWN0aXZlQnV0dG9uIiwidG9nZ2xlSGVhZGVyIiwic3R5bGVzIiwic3BhbiIsInNpemVJY29uIiwiZml4ZWRDZWxsIiwic2VsZWN0ZWRDZWxsIiwiX2JpbmRPblNlbGVjdCIsIl9iaW5kT2ZmU2VsZWN0IiwiX2JpbmRPZmZTaGlmdCIsImVuYWJsZWQiLCJfb2ZmQ2VsbE11bHRpU2VsZWN0IiwiX2luaXRCaW5kIiwiX3dkIiwiX29uQ2VsbE11bHRpU2VsZWN0IiwiX2FudGlCbHVyIiwiX3NldE11bHRpQ2VsbHMiLCJzdGFydENlbGwiLCJlbmRDZWxsIiwiZmluZFNlbGVjdGVkQ2VsbCIsIl9pIiwibmV3Q3MiLCJuZXdDZSIsIm5ld1JzIiwibmV3UmUiLCJvblRhYmxlQ2VsbE11bHRpU2VsZWN0IiwiZm9ybWF0QmxvY2siLCJfZm9ybWF0TGlzdCIsInBpY2tVcCIsImxhbmdfdG9vbGJhciIsImRlZmF1bHRGb3JtYXRzIiwiZm9ybWF0TGlzdCIsImNsYXNzIiwiZm9ybWF0VGl0bGUiLCJmb3JtYXRDb250ZXh0IiwicmFuZ2VFbGVtZW50IiwiZmlyc3RQYXRoIiwibGFzdFBhdGgiLCJybGlzdCIsImRldGFjaExpc3QiLCJtb2RpZmllZEZvcm1zdHMiLCJmcmVlRWxlbWVudCIsImJlZm9yZSIsImlubmVyIiwiaXNDb21wIiwiaXNTYW1lQXR0cmlidXRlcyIsIm5ld0Zvcm1hdCIsImxpbmVIZWlnaHRzIiwibGluZUhlaWdodENvbnRleHQiLCJfY2xhc3NMaXN0IiwibWVudUxhbmciLCJkZWZhdWx0TGlzdCIsIl9jbGFzcyIsInBhcmFncmFwaFN0eWxlcyIsImRlZmF1bHRTdHlsZSIsInBhcmFncmFwaExpc3QiLCJfc3R5bGVMaXN0Iiwic3R5bGVMaXN0IiwidGV4dFN0eWxlcyIsInN0eWxlQnV0dG9uTGlzdCIsInNlbGVjdGlvbk5vZGUiLCJidG4iLCJjaGVja1N0eWxlcyIsImNsYXNzZXMiLCJjbGFzc0xpc3QiLCJyZW1vdmVOb2RlcyIsImltYWdlR2FsbGVyeUhlYWRlciIsImRyYXdJdGVtcyIsInNldEltYWdlIiwic3JjTmFtZSIsImNvZGVfdmlldyIsImxpbmVfaGVpZ2h0IiwicGFyYWdyYXBoX3N0eWxlIiwidGV4dF9zdHlsZSIsImFycm93X2Rvd24iLCJmb250X2NvbG9yIiwiaGlnaGxpZ2h0X2NvbG9yIiwiaG9yaXpvbnRhbF9ydWxlIiwic2hvd19ibG9ja3MiLCJtb2RpZnkiLCJhdXRvX3NpemUiLCJyb3RhdGVfbGVmdCIsInJvdGF0ZV9yaWdodCIsIm1pcnJvcl9ob3Jpem9udGFsIiwibWlycm9yX3ZlcnRpY2FsIiwibGluZV9icmVhayIsIm1vcmVfdGV4dCIsIm1vcmVfcGFyYWdyYXBoIiwibW9yZV9wbHVzIiwibW9yZV9ob3Jpem9udGFsIiwibW9yZV92ZXJ0aWNhbCIsImF0dGFjaG1lbnQiLCJtYWdpY19zdGljayIsImVtcHR5X2ZpbGUiLCJpc0lFIiwiaXNJRV9FZGdlIiwiaXNPU1hfSU9TIiwiX3Byb3BlcnRpZXNJbml0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXBwVmVyc2lvbiIsInBsYXRmb3JtIiwiX2FsbG93ZWRFbXB0eU5vZGVMaXN0IiwiX0hUTUxDb252ZXJ0b3IiLCJjb250ZW50cyIsIiciLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ6ZXJvV2lkdGhSZWdFeHAiLCJvbmx5WmVyb1dpZHRoUmVnRXhwIiwiQWN0aXZlWE9iamVjdCIsIlhNTEh0dHBSZXF1ZXN0IiwiZTEiLCJlbGVtZW50TmFtZSIsIm9iaiIsIl9oYXNPd24iLCJnZXRJbmNsdWRlUGF0aCIsIm5hbWVBcnJheSIsImV4dGVuc2lvbiIsInBhdGgiLCJwYXRoTGlzdCIsImZpbGVOYW1lIiwicmVnRXhwIiwiZXh0UmVnRXhwIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJlZGl0b3JUYWciLCJnZXRQYWdlU3R5bGUiLCJkb2MiLCJzaGVldHMiLCJzdHlsZVNoZWV0cyIsInJ1bGVzIiwiY3NzUnVsZXMiLCJnZXRJZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsIndEb2N1bWVudCIsImNvbnRlbnRXaW5kb3ciLCJjb250ZW50RG9jdW1lbnQiLCJnZXRBdHRyaWJ1dGVzVG9TdHJpbmciLCJleGNlcHRBdHRycyIsImF0dHJpYnV0ZXMiLCJhdHRyU3RyaW5nIiwiZ2V0Qnl0ZUxlbmd0aCIsImVuY29kZXIiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjciIsImNsIiwidW5lc2NhcGUiLCJUZXh0RW5jb2RlciIsImVuY29kZSIsImlzTm9uRWRpdGFibGUiLCJpc1RleHRTdHlsZUVsZW1lbnQiLCJpc0Nsb3N1cmVSYW5nZUZvcm1hdEVsZW1lbnQiLCJpc0ZyZWVGb3JtYXRFbGVtZW50IiwiaXNDbG9zdXJlRnJlZUZvcm1hdEVsZW1lbnQiLCJpc1VuZWRpdGFibGVDb21wb25lbnQiLCJpc05vdENoZWNraW5nTm9kZSIsInZhbGlkYXRpb24iLCJnZXRGcmVlRm9ybWF0RWxlbWVudCIsImdldENsb3N1cmVGcmVlRm9ybWF0RWxlbWVudCIsImNvcHlUYWdBdHRyaWJ1dGVzIiwib3JpZ2luRWwiLCJjb3B5RWwiLCJnZXRBcnJheUl0ZW0iLCJhcnJheSIsIm11bHRpIiwiaWR4IiwibmV4dElkeCIsInByZXZJZHgiLCJfbmV3T2Zmc2V0cyIsImZpbmRzIiwidGVtcFRleHQiLCJwcmV2aW91cyIsInJldmVyc2UiLCJvZmZzZXRzIiwibm9kZXMiLCJzdHlsZV9hIiwic3R5bGVfYiIsImNvbXBTdHlsZSIsImNsYXNzX2EiLCJjbGFzc19iIiwicmVnIiwiY29tcENsYXNzIiwiaXNFbXB0eUxpbmUiLCJpc1RhYmxlIiwiaXNCcmVhayIsImlzTWVkaWEiLCJtYXhEZWMiLCJ0b0ZpeGVkIiwicmVjdXJzaW9uRnVuYyIsImdldExpc3RDaGlsZE5vZGVzIiwiZGVwdGgiLCJjb21wYXJlRWxlbWVudHMiLCJhTm9kZSIsImJOb2RlIiwiYW5jZXN0b3IiLCJhSW5kZXgiLCJiSW5kZXgiLCJxdWVyeSIsImNoZWNrIiwiYXR0ciIsImNoaWxkTGlzdCIsImxhc3RDaGlsZCIsImdldE9mZnNldCIsInd5c2l3eWdGcmFtZSIsIm9mZnNldEVsZW1lbnQiLCJwYXJlbnRFbGVtZW50Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsVG9wIiwiYVN0YXJ0IiwiYUVuZCIsImJTdGFydCIsImJFbmQiLCJvdmVybGFwIiwidHh0IiwibmV3RWxlbWVudCIsInN0eWxlTmFtZSIsInNldERpc2FibGVkQnV0dG9ucyIsImJ1dHRvbkxpc3QiLCJzdG9wUGFyZW50IiwicGFyZW50IiwiZGV0YWNoTmVzdGVkTGlzdCIsImJhc2VOb2RlIiwiYWxsIiwick5vZGUiLCJfZGVsZXRlTmVzdGVkTGlzdCIsImNOb2RlcyIsInJDaGlsZHJlbiIsImJhc2VQYXJlbnQiLCJsaVNpYmxpbmciLCJsaVBhcmVudCIsImNoaWxkIiwic3BsaXRFbGVtZW50Iiwib2Zmc2V0IiwiYnAiLCJzcGxpdFRleHQiLCJhZnRlciIsImRlcHRoRWwiLCJwRWxlbWVudCIsIm5vZGVQYXRoQXJyYXkiLCJvbmx5VGV4dCIsImluc3QiLCJub2RlUGF0aExlbiIsImFwcGx5IiwiTnVtYmVyIiwidmFsdWVPZiIsImRlcHRoSW5kZXgiLCJjRGVwdGgiLCJzcGxpY2VEZXB0aCIsImNoaWxkcyIsImNoaWxkTGVuZ3RoIiwibkxlbiIsImFkZE9mZnNldCIsInRleHRPZmZzZXQiLCJ0ZW1wTCIsIm5vdFJlbW92ZU5vZGUiLCJfbm90VGV4dE5vZGUiLCJkZXMiLCJfaXNNYWludGFpbmVkTm9kZSIsIl9pc1NpemVOb2RlIiwiX2Rpc2FsbG93ZWRUYWdzIiwiY3JlYXRlVGFnc1doaXRlbGlzdCIsIl9jb25zaXN0ZW5jeUNoZWNrT2ZIVE1MIiwiZG9jdW1lbnRGcmFnbWVudCIsImh0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCIsInJlbW92ZVRhZ3MiLCJlbXB0eVRhZ3MiLCJ3cm9uZ0xpc3QiLCJ3aXRob3V0Rm9ybWF0Q2VsbHMiLCJ3cm9uZ1RhZ3MiLCJucnRhZyIsImZlbCIsImNoZWNrVGFncyIsInRwIiwiX3NldERlZmF1bHRPcHRpb25TdHlsZSIsIm9wdGlvblN0eWxlIiwibWluSGVpZ2h0IiwiZWRpdG9yIiwic3R5bGVBcnIiLCJfc2V0SWZyYW1lRG9jdW1lbnQiLCJoZWFkIiwiX3NldElmcmFtZUNzc1RhZ3MiLCJfZWRpdGFibGVDbGFzcyIsImxpbmtOYW1lcyIsImlmcmFtZUNTU0ZpbGVOYW1lIiwid1JlZ0V4cCIsInRhZ1N0cmluZyIsIkNTU0ZpbGVOYW1lIiwic3R5bGVUYWciLCJfaW5pdE9wdGlvbnMiLCJ0b3BfZGl2IiwidG9vbF9iYXIiLCJfY3JlYXRlVG9vbEJhciIsInBsdWdpbkNhbGxCdXR0b25zIiwiX2NoZWNrS2F0ZXhNYXRoIiwiYXJyb3ciLCJzdGlja3lfZHVtbXkiLCJlZGl0b3JfZGl2IiwiaW5pdEVsZW1lbnRzIiwiX2luaXRFbGVtZW50cyIsImJvdHRvbUJhciIsInd5c2l3eWdfZGl2IiwicGxhY2Vob2xkZXJfc3BhbiIsInRleHRhcmVhIiwicmVzaXppbmdfYmFyIiwicmVzaXppbmdCYXIiLCJuYXZpZ2F0aW9uIiwiY2hhcl93cmFwcGVyIiwiY2hhcldyYXBwZXIiLCJjaGFyX2NvdW50ZXIiLCJjaGFyQ291bnRlciIsImxvYWRpbmdfYm94IiwibGluZV9icmVha2VyIiwibGluZV9icmVha2VyX3QiLCJsaW5lX2JyZWFrZXJfYiIsInJlc2l6ZV9iYWNrIiwidG9vbGJhckNvbnRhaW5lciIsIl9jaGVja0NvZGVNaXJyb3IiLCJjb25zdHJ1Y3RlZCIsIl90b3AiLCJfcmVsYXRpdmUiLCJfdG9vbEJhciIsIl9tZW51VHJheSIsIl9lZGl0b3JBcmVhIiwiX3d5c2l3eWdBcmVhIiwiX2NvZGVBcmVhIiwiX3BsYWNlaG9sZGVyIiwiX3Jlc2l6aW5nQmFyIiwiX25hdmlnYXRpb24iLCJfY2hhcldyYXBwZXIiLCJfY2hhckNvdW50ZXIiLCJfbGluZUJyZWFrZXIiLCJfbGluZUJyZWFrZXJfdCIsIl9saW5lQnJlYWtlcl9iIiwiX3Jlc2l6ZUJhY2siLCJfc3RpY2t5RHVtbXkiLCJfYXJyb3ciLCJfcmVzcG9uc2l2ZUJ1dHRvbnMiLCJyZXNwb25zaXZlQnV0dG9ucyIsImNvZGVNaXJyb3IiLCJjbU9wdGlvbnMiLCJodG1sTW9kZSIsImxpbmVOdW1iZXJzIiwibGluZVdyYXBwaW5nIiwicmVkdWNlIiwidmlld3BvcnRNYXJnaW4iLCJJbmZpbml0eSIsImNtIiwiZnJvbVRleHRBcmVhIiwid3JhcHBlciIsImNvZGVNaXJyb3JFZGl0b3IiLCJrYXRleE9wdGlvbnMiLCJ0aHJvd09uRXJyb3IiLCJfc2V0T3B0aW9ucyIsIm1lcmdlT3B0aW9ucyIsIm9yaWdpbk9wdGlvbnMiLCJvcmlnaW5FbGVtZW50IiwiZWRpdG9yQXJlYSIsImlzTmV3VG9vbGJhckNvbnRhaW5lciIsImlzTmV3VG9vbGJhciIsInRvcEFyZWEiLCJjYWxsQnV0dG9ucyIsInRvcERpdiIsInRvb2xCYXIiLCJ0b29sQmFyQXJyb3ciLCJfZWRpdG9yU3R5bGVzIiwidG9vbGJhcldpZHRoIiwid3lzaXd5Z0RpdiIsIm92ZXJmbG93IiwiY2hhckNvdW50ZXJMYWJlbCIsImNoYXJMYWJlbCIsIm1heENoYXJDb3VudCIsImNoYXJfbWF4IiwiaW5uZXJUZXh0IiwiX2RlZmF1bHRMYW5nIiwiZGVmYXVsdFRhZyIsInRleHRUYWdzIiwic3ViIiwic3VwIiwiX2RlZmF1bHQiLCJfbmV3IiwiX3RleHRUYWdzTWFwIiwiaGlzdG9yeVN0YWNrRGVsYXlUaW1lIiwiX2RlZmF1bHRUYWdzV2hpdGVsaXN0IiwiX2VkaXRvclRhZ3NXaGl0ZWxpc3QiLCJfc2V0V2hpdGVsaXN0IiwiYWRkVGFnc1doaXRlbGlzdCIsInRhZ3NCbGFja2xpc3QiLCJwYXN0ZVRhZ3NXaGl0ZWxpc3QiLCJwYXN0ZVRhZ3NCbGFja2xpc3QiLCJhdHRyaWJ1dGVzV2hpdGVsaXN0IiwiX3ByaW50Q2xhc3MiLCJzdGlja3lUb29sYmFyIiwidW5kZWZpbmVkIiwiZnVsbFNjcmVlbk9mZnNldCIsImZ1bGxQYWdlIiwicHJldmlld1RlbXBsYXRlIiwicHJpbnRUZW1wbGF0ZSIsInNob3dQYXRoTGFiZWwiLCJjaGFyQ291bnRlclR5cGUiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsInRhYkRpc2FibGUiLCJzaG9ydGN1dHNEaXNhYmxlIiwic2hvcnRjdXRzSGludCIsImNhbGxCYWNrU2F2ZSIsIl9pY29ucyIsIndoaXRlbGlzdCIsImJsYWNrbGlzdCIsIl9kZWZhdWx0QnV0dG9ucyIsImFkZFNoaWZ0IiwiaW5kZW50S2V5IiwiX2NyZWF0ZU1vZHVsZUdyb3VwIiwib0RpdiIsIm9VbCIsIl9jcmVhdGVCdXR0b24iLCJidXR0b25DbGFzcyIsImRhdGFDb21tYW5kIiwiZGF0YURpc3BsYXkiLCJfZGlzYWJsZWQiLCJvTGkiLCJvQnV0dG9uIiwiX3BsdWdpbnMiLCJzZXBhcmF0b3JfdmVydGljYWwiLCJfYnV0dG9uVHJheSIsInN0cmluZ2lmeSIsImRlZmF1bHRCdXR0b25MaXN0IiwicGx1Z2luc1ZhbHVlcyIsIm1vZHVsZUVsZW1lbnQiLCJidXR0b25FbGVtZW50IiwibW9yZUxheWVyIiwiYnV0dG9uR3JvdXBMb29wIiwibW9yZSIsIm1vcmVDb250YWluZXIiLCJtb3JlQ29tbWFuZCIsImJ1dHRvbkdyb3VwIiwibW9yZUJ1dHRvbiIsImRpdiIsIm1hdGNoZWQiLCJjdXN0b20iLCJ1bCIsImxpIiwic3YiLCJlbnRlckRpdiIsInVuc2hpZnQiLCJ0b29sX2NvdmVyIiwiX0NvbnRleHQiLCJjb25zIiwibG9hZGluZyIsImxpbmVCcmVha2VyIiwibGluZUJyZWFrZXJfdCIsImxpbmVCcmVha2VyX2IiLCJyZXNpemVCYWNrZ3JvdW5kIiwidG9vbCIsIm5vdGljZSIsIm5vdGljZV9kaXYiLCJub3RpY2Vfc3BhbiIsIm5vdGljZV9idXR0b24iLCJvbkNsaWNrX2NhbmNlbCIsImluaXRfb3B0aW9ucyIsImlkT3JFbGVtZW50IiwiX2luaXRfb3B0aW9ucyIsInZhbCIsImdldEVsZW1lbnRCeUlkIiwiX0NvbnN0cnVjdG9yIiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwiX3V0aWwiLCJfcGFyc2VyIiwiX3d3IiwiX3NoYWRvd1Jvb3QiLCJfc2hhZG93Um9vdENvbnRyb2xsZXJFdmVudFRhcmdldCIsIl9ub3RpY2UiLCJpbml0UGx1Z2lucyIsIl90YXJnZXRQbHVnaW5zIiwic3VibWVudSIsIl9zdWJtZW51TmFtZSIsIl9iaW5kZWRTdWJtZW51T2ZmIiwiX2JpbmRlZENvbnRhaW5lck9mZiIsInN1Ym1lbnVBY3RpdmVCdXR0b24iLCJjb250YWluZXJBY3RpdmVCdXR0b24iLCJjdXJyZW50Q29udHJvbGxlclRhcmdldCIsImN1cnJlbnRGaWxlQ29tcG9uZW50SW5mbyIsImNvZGVWaWV3RGlzYWJsZWRCdXR0b25zIiwicmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMiLCJfbW9yZUxheWVyQWN0aXZlQnV0dG9uIiwiX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCIsIl9kaXNhbGxvd2VkVGV4dFRhZ3NSZWdFeHAiLCJlZGl0b3JUYWdzV2hpdGVsaXN0UmVnRXhwIiwicGFzdGVUYWdzV2hpdGVsaXN0UmVnRXhwIiwiaXNEaXNhYmxlZCIsIl9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwIiwiX2F0dHJpYnV0ZXNUYWdzV2hpdGVsaXN0IiwiX2JpbmRDb250cm9sbGVyc09mZiIsIl9pc0lubGluZSIsIl9pc0JhbGxvb24iLCJfaXNCYWxsb29uQWx3YXlzIiwiX2lubGluZVRvb2xiYXJBdHRyIiwiaXNTaG93IiwiX25vdEhpZGVUb29sYmFyIiwiX3N0aWNreSIsIl9saW5lQnJlYWtlckJ1dHRvbiIsIl9jb21wb25lbnRzSW5mb0luaXQiLCJfY29tcG9uZW50c0luZm9SZXNldCIsImFjdGl2ZVBsdWdpbnMiLCJtYW5hZ2VkVGFnc0luZm8iLCJfY2hhclR5cGVIVE1MIiwiX2ZpbGVJbmZvUGx1Z2luc0NoZWNrIiwiX2ZpbGVJbmZvUGx1Z2luc1Jlc2V0IiwiX2ZpbGVNYW5hZ2VyIiwicXVlcnlTdHJpbmciLCJwbHVnaW5SZWdFeHAiLCJwbHVnaW5NYXAiLCJjb21tYW5kTWFwIiwiX3N0eWxlQ29tbWFuZE1hcCIsIl9kZWZhdWx0Q29tbWFuZCIsIl92YXJpYWJsZSIsImlzQ2hhbmdlZCIsImlzQ29kZVZpZXciLCJpc0Z1bGxTY3JlZW4iLCJpbm5lckhlaWdodF9mdWxsU2NyZWVuIiwicmVzaXplQ2xpZW50WSIsInRhYlNpemUiLCJjb2RlSW5kZW50IiwibWluUmVzaXppbmdTaXplIiwiY3VycmVudE5vZGVzIiwiY3VycmVudE5vZGVzTWFwIiwiX3JhbmdlIiwiX3NlbGVjdGlvbk5vZGUiLCJfb3JpZ2luQ3NzVGV4dCIsIl9ib2R5T3ZlcmZsb3ciLCJfZWRpdG9yQXJlYU9yaWdpbkNzc1RleHQiLCJfd3lzaXd5Z09yaWdpbkNzc1RleHQiLCJfY29kZU9yaWdpbkNzc1RleHQiLCJfZnVsbFNjcmVlbkF0dHJzIiwic3RpY2t5IiwiYmFsbG9vbiIsImlubGluZSIsIl9saW5lQnJlYWtDb21wIiwiX2xpbmVCcmVha0RpciIsImNhbGxCYWNrRnVuY3Rpb24iLCJfdGFyZ2V0IiwibW9kdWxlQXJyYXkiLCJtb2R1bGVOYW1lIiwiZ2V0R2xvYmFsU2Nyb2xsT2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInN1Ym1lbnVPbiIsInN1Ym1lbnVOYW1lIiwiX3NldE1lbnVQb3NpdGlvbiIsImNvbnRhaW5lck9uIiwiY29udGFpbmVyTmFtZSIsIl9jb250YWluZXJOYW1lIiwiY29udGFpbmVyT2ZmIiwidG9vbGJhclciLCJ0b29sYmFyT2Zmc2V0IiwiZXZlbnQiLCJfZ2V0RWRpdG9yT2Zmc2V0cyIsIm1lbnVXIiwiZWxlbWVudFciLCJydGxXIiwicnRsTCIsIm92ZXJMZWZ0Iiwib2Zmc2V0RWwiLCJidCIsInRvb2xiYXJUb3AiLCJtZW51SGVpZ2h0IiwibWVudUhlaWdodF9ib3R0b20iLCJtZW51VG9wIiwiaW5zVG9wIiwibWVudUhlaWdodF90b3AiLCJhcmciLCJhcmd1bWVudHMiLCJnZXRGaWxlQ29tcG9uZW50Iiwic2hvd0NvbnRyb2xsZXIiLCJyZWZlckVsIiwidG9wTWFyZ2luIiwiY29udHJvbGxlclciLCJyZWZlckVsVyIsImFsbG93Iiwib3ZlclNpemUiLCJleGVjQ29tbWFuZCIsInNob3dEZWZhdWx0VUkiLCJuYXRpdmVGb2N1cyIsIl9lZGl0b3JSYW5nZSIsImN1cnJlbnROb2RlIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJiciIsIl9hcHBseVRhZ0VmZmVjdHMiLCJfdG9nZ2xlVG9vbGJhckJhbGxvb24iLCJmaWxlQ29tcG9uZW50SW5mbyIsImJsdXIiLCJzdGFydENvbiIsInN0YXJ0T2ZmIiwiZW5kQ29uIiwiZW5kT2ZmIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJlbW92ZVJhbmdlIiwiT1VUREVOVCIsIklOREVOVCIsIl9jcmVhdGVEZWZhdWx0UmFuZ2UiLCJjb2xsYXBzZWQiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImFuY2hvck5vZGUiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbXBhcmVWYWx1ZSIsInJpZ2h0RGlyIiwiX3NlbGVjdGlvblZvaWQiLCJvcCIsImV4dGVudE5vZGUiLCJjb21tIiwiX3Jlc2V0UmFuZ2VUb1RleHROb2RlIiwidGVtcENvbiIsInRlbXBPZmZzZXQiLCJ0ZW1wQ2hpbGQiLCJvbmx5QnJlYWsiLCJlbXB0eVRleHQiLCJjb21tb25Db24iLCJsaW5lTm9kZXMiLCJzdGFydExpbmUiLCJlbmRMaW5lIiwic3RhcnRJZHgiLCJlbmRJZHgiLCJvbmx5VGFibGUiLCJzdGFydFJhbmdlRWwiLCJlbmRSYW5nZUVsIiwic2FtZVJhbmdlIiwicmVtb3ZlRHVwbGljYXRlIiwibXlDb21wb25lbnQiLCJzZWxlY3RlZExpbmVzIiwiaXNFZGdlUG9pbnQiLCJkaXIiLCJub2RlVmFsdWUiLCJfaXNFZGdlRm9ybWF0IiwiZm9ybWF0Tm9kZSIsImN1cnJlbnRGb3JtYXRFbCIsIm9Gb3JtYXROYW1lIiwiY2hlY2tDaGFyQ291bnQiLCJub3RTZWxlY3QiLCJyZW1vdmVOb2RlIiwiZm9ybWF0RWwiLCJkZXB0aEZvcm1hdCIsInBsdWdpbiIsIl9zZXRDb21wb25lbnRMaW5lQnJlYWtlciIsInRfc3R5bGUiLCJiX3N0eWxlIiwicmVzaXplQ29udGFpbmVyIiwiY29tcG9uZW50VG9wIiwid1Njcm9sbCIsImFmdGVyTm9kZSIsImZyZWVGb3JtYXQiLCJpc0Zvcm1hdHMiLCJmb3JtYXRSYW5nZSIsIm9yaWdpbkFmdGVyIiwicmVtb3ZlZFRhZyIsInByZXZDb250YWluZXIiLCJzYW1lUGFyZW50Iiwib2xkUGFyZW50IiwicmFuZ2VDb24iLCJmTm9kZSIsImNJdGVtIiwiX3NldEludG9GcmVlRm9ybWF0IiwicHJldmlvdXNUZXh0IiwibmV4dFRleHQiLCJuZXdSYW5nZSIsInplcm9XaWR0aCIsIm9Ob2RlQ2hpbGRyZW4iLCJsYXN0T05vZGUiLCJiZWZvcmVOb2RlIiwic3RhcnRJbmRleCIsImVuZEluZGV4Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInN1YnN0cmluZ0RhdGEiLCJyYyIsInJhbmdlTGluZXMiLCJsaW5lc0xvb3AiLCJuZXN0ZWQiLCJmRWwiLCJsRWwiLCJzdGFuZFRhZyIsImJlZm9yZVRhZyIsInBhcmVudERlcHRoIiwibGlzdFBhcmVudCIsImxpbmVBcnIiLCJyZW1vdmVJdGVtcyIsIm5leHRMaW5lIiwibmV4dExpc3QiLCJyZW1vdmVBcnJheSIsInNwbGl0UmFuZ2UiLCJuZXdSYW5nZUVsZW1lbnQiLCJmaXJzdE5vZGUiLCJsYXN0Tm9kZSIsInJhbmdlRWwiLCJpbnNlcnRlZE5ldyIsIm1vdmVDb21wbGV0ZSIsImFwcGVuZE5vZGUiLCJpbnNOb2RlIiwib3JpZ2luTm9kZSIsImluc0NoaWxkcmVuIiwib3JpZ2luTmV4dCIsImRldGFjaFJhbmdlIiwibGluZUluZGV4IiwiaW5zTmV4dCIsImlubmVyQ2hpbGRyZW4iLCJyYW5nZVBhcmVudCIsInJhbmdlUmlnaHQiLCJjaGlsZEVkZ2UiLCJsaXN0Rmlyc3QiLCJsaXN0TGFzdCIsImxhc3RJbmRleCIsInN0eWxlQXJyYXkiLCJyZW1vdmVOb2RlQXJyYXkiLCJzdHJpY3RSZW1vdmUiLCJpc1JlbW92ZU5vZGUiLCJpc1JlbW92ZUZvcm1hdCIsIm5ld05vZGVOYW1lIiwic05vZGUiLCJjaGVja0NudCIsImNoZWNrQXR0cnMiLCJja2Vja0NsYXNzZXMiLCJjbGFzc1JlZyIsInN0eWxlQ2hlY2siLCJjbGFzc0NoZWNrIiwic3RhcnQiLCJlbmQiLCJzdHlsZVJlZ0V4cCIsImNsYXNzUmVnRXhwIiwicmVtb3ZlTm9kZVJlZ0V4cCIsIndCb29sZWFuIiwiQm9vbGVhbiIsIl9yZW1vdmVDaGVjayIsImNoZWNrTm9kZSIsInZOb2RlIiwidGFnUmVtb3ZlIiwib3JpZ2luU3R5bGUiLCJvcmlnaW5DbGFzc2VzIiwib25lTGluZSIsImVuZExlbmd0aCIsImlzUmVtb3ZlQW5jaG9yIiwiaXNTaXplTm9kZSIsIl9nZXRNYWludGFpbmVkTm9kZSIsIl91dGlsX2dldE1haW50YWluZWROb2RlIiwiX3V0aWxfaXNNYWludGFpbmVkTm9kZSIsIl9ub2RlQ2hhbmdlX29uZUxpbmUiLCJfc2V0Q29tbW9uTGlzdFN0eWxlIiwiX25vZGVDaGFuZ2VfZW5kTGluZSIsIl9ub2RlQ2hhbmdlX21pZGRsZUxpbmUiLCJfbm9kZUNoYW5nZV9zdGFydExpbmUiLCJjaGlsZFN0eWxlIiwiZWxTdHlsZSIsImZvbnRXZWlnaHQiLCJfc3RyaXBSZW1vdmVOb2RlIiwiX2lzUmVtb3ZlIiwibmV3SW5uZXJOb2RlIiwicGFyZW50Q29uIiwic2FtZVRhZyIsInoiLCJuTm9kZUFycmF5IiwicE5vZGUiLCJpc1NhbWVOb2RlIiwicEN1cnJlbnQiLCJzdGFydFBhc3MiLCJlbmRQYXNzIiwiY2hlY2tDc3MiLCJjb3Zlck5vZGUiLCJwcmV2Tm9kZSIsInByZXZBbmNob3JOb2RlIiwiY2hpbGROb2RlIiwiYW5jaG9ycyIsImFDaGlsZHJlbiIsImFMZW4iLCJhbmNlc3RvckFuY2hvck5vZGUiLCJhZnRlckFuY2hvck5vZGUiLCJ0ZXh0Tm9kZV9zIiwidGV4dE5vZGVfZSIsImVuZENvblJlc2V0IiwibmV3U3RhcnRPZmZzZXQiLCJzdGFydFBhdGgiLCJtZXJnZUVuZENvbiIsIm5ld0VuZE9mZnNldCIsImVuZFBhdGgiLCJuZXdPZmZzZXRzIiwiX2VuZENvbnRhaW5lciIsInBhc3NOb2RlIiwiY2xvbmVDaGlsZCIsImlzVG9wTm9kZSIsInRlbXBOb2RlIiwibmV3Q3NzVGV4dCIsIm5ld0NsYXNzIiwibm9uZUNoYW5nZSIsImFjdGlvbkNhbGwiLCJsYXllciIsIl9zaG93VG9vbGJhckJhbGxvb24iLCJfc2hvd1Rvb2xiYXJJbmxpbmUiLCJjb21tYW5kSGFuZGxlciIsInRvZ2dsZUNvZGVWaWV3IiwidG9nZ2xlRnVsbFNjcmVlbiIsInRvZ2dsZURpc3BsYXlCbG9ja3MiLCJnZXRDb250ZW50cyIsIm5vZGVzTWFwIiwibWFyZ2luRGlyIiwiX3Jlc291cmNlc1N0YXRlQ2hhbmdlIiwiX3NldENvZGVEYXRhVG9FZGl0b3IiLCJfaGlkZVRvb2xiYXIiLCJfcmVzZXRDYWNoaW5nQnV0dG9uIiwiX3NldEVkaXRvckRhdGFUb0NvZGVWaWV3Iiwic2Nyb2xsSGVpZ2h0IiwicmVmcmVzaCIsIl9jaGVja1BsYWNlaG9sZGVyIiwiY29kZV9odG1sIiwiX2dldENvZGVWaWV3IiwicGFyc2VEb2N1bWVudCIsImhlYWRDaGlsZHJlbiIsImNvbnZlcnRDb250ZW50c0ZvckVkaXRvciIsImVkaXRhYmxlQ2xhc3NlcyIsImNvZGVDb250ZW50cyIsImNvbnZlcnRIVE1MRm9yQ29kZVZpZXciLCJjb2RlVmFsdWUiLCJfc2V0Q29kZVZpZXciLCJfdmFyIiwib25TY3JvbGxfd2luZG93IiwibWFyZ2luVG9wIiwiekluZGV4IiwiX2lmcmFtZUF1dG9IZWlnaHQiLCJjb250ZW50c0hUTUwiLCJwcmludERvY3VtZW50Iiwid0RvYyIsImFycnRzIiwid3JpdGUiLCJsaW5rcyIsImxpbmtIVE1MIiwiZG9jdW1lbnRNb2RlIiwiU3R5bGVNZWRpYSIsIndpbmRvd09iamVjdCIsIm1pbWVUeXBlIiwiY29udmVydFZhbHVlIiwiX3Jlc2V0Q29tcG9uZW50cyIsInNldElmcmFtZUNvbnRlbnRzIiwiY3R4Iiwib25seUNvbnRlbnRzIiwicmVuZGVySFRNTCIsImZpZ2NhcHRpb25zIiwiX21ha2VMaW5lIiwicmVxdWlyZUZvcm1hdCIsInRleHRBcnJheSIsIl9hbGxvd0hUTUxDb21tZW50cyIsIl90YWdDb252ZXJ0b3IiLCJfZGVsZXRlRGlzYWxsb3dlZFRhZ3MiLCJfY2xlYW5UYWdzIiwicm93TGV2ZWxDaGVjayIsInRBdHRyIiwiY2xlYW5IVE1MIiwidGV4dENvbXBMaXN0IiwiaW5pdE1ldGhvZCIsImRvbVRyZWUiLCJyZXR1cm5IVE1MIiwiYnJSZWciLCJpc0Zvcm1hdCIsImluZGVudFNpemUiLCJsaW5lQlIiLCJlbGVtZW50UmVnVGVzdCIsImVsZW1lbnRJbmRlbnQiLCJub2RlUmVnVGVzdCIsInRhZ0luZGVudCIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImxpc3RlbmVyIiwidXNlQ2FwdHVyZSIsIl9jaGFyQ291bnQiLCJpbnB1dFRleHQiLCJjb3VudFR5cGUiLCJuZXh0Q2hhckNvdW50IiwiZ2V0Q2hhckxlbmd0aCIsIl9zZXRDaGFyQ291bnQiLCJvdmVyIiwiY291bnQiLCJnZXRDaGFyQ291bnQiLCJzbGljZVBvc2l0aW9uIiwiX2NhbGxDb3VudGVyQmxpbmsiLCJfY2hlY2tDb21wb25lbnRzIiwiZ2V0RG9jIiwic2V0VmFsdWUiLCJnZXRWYWx1ZSIsIl9pbml0IiwicmVsb2FkIiwiX2luaXRIVE1MIiwiU2hhZG93Um9vdCIsInNoYWRvd1Jvb3QiLCJkaXNhbGxvd1RleHRUYWdzIiwiYWxsb3dUZXh0VGFncyIsImRlZmF1bHRBdHRyIiwiX2F0dHIiLCJ0YWdzQXR0ciIsImFsbEF0dHIiLCJrIiwiX2NhY2hpbmdCdXR0b25zIiwibWFuYWdlZENsYXNzIiwiZmlsZVBsdWdpblJlZ0V4cCIsImNoYW5nZSIsImRlbGF5VGltZSIsInB1c2hEZWxheSIsInN0YWNrSW5kZXgiLCJzdGFjayIsInNldENvbnRlbnRzRnJvbVN0YWNrIiwicHVzaFN0YWNrIiwiZGVsYXkiLCJ0aW1lIiwiY2xlYXJUaW1lb3V0IiwiZ28iLCJpZ25vcmVDaGFuZ2VFdmVudCIsIl9kZXN0cm95IiwiX2hpc3RvcnkiLCJfb25DaGFuZ2VfaGlzdG9yeVN0YWNrIiwiX2lmcmFtZUF1dG8iLCJfaW5pdFd5c2l3eWdBcmVhIiwiU1VCIiwiU1VQIiwib25DaGFuZ2UiLCJfc2V0RGVmYXVsdEZvcm1hdCIsImZvcm1hdE5hbWUiLCJmaWxlQ29tcG9uZW50IiwiX3NldE9wdGlvbnNJbml0IiwiX2dldENvbnN0cnVjdGVkIiwiX2VkaXRvckluaXQiLCJfYWRkRXZlbnQiLCJfb2ZmU3RpY2t5VG9vbGJhciIsIm9uUmVzaXplX3dpbmRvdyIsImNvbnRleHRFbCIsIl9JRWlzQ29tcG9zaW5nIiwiX2xpbmVCcmVha2VyQmluZCIsIl9yZXNwb25zaXZlQ3VycmVudFNpemUiLCJfcmVzcG9uc2l2ZUJ1dHRvblNpemUiLCJfZGlyZWN0aW9uS2V5Q29kZSIsIl9ub25UZXh0S2V5Q29kZSIsIl9oaXN0b3J5SWdub3JlS2V5Q29kZSIsIl9vbkJ1dHRvbnNDaGVjayIsIl9mcm9udFplcm9XaWR0aFJlZyIsIl9rZXlDb2RlU2hvcnRjdXQiLCI2NSIsIjY2IiwiODMiLCI4NSIsIjczIiwiODkiLCI5MCIsIjIxOSIsIjIyMSIsIl9zaG9ydGN1dENvbW1hbmQiLCJjbGFzc09uQ2hlY2siLCJjb21tYW5kTWFwTm9kZXMiLCJfY2FuY2VsQ2FwdGlvbkVkaXQiLCJfYnV0dG9uc0V2ZW50SGFuZGxlciIsIm9uQ2xpY2tfdG9vbGJhciIsIm9uTW91c2VEb3duX3d5c2l3eWciLCJvbk1vdXNlRG93biIsInRhYmxlQ2VsbCIsIm9uQ2xpY2tfd3lzaXd5ZyIsIm9uQ2xpY2siLCJoaWRlVG9vbGJhciIsInByZXZMaSIsIl9iYWxsb29uRGVsYXkiLCJfc2hvd1Rvb2xiYXJCYWxsb29uRGVsYXkiLCJyYW5nZU9iaiIsImlzRGlyVG9wIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsImdsb2JhbFNjcm9sbCIsImVkaXRvcldpZHRoIiwic3RpY2t5VG9wIiwiZWRpdG9yTGVmdCIsIm5vZGVPZmZzZXQiLCJib3R0b20iLCJub1RleHQiLCJhcnJvd01hcmdpbiIsInRvb2xiYXJIZWlnaHQiLCJpZnJhbWVSZWN0cyIsIl9zZXRUb29sYmFyT2Zmc2V0IiwiZWRpdG9yUGFyZW50IiwiYWJzb2x1dGVMZWZ0Iiwib3ZlclJpZ2h0IiwicmVzZXRUb3AiLCJzcGFjZSIsIl9nZXRQYWdlQm90dG9tU3BhY2UiLCJkb2N1bWVudEVsZW1lbnQiLCJhcnJvd19sZWZ0Iiwic2hvd0lubGluZSIsIm9uSW5wdXRfd3lzaXd5ZyIsIm9uSW5wdXQiLCJfaXNVbmVkaXRhYmxlTm9kZSIsImlzRnJvbnQiLCJzaWJsaW5nS2V5Iiwic2libGluZ05vZGUiLCJfaXNVbmVkaXRhYmxlTm9kZV9nZXRTaWJsaW5nIiwic2VsZWN0Tm9kZSIsIl9vblNob3J0Y3V0S2V5Iiwib25LZXlEb3duX3d5c2l3eWciLCJzaGlmdEtleSIsImN0cmwiLCJjdHJsS2V5IiwibWV0YUtleSIsImFsdEtleSIsIm9uS2V5RG93biIsInNlbGVjdFJhbmdlIiwiZmlsZUNvbXBvbmVudE5hbWUiLCJfaGFyZERlbGV0ZSIsImRlZmF1bHRGb3JtYXQiLCJwcmV2TGFzdCIsImNvbiIsInNlbCIsImlnbm9yZVpXUyIsIm5leHRFbCIsImlzRWRnZSIsImxpbmVzIiwiZmMiLCJsYyIsIm1vdmVDZWxsIiwiZW5kQ2hpbGQiLCJ0YWJUZXh0IiwidGV4dFJhbmdlIiwiZnJlZUZvcm1hdEVsIiwiZW50ZXJIVE1MIiwiZm9ybWF0SW5uZXJzIiwiaW5uZXJOb2RlIiwic2VsZWN0aW9uRm9ybWF0Iiwid1NlbGVjdGlvbiIsImluc2VydEhUTUwiLCJ3T2Zmc2V0IiwiZm9jdXNOZXh0IiwiYnJQcmV2IiwiYnJOZXh0IiwibmV3TGlzdENlbGwiLCJjb21wQ29udGV4dCIsIm5ic3AiLCJvbktleVVwX3d5c2l3eWciLCJvbktleVVwIiwib0Zvcm1hdFRhZyIsImlzQ29tcG9zaW5nIiwiZnJvbnRaZXJvV2lkdGhDbnQiLCJzdWJzdHJpbmciLCJvblNjcm9sbF93eXNpd3lnIiwib25TY3JvbGwiLCJvbkZvY3VzX3d5c2l3eWciLCJvbkZvY3VzIiwib25CbHVyX3d5c2l3eWciLCJvbkJsdXIiLCJvbk1vdXNlRG93bl9yZXNpemluZ0JhciIsInByZXZIZWlnaHQiLCJjbGllbnRZIiwiX3Jlc2l6ZV9lZGl0b3IiLCJjbG9zdXJlRnVuYyIsIm9uUmVzaXplRWRpdG9yIiwicmVzaXplSW50ZXJ2YWwiLCJyZXNwb25zaXZlU2l6ZSIsInJlc3BvbnNpdmVXaWR0aCIsInNldFRvb2xiYXJCdXR0b25zIiwiZWRpdG9ySGVpZ2h0Iiwic2Nyb2xsWSIsImVkaXRvclRvcCIsIl9vblN0aWNreVRvb2xiYXIiLCJzY3JvbGwiLCJfY29kZVZpZXdBdXRvSGVpZ2h0Iiwic0NlbGwiLCJlQ2VsbCIsInNJc0NlbGwiLCJlSXNDZWxsIiwic0NvbXAiLCJlQ29tcCIsIm9uUGFzdGVfd3lzaXd5ZyIsImNsaXBib2FyZERhdGEiLCJfZGF0YVRyYW5zZmVyQWN0aW9uIiwiX3NldENsaXBib2FyZENvbXBvbmVudCIsInNldERhdGEiLCJvbkNvcHlfd3lzaXd5ZyIsIm9uQ29weSIsIm9uQ3V0X3d5c2l3eWciLCJvbkN1dCIsIm9uRHJvcF93eXNpd3lnIiwiZGF0YVRyYW5zZmVyIiwiX3NldERyb3BMb2NhdGlvblNlbGVjdGlvbiIsInJhbmdlT2Zmc2V0IiwiY2FyZXRSYW5nZUZyb21Qb2ludCIsImNsaWVudFgiLCJwbGFpblRleHQiLCJjbGVhbkRhdGEiLCJnZXREYXRhIiwidGVtcERpdiIsInRlbXBSYW5nZSIsIl9zZXRDbGlwYm9hcmREYXRhIiwiTVNEYXRhIiwib25QYXN0ZSIsIm9uRHJvcCIsImluc2VydEltYWdlIiwib25Nb3VzZU1vdmVfd3lzaXd5ZyIsImxpbmVCcmVha2VyU3R5bGUiLCJjdHhFbCIsInBhZ2VZIiwiX29uTW91c2VEb3duX2xpbmVCcmVhayIsIl9vbkxpbmVCcmVhayIsImV2ZW50V3lzaXd5ZyIsInBhc3NpdmUiLCJfc2V0UmVzcG9uc2l2ZVRvb2xiYXIiLCJfcmVtb3ZlRXZlbnQiLCJzaXplQXJyYXkiLCJidXR0b25zT2JqIiwibmV3VG9vbGJhciIsIm5ld0NvbnRleHQiLCJvbGRDYWxsQnV0dG9ucyIsIm9sZEJ1dHRvbiIsInNldE9wdGlvbnMiLCJfb3B0aW9ucyIsInNldERlZmF1bHRTdHlsZSIsIm5ld1N0eWxlcyIsIm5vdGljZUNsb3NlIiwiZ2V0Q29udGV4dCIsImdldFRleHQiLCJnZXRJbWFnZXNJbmZvIiwiZ2V0RmlsZXNJbmZvIiwibm90Q2xlYW5pbmdEYXRhIiwicmFuZ2VTZWxlY3Rpb24iLCJjaGVja0hUTUwiLCJmaXJzdENvbiIsImFwcGVuZENvbnRlbnRzIiwic2V0T3B0aW9uIiwidG9wQXJlYVN0eWxlIiwiaGlkZSIsIlNVTkVESVRPUiIsInN1bmVkaXRvciIsIl9yZXNpemVDbGllbnRYIiwiX3Jlc2l6ZUNsaWVudFkiLCJfcmVzaXplX3ciLCJfcmVzaXplX2giLCJfcmVzaXplX2RpcmVjdGlvbiIsIl9tb3ZlX3BhdGgiLCJfaXNDaGFuZ2UiLCJhbGlnbkljb25zIiwicmVzaXplX2Rpdl9jb250YWluZXIiLCJzZXRDb250cm9sbGVyX3Jlc2l6ZSIsInJlc2l6ZURvdCIsInJlc2l6ZURpc3BsYXkiLCJyZXNpemVfYnV0dG9uIiwic2V0Q29udHJvbGxlcl9idXR0b24iLCJyZXNpemVfaGFuZGxlcyIsInJlc2l6ZUhhbmRsZXMiLCJyZXNpemVCdXR0b25Hcm91cCIsInJvdGF0aW9uQnV0dG9ucyIsInBlcmNlbnRhZ2VCdXR0b25zIiwiYWxpZ25NZW51IiwiYWxpZ25NZW51TGlzdCIsImFsaWduQnV0dG9uIiwiYXV0b1NpemVCdXR0b24iLCJjYXB0aW9uQnV0dG9uIiwib25Nb3VzZURvd25fcmVzaXplX2hhbmRsZSIsIm9uQ2xpY2tfcmVzaXplQnV0dG9uIiwicmVzaXplX2NvbnRhaW5lciIsInBsdWdpbk9iaiIsInBlcmNlbnRhZ2VSb3RhdGlvbiIsInhVbml0IiwieVVuaXQiLCJkZWMiLCJ4VmFsdWUiLCJ5VmFsdWUiLCJjb250ZXh0UmVzaXppbmciLCJpc1ZlcnRpY2FsIiwiYWJzIiwiZGlzcGxheVgiLCJkaXNwbGF5WSIsInJlc2l6ZURvdFNob3ciLCJyb3RhdGlvbnMiLCJwQnV0dG9ucyIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJfY2xvc2VBbGlnbk1lbnUiLCJvcGVuQWxpZ25NZW51IiwiY3VycmVudENvbnRleHQiLCJjdXJyZW50TW9kdWxlIiwicGVyY2VudFkiLCJwZXJjZW50YWdlIiwiX3NldFRyYW5zRm9ybSIsInNsb3BlIiwiZGVnIiwiYWxpZ25WYWx1ZSIsImNhcHRpb25UZXh0IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtT3JpZ2luIiwidHJhbnNPcmlnaW4iLCJvZmZzZXRXIiwib2Zmc2V0SCIsInRyYW5zVyIsInRyYW5zSCIsInRyYW5zbGF0ZSIsImNsb3N1cmVGdW5jX2JpbmQiLCJyZXNpemluZ19lbGVtZW50X2JpbmQiLCJjYW5jZWxfY29udHJvbGxlcl9yZXNpemUiLCJyZXNpemluZ19lbGVtZW50IiwicmVzdWx0VyIsInJlc3VsdEgiLCJ3aCIsInBhZGRpbmciLCJsaW1pdCIsIl9jaGVja01lZGlhQ29tcG9uZW50IiwidXBsb2FkVXJsIiwidXBsb2FkSGVhZGVyIiwiY2FsbEJhY2siLCJlcnJvckNhbGxCYWNrIiwiZmlsZVBsdWdpbiIsIl9jYWxsQmFja1VwbG9hZCIsInRhZ05hbWVzIiwidXBsb2FkRXZlbnRIYW5kbGVyIiwiZmlsZU1hbmFnZXJQbHVnaW4iLCJpbmZvTGlzdCIsInNldEZpbGVJbmZvIiwiaW5mb1VwZGF0ZSIsImN1cnJlbnRUYWdzIiwiaW5mb0luZGV4IiwicGxndWluIiwic3RhdGUiLCJzY3JvbGxJbnRvVmlldyJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFPWSxP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QUFFRCxTQUNILE1BQU0sSUFBSUUsTUFBTSw4Q0FFcEIsT0FBT3JELEVBQVFvRCxJQUd2QnBELEVBQVFEIiwiZmlsZSI6InN1bmVkaXRvci5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCJYSlIxXCIpO1xuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX01PRFVMRVMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KHcpO1xuICAgICAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmYWN0b3J5KGdsb2JhbCk7XG4gICAgfVxufSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uICh3aW5kb3csIG5vR2xvYmFsKSB7XG4gICAgY29uc3QgZGlhbG9nID0ge1xuICAgICAgICBuYW1lOiAnZGlhbG9nJyxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcbiAgICAgICAgICovXG4gICAgICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0LmRpYWxvZyA9IHtcbiAgICAgICAgICAgICAgICBraW5kOiAnJyxcbiAgICAgICAgICAgICAgICB1cGRhdGVNb2RhbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgX2Nsb3NlU2lnbmFsOiBmYWxzZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLyoqIGRpYWxvZyAqL1xuICAgICAgICAgICAgbGV0IGRpYWxvZ19kaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgICAgICBkaWFsb2dfZGl2LmNsYXNzTmFtZSA9ICdzZS1kaWFsb2cgc3VuLWVkaXRvci1jb21tb24nO1xuXG4gICAgICAgICAgICBsZXQgZGlhbG9nX2JhY2sgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgICAgICBkaWFsb2dfYmFjay5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWJhY2snO1xuICAgICAgICAgICAgZGlhbG9nX2JhY2suc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgbGV0IGRpYWxvZ19hcmVhID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICAgICAgZGlhbG9nX2FyZWEuY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1pbm5lcic7XG4gICAgICAgICAgICBkaWFsb2dfYXJlYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICBkaWFsb2dfZGl2LmFwcGVuZENoaWxkKGRpYWxvZ19iYWNrKTtcbiAgICAgICAgICAgIGRpYWxvZ19kaXYuYXBwZW5kQ2hpbGQoZGlhbG9nX2FyZWEpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEgPSBkaWFsb2dfZGl2O1xuICAgICAgICAgICAgY29udGV4dC5kaWFsb2cuYmFjayA9IGRpYWxvZ19iYWNrO1xuICAgICAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwgPSBkaWFsb2dfYXJlYTtcblxuICAgICAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duX2RpYWxvZy5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbGlja19kaWFsb2cuYmluZChjb3JlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKGRpYWxvZ19kaXYpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgICAgICBkaWFsb2dfZGl2ID0gbnVsbCwgZGlhbG9nX2JhY2sgPSBudWxsLCBkaWFsb2dfYXJlYSA9IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBjbG9zaW5nIHRoZSBkaWFsb2dcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX29uTW91c2VEb3duX2RpYWxvZzogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmICgvc2UtZGlhbG9nLWlubmVyLy50ZXN0KGUudGFyZ2V0LmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLl9jbG9zZVNpZ25hbCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cuX2Nsb3NlU2lnbmFsID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCB0byBjbG9zZSB0aGUgd2luZG93IHdoZW4gdGhlIG91dHNpZGUgYXJlYSBvZiB0aGUgZGlhbG9nIG9yIGNsb3NlIGJ1dHRvbiBpcyBjbGlja1xuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfb25DbGlja19kaWFsb2c6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoL2Nsb3NlLy50ZXN0KGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykpIHx8IHRoaXMuY29udGV4dC5kaWFsb2cuX2Nsb3NlU2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhIERpYWxvZyBwbHVnaW5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGtpbmQgRGlhbG9nIHBsdWdpbiBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdXBkYXRlIFdoZXRoZXIgaXQgd2lsbCBvcGVuIGZvciB1cGRhdGUgKCdpbWFnZScgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKVxuICAgICAgICAgKi9cbiAgICAgICAgb3BlbjogZnVuY3Rpb24gKGtpbmQsIHVwZGF0ZSkgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGFsRm9ybSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5kaWFsb2cuX2JpbmRDbG9zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGx1Z2lucy5kaWFsb2cuX2JpbmRDbG9zZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIS8yNy8udGVzdChlLmtleUNvZGUpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fZC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlKTtcblxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA9IHVwZGF0ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3B1cERpc3BsYXkgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cubW9kYWxBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLmtpbmQgPSBraW5kO1xuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0gPSB0aGlzLmNvbnRleHRba2luZF0ubW9kYWw7XG4gICAgICAgICAgICBjb25zdCBmb2N1c0VsZW1lbnQgPSB0aGlzLmNvbnRleHRba2luZF0uZm9jdXNFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucGx1Z2luc1traW5kXS5vbiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5wbHVnaW5zW2tpbmRdLm9uLmNhbGwodGhpcywgdXBkYXRlKTtcblxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLmJhY2suc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLm1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICAgICAgICAgIGlmIChmb2N1c0VsZW1lbnQpIGZvY3VzRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9iaW5kQ2xvc2U6IG51bGwsXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3NlIGEgRGlhbG9nIHBsdWdpblxuICAgICAgICAgKiBUaGUgcGx1Z2luJ3MgXCJpbml0XCIgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBraW5kID0gdGhpcy5jb250ZXh0LmRpYWxvZy5raW5kO1xuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cuYmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbHVnaW5zW2tpbmRdLmluaXQgPT09ICdmdW5jdGlvbicpIHRoaXMucGx1Z2luc1traW5kXS5pbml0LmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLmtpbmQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghd2luZG93LlNVTkVESVRPUl9NT0RVTEVTKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnU1VORURJVE9SX01PRFVMRVMnLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUywgJ2RpYWxvZycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IGRpYWxvZ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlhbG9nO1xufSkpOyIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XG4gICAgICAgICAgICBmdW5jdGlvbiAodykge1xuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9NT0RVTEVTIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcbiAgICAgICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xuICAgIH1cbn0odHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBub0dsb2JhbCkge1xuICAgIGNvbnN0IGZpbGVCcm93c2VyID0ge1xuICAgICAgICBuYW1lOiAnZmlsZUJyb3dzZXInLFxuICAgICAgICBfeG1sSHR0cDogbnVsbCxcbiAgICAgICAgX2xvYWRpbmc6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcbiAgICAgICAgICovXG4gICAgICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyID0ge1xuICAgICAgICAgICAgICAgIF9jbG9zZVNpZ25hbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXJlYTogbnVsbCxcbiAgICAgICAgICAgICAgICBoZWFkZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgdGFnQXJlYTogbnVsbCxcbiAgICAgICAgICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICAgICAgICAgIGxpc3Q6IG51bGwsXG4gICAgICAgICAgICAgICAgdGFnRWxlbWVudHM6IG51bGwsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFnczogW10sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JIYW5kbGVyOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW46ICcnLFxuICAgICAgICAgICAgICAgIGNvbHVtblNpemU6IDRcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8qKiBmaWxlQnJvd3NlciAqL1xuICAgICAgICAgICAgbGV0IGJyb3dzZXJfZGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICAgICAgYnJvd3Nlcl9kaXYuY2xhc3NOYW1lID0gJ3NlLWZpbGUtYnJvd3NlciBzdW4tZWRpdG9yLWNvbW1vbic7XG5cbiAgICAgICAgICAgIGxldCBiYWNrID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICAgICAgYmFjay5jbGFzc05hbWUgPSAnc2UtZmlsZS1icm93c2VyLWJhY2snO1xuXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gJ3NlLWZpbGUtYnJvd3Nlci1pbm5lcic7XG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IHRoaXMuc2V0X2Jyb3dzZXIoY29yZSk7XG5cbiAgICAgICAgICAgIGJyb3dzZXJfZGl2LmFwcGVuZENoaWxkKGJhY2spO1xuICAgICAgICAgICAgYnJvd3Nlcl9kaXYuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nID0gYnJvd3Nlcl9kaXYucXVlcnlTZWxlY3RvcignLnNlLWxvYWRpbmctYm94Jyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIuYXJlYSA9IGJyb3dzZXJfZGl2O1xuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5oZWFkZXIgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZS1maWxlLWJyb3dzZXItaGVhZGVyJyk7XG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLnRpdGxlQXJlYSA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignLnNlLWZpbGUtYnJvd3Nlci10aXRsZScpO1xuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci50YWdBcmVhID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1icm93c2VyLXRhZ3MnKTtcbiAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIuYm9keSA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignLnNlLWZpbGUtYnJvd3Nlci1ib2R5Jyk7XG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLmxpc3QgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZS1maWxlLWJyb3dzZXItbGlzdCcpO1xuXG4gICAgICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci50YWdBcmVhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrVGFnLmJpbmQoY29yZSkpO1xuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5saXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrRmlsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd25fYnJvd3Nlci5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrX2Jyb3dzZXIuYmluZChjb3JlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKGJyb3dzZXJfZGl2KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICAgICAgYnJvd3Nlcl9kaXYgPSBudWxsLCBiYWNrID0gbnVsbCwgY29udGVudCA9IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0X2Jyb3dzZXI6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuXG4gICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9XCJzZS1maWxlLWJyb3dzZXItY29udGVudFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci1oZWFkZXJcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiIGNsYXNzPVwic2UtYnRuIHNlLWZpbGUtYnJvd3Nlci1jbG9zZVwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuY2FuY2VsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci10aXRsZVwiPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1icm93c2VyLXRhZ3NcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci1ib2R5XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxvYWRpbmctYm94IHN1bi1lZGl0b3ItY29tbW9uXCI+PGRpdiBjbGFzcz1cInNlLWxvYWRpbmctZWZmZWN0XCI+PC9kaXY+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci1saXN0XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIGNsb3NpbmcgdGhlIGJyb3dzZXJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX29uTW91c2VEb3duX2Jyb3dzZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoL3NlLWZpbGUtYnJvd3Nlci1pbm5lci8udGVzdChlLnRhcmdldC5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyLl9jbG9zZVNpZ25hbCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxlQnJvd3Nlci5fY2xvc2VTaWduYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHRvIGNsb3NlIHRoZSB3aW5kb3cgd2hlbiB0aGUgb3V0c2lkZSBhcmVhIG9mIHRoZSBicm93c2VyIG9yIGNsb3NlIGJ1dHRvbiBpcyBjbGlja1xuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfb25DbGlja19icm93c2VyOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKC9jbG9zZS8udGVzdChlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpKSB8fCB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXIuX2Nsb3NlU2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBPcGVuIGEgZmlsZSBicm93c2VyIHBsdWdpblxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSB1c2luZyB0aGUgZmlsZSBicm93c2VyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gc2VsZWN0b3JIYW5kbGVyIFdoZW4gdGhlIGZ1bmN0aW9uIGNvbWVzIGFzIGFuIGFyZ3VtZW50IHZhbHVlLCBpdCBzdWJzdGl0dXRlcyBcImNvbnRleHQuc2VsZWN0b3JIYW5kbGVyXCIuXG4gICAgICAgICAqL1xuICAgICAgICBvcGVuOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgc2VsZWN0b3JIYW5kbGVyKSAge1xuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9iaW5kQ2xvc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9iaW5kQ2xvc2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghLzI3Ly50ZXN0KGUua2V5Q29kZSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuY2xvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyO1xuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW4gPSBwbHVnaW5OYW1lO1xuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LnNlbGVjdG9ySGFuZGxlciA9IHNlbGVjdG9ySGFuZGxlcjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgcGx1Z2luQ29udGV4dCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RDbGFzc05hbWUgPSBwbHVnaW5Db250ZXh0Lmxpc3RDbGFzcztcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmhhc0NsYXNzKGZpbGVCcm93c2VyQ29udGV4dC5saXN0LCBsaXN0Q2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5saXN0LmNsYXNzTmFtZSA9ICdzZS1maWxlLWJyb3dzZXItbGlzdCAnICsgbGlzdENsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3B1cERpc3BsYXkgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5hcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmFyZWEuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQudGl0bGVBcmVhLnRleHRDb250ZW50ID0gcGx1Z2luQ29udGV4dC50aXRsZTtcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5hcmVhLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuX2RyYXdGaWxlTGlzdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXS51cmwsIHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXS5oZWFkZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9iaW5kQ2xvc2U6IG51bGwsXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3NlIGEgZmlsZUJyb3dzZXIgcGx1Z2luXG4gICAgICAgICAqIFRoZSBwbHVnaW4ncyBcImluaXRcIiBtZXRob2QgaXMgY2FsbGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyUGx1Z2luID0gdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyO1xuXG4gICAgICAgICAgICBpZiAoZmlsZUJyb3dzZXJQbHVnaW4uX3htbEh0dHApIHtcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlclBsdWdpbi5feG1sSHR0cC5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZUJyb3dzZXJQbHVnaW4uX2JpbmRDbG9zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZpbGVCcm93c2VyUGx1Z2luLl9iaW5kQ2xvc2UpO1xuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyUGx1Z2luLl9iaW5kQ2xvc2UgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlckNvbnRleHQgPSB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXI7XG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuYXJlYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LnNlbGVjdG9ySGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuc2VsZWN0ZWRUYWdzID0gW107XG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuaXRlbXMgPSBbXTtcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5saXN0LmlubmVySFRNTCA9IGZpbGVCcm93c2VyQ29udGV4dC50YWdBcmVhLmlubmVySFRNTCA9IGZpbGVCcm93c2VyQ29udGV4dC50aXRsZUFyZWEudGV4dENvbnRlbnQgPSAnJztcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpbnNbZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW5dLmluaXQgPT09ICdmdW5jdGlvbicpIHRoaXMucGx1Z2luc1tmaWxlQnJvd3NlckNvbnRleHQuY29udGV4dFBsdWdpbl0uaW5pdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW4gPSAnJztcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNob3cgZmlsZSBicm93c2VyIGxvYWRpbmcgYm94XG4gICAgICAgICAqL1xuICAgICAgICBzaG93QnJvd3NlckxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDbG9zZSBmaWxlIGJyb3dzZXIgbG9hZGluZyBib3hcbiAgICAgICAgICovXG4gICAgICAgIGNsb3NlQnJvd3NlckxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfSxcblxuICAgICAgICBfZHJhd0ZpbGVMaXN0OiBmdW5jdGlvbiAodXJsLCBicm93c2VySGVhZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlclBsdWdpbiA9IHRoaXMucGx1Z2lucy5maWxlQnJvd3NlcjtcblxuICAgICAgICAgICAgY29uc3QgeG1sSHR0cCA9IGZpbGVCcm93c2VyUGx1Z2luLl94bWxIdHRwID0gdGhpcy51dGlsLmdldFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZpbGVCcm93c2VyUGx1Z2luLl9jYWxsQmFja0dldC5iaW5kKHRoaXMsIHhtbEh0dHApO1xuICAgICAgICAgICAgeG1sSHR0cC5vcGVuKCdnZXQnLCB1cmwsIHRydWUpO1xuICAgICAgICAgICAgaWYoYnJvd3NlckhlYWRlciAhPT0gbnVsbCAmJiB0eXBlb2YgYnJvd3NlckhlYWRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy5fdy5PYmplY3Qua2V5cyhicm93c2VySGVhZGVyKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGtleSBpbiBicm93c2VySGVhZGVyKXtcbiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgYnJvd3NlckhlYWRlcltrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4bWxIdHRwLnNlbmQobnVsbCk7XG5cbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5zaG93QnJvd3NlckxvYWRpbmcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfY2FsbEJhY2tHZXQ6IGZ1bmN0aW9uICh4bWxIdHRwKSB7XG4gICAgICAgICAgICBpZiAoeG1sSHR0cC5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl94bWxIdHRwID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoeG1sSHR0cC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9kcmF3TGlzdEl0ZW0uY2FsbCh0aGlzLCBKU09OLnBhcnNlKHhtbEh0dHAucmVzcG9uc2VUZXh0KS5yZXN1bHQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5maWxlQnJvd3Nlci5kcmF3TGlzdC5mYWlsXSBjYXVzZSA6IFwiJyArIGUubWVzc2FnZSArICdcIicpO1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlQnJvd3NlckxvYWRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxlQnJvd3Nlci5ib2R5LnN0eWxlLm1heEhlaWdodCA9ICh0aGlzLl93LmlubmVySGVpZ2h0IC0gdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyLmhlYWRlci5vZmZzZXRIZWlnaHQgLSA1MCkgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gZXhjZXB0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5jbG9zZUJyb3dzZXJMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4bWxIdHRwLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gIXhtbEh0dHAucmVzcG9uc2VUZXh0ID8geG1sSHR0cCA6IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyID0gJ1tTVU5FRElUT1IuZmlsZUJyb3dzZXIuZ2V0LnNlcnZlckV4Y2VwdGlvbl0gc3RhdHVzOiAnICsgeG1sSHR0cC5zdGF0dXMgKyAnLCByZXNwb25zZTogJyArIChyZXMuZXJyb3JNZXNzYWdlIHx8IHhtbEh0dHAucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2RyYXdMaXN0SXRlbTogZnVuY3Rpb24gKGl0ZW1zLCB1cGRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyQ29udGV4dCA9IHRoaXMuY29udGV4dC5maWxlQnJvd3NlcjtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbkNvbnRleHQgPSB0aGlzLmNvbnRleHRbZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW5dO1xuXG4gICAgICAgICAgICBjb25zdCBfdGFncyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uU2l6ZSA9IHBsdWdpbkNvbnRleHQuY29sdW1uU2l6ZSB8fCBmaWxlQnJvd3NlckNvbnRleHQuY29sdW1uU2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0U2l6ZSA9IGNvbHVtblNpemUgPD0gMSA/IDEgOiAoTWF0aC5yb3VuZChsZW4vY29sdW1uU2l6ZSkgfHwgMSk7XG4gICAgICAgICAgICBjb25zdCBkcmF3SXRlbUhhbmRsZXIgPSBwbHVnaW5Db250ZXh0Lml0ZW1UZW1wbGF0ZUhhbmRsZXI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCB0YWdzSFRNTCA9ICcnO1xuICAgICAgICAgICAgbGV0IGxpc3RIVE1MID0gJzxkaXYgY2xhc3M9XCJzZS1maWxlLWl0ZW0tY29sdW1uXCI+JztcbiAgICAgICAgICAgIGxldCBjb2x1bW5zID0gMTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpdGVtLCB0YWdzOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgdGFncyA9ICFpdGVtLnRhZyA/IFtdIDogdHlwZW9mIGl0ZW0udGFnID09PSAnc3RyaW5nJyA/IGl0ZW0udGFnLnNwbGl0KCcsJykgOiBpdGVtLnRhZztcbiAgICAgICAgICAgICAgICB0YWdzID0gaXRlbS50YWcgPSB0YWdzLm1hcChmdW5jdGlvbiAodikgeyByZXR1cm4gdi50cmltKCk7IH0pO1xuICAgICAgICAgICAgICAgIGxpc3RIVE1MICs9IGRyYXdJdGVtSGFuZGxlcihpdGVtKTtcblxuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICUgc3BsaXRTaXplID09PSAwICYmIGNvbHVtbnMgPCBjb2x1bW5TaXplICYmIChpICsgMSkgPCBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucysrO1xuICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCArPSAnPC9kaXY+PGRpdiBjbGFzcz1cInNlLWZpbGUtaXRlbS1jb2x1bW5cIj4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlICYmIHRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gMCwgdExlbiA9IHRhZ3MubGVuZ3RoLCB0YWc7IHQgPCB0TGVuOyB0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IHRhZ3NbdF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnICYmIF90YWdzLmluZGV4T2YodGFnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGFncy5wdXNoKHRhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnc0hUTUwgKz0gJzxhIHRpdGxlPVwiJyArIHRhZyArICdcIj4nICsgdGFnICsgJzwvYT4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdEhUTUwgKz0gJzwvZGl2Pic7XG5cbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5saXN0LmlubmVySFRNTCA9IGxpc3RIVE1MO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lml0ZW1zID0gaXRlbXM7XG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LnRhZ0FyZWEuaW5uZXJIVE1MID0gdGFnc0hUTUw7XG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LnRhZ0VsZW1lbnRzID0gZmlsZUJyb3dzZXJDb250ZXh0LnRhZ0FyZWEucXVlcnlTZWxlY3RvckFsbCgnQScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ2xpY2tUYWc6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmlzQW5jaG9yKHRhcmdldCkpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRhcmdldC50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyUGx1Z2luID0gdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyO1xuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyO1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RUYWcgPSBmaWxlQnJvd3NlckNvbnRleHQudGFnQXJlYS5xdWVyeVNlbGVjdG9yKCdhW3RpdGxlPVwiJyArIHRhZ05hbWUgKyAnXCJdJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFRhZ3MgPSBmaWxlQnJvd3NlckNvbnRleHQuc2VsZWN0ZWRUYWdzO1xuICAgICAgICAgICAgY29uc3Qgc1RhZ0luZGV4ID0gc2VsZWN0ZWRUYWdzLmluZGV4T2YodGFnTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChzVGFnSW5kZXggPiAtMSl7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWdzLnNwbGljZShzVGFnSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhzZWxlY3RUYWcsICdvbicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRhZ3MucHVzaCh0YWdOYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2VsZWN0VGFnLCAnb24nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlsZUJyb3dzZXJQbHVnaW4uX2RyYXdMaXN0SXRlbS5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWdzLmxlbmd0aCA9PT0gMCA/XG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lml0ZW1zIDpcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnRhZy5zb21lKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFRhZ3MuaW5kZXhPZih0YWcpID4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLCBmYWxzZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25DbGlja0ZpbGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlckNvbnRleHQgPSB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXI7XG4gICAgICAgICAgICBjb25zdCBsaXN0RWwgPSBmaWxlQnJvd3NlckNvbnRleHQubGlzdDtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gbGlzdEVsKSByZXR1cm47XG5cbiAgICAgICAgICAgIHdoaWxlIChsaXN0RWwgIT09IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kKSBicmVhaztcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZmlsZUJyb3dzZXJDb250ZXh0LnNlbGVjdG9ySGFuZGxlciB8fCB0aGlzLmNvbnRleHRbZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW5dLnNlbGVjdG9ySGFuZGxlcik7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuY2xvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIGhhbmRsZXIodGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghd2luZG93LlNVTkVESVRPUl9NT0RVTEVTKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnU1VORURJVE9SX01PRFVMRVMnLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUywgJ2ZpbGVCcm93c2VyJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogZmlsZUJyb3dzZXJcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVCcm93c2VyO1xufSkpOyIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XG4gICAgICAgICAgICBmdW5jdGlvbiAodykge1xuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9MQU5HIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcbiAgICAgICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xuICAgIH1cbn0odHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBub0dsb2JhbCkge1xuICAgIGNvbnN0IGxhbmcgPSB7XG4gICAgICAgIGNvZGU6ICdlbicsXG4gICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdEZWZhdWx0JyxcbiAgICAgICAgICAgIHNhdmU6ICdTYXZlJyxcbiAgICAgICAgICAgIGZvbnQ6ICdGb250JyxcbiAgICAgICAgICAgIGZvcm1hdHM6ICdGb3JtYXRzJyxcbiAgICAgICAgICAgIGZvbnRTaXplOiAnU2l6ZScsXG4gICAgICAgICAgICBib2xkOiAnQm9sZCcsXG4gICAgICAgICAgICB1bmRlcmxpbmU6ICdVbmRlcmxpbmUnLFxuICAgICAgICAgICAgaXRhbGljOiAnSXRhbGljJyxcbiAgICAgICAgICAgIHN0cmlrZTogJ1N0cmlrZScsXG4gICAgICAgICAgICBzdWJzY3JpcHQ6ICdTdWJzY3JpcHQnLFxuICAgICAgICAgICAgc3VwZXJzY3JpcHQ6ICdTdXBlcnNjcmlwdCcsXG4gICAgICAgICAgICByZW1vdmVGb3JtYXQ6ICdSZW1vdmUgRm9ybWF0JyxcbiAgICAgICAgICAgIGZvbnRDb2xvcjogJ0ZvbnQgQ29sb3InLFxuICAgICAgICAgICAgaGlsaXRlQ29sb3I6ICdIaWdobGlnaHQgQ29sb3InLFxuICAgICAgICAgICAgaW5kZW50OiAnSW5kZW50JyxcbiAgICAgICAgICAgIG91dGRlbnQ6ICdPdXRkZW50JyxcbiAgICAgICAgICAgIGFsaWduOiAnQWxpZ24nLFxuICAgICAgICAgICAgYWxpZ25MZWZ0OiAnQWxpZ24gbGVmdCcsXG4gICAgICAgICAgICBhbGlnblJpZ2h0OiAnQWxpZ24gcmlnaHQnLFxuICAgICAgICAgICAgYWxpZ25DZW50ZXI6ICdBbGlnbiBjZW50ZXInLFxuICAgICAgICAgICAgYWxpZ25KdXN0aWZ5OiAnQWxpZ24ganVzdGlmeScsXG4gICAgICAgICAgICBsaXN0OiAnTGlzdCcsXG4gICAgICAgICAgICBvcmRlckxpc3Q6ICdPcmRlcmVkIGxpc3QnLFxuICAgICAgICAgICAgdW5vcmRlckxpc3Q6ICdVbm9yZGVyZWQgbGlzdCcsXG4gICAgICAgICAgICBob3Jpem9udGFsUnVsZTogJ0hvcml6b250YWwgbGluZScsXG4gICAgICAgICAgICBocl9zb2xpZDogJ1NvbGlkJyxcbiAgICAgICAgICAgIGhyX2RvdHRlZDogJ0RvdHRlZCcsXG4gICAgICAgICAgICBocl9kYXNoZWQ6ICdEYXNoZWQnLFxuICAgICAgICAgICAgdGFibGU6ICdUYWJsZScsXG4gICAgICAgICAgICBsaW5rOiAnTGluaycsXG4gICAgICAgICAgICBtYXRoOiAnTWF0aCcsXG4gICAgICAgICAgICBpbWFnZTogJ0ltYWdlJyxcbiAgICAgICAgICAgIHZpZGVvOiAnVmlkZW8nLFxuICAgICAgICAgICAgYXVkaW86ICdBdWRpbycsXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiAnRnVsbCBzY3JlZW4nLFxuICAgICAgICAgICAgc2hvd0Jsb2NrczogJ1Nob3cgYmxvY2tzJyxcbiAgICAgICAgICAgIGNvZGVWaWV3OiAnQ29kZSB2aWV3JyxcbiAgICAgICAgICAgIHVuZG86ICdVbmRvJyxcbiAgICAgICAgICAgIHJlZG86ICdSZWRvJyxcbiAgICAgICAgICAgIHByZXZpZXc6ICdQcmV2aWV3JyxcbiAgICAgICAgICAgIHByaW50OiAncHJpbnQnLFxuICAgICAgICAgICAgdGFnX3A6ICdQYXJhZ3JhcGgnLFxuICAgICAgICAgICAgdGFnX2RpdjogJ05vcm1hbCAoRElWKScsXG4gICAgICAgICAgICB0YWdfaDogJ0hlYWRlcicsXG4gICAgICAgICAgICB0YWdfYmxvY2txdW90ZTogJ1F1b3RlJyxcbiAgICAgICAgICAgIHRhZ19wcmU6ICdDb2RlJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnVGVtcGxhdGUnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogJ0xpbmUgaGVpZ2h0JyxcbiAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlOiAnUGFyYWdyYXBoIHN0eWxlJyxcbiAgICAgICAgICAgIHRleHRTdHlsZTogJ1RleHQgc3R5bGUnLFxuICAgICAgICAgICAgaW1hZ2VHYWxsZXJ5OiAnSW1hZ2UgZ2FsbGVyeScsXG4gICAgICAgICAgICBtZW50aW9uOiAnTWVudGlvbidcbiAgICAgICAgfSxcbiAgICAgICAgZGlhbG9nQm94OiB7XG4gICAgICAgICAgICBsaW5rQm94OiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbnNlcnQgTGluaycsXG4gICAgICAgICAgICAgICAgdXJsOiAnVVJMIHRvIGxpbmsnLFxuICAgICAgICAgICAgICAgIHRleHQ6ICdUZXh0IHRvIGRpc3BsYXknLFxuICAgICAgICAgICAgICAgIG5ld1dpbmRvd0NoZWNrOiAnT3BlbiBpbiBuZXcgd2luZG93JyxcbiAgICAgICAgICAgICAgICBkb3dubG9hZExpbmtDaGVjazogJ0Rvd25sb2FkIGxpbmsnLFxuICAgICAgICAgICAgICAgIGJvb2ttYXJrOiAnQm9va21hcmsnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF0aEJveDoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnTWF0aCcsXG4gICAgICAgICAgICAgICAgaW5wdXRMYWJlbDogJ01hdGhlbWF0aWNhbCBOb3RhdGlvbicsXG4gICAgICAgICAgICAgICAgZm9udFNpemVMYWJlbDogJ0ZvbnQgU2l6ZScsXG4gICAgICAgICAgICAgICAgcHJldmlld0xhYmVsOiAnUHJldmlldydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbWFnZUJveDoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnSW5zZXJ0IGltYWdlJyxcbiAgICAgICAgICAgICAgICBmaWxlOiAnU2VsZWN0IGZyb20gZmlsZXMnLFxuICAgICAgICAgICAgICAgIHVybDogJ0ltYWdlIFVSTCcsXG4gICAgICAgICAgICAgICAgYWx0VGV4dDogJ0FsdGVybmF0aXZlIHRleHQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmlkZW9Cb3g6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luc2VydCBWaWRlbycsXG4gICAgICAgICAgICAgICAgZmlsZTogJ1NlbGVjdCBmcm9tIGZpbGVzJyxcbiAgICAgICAgICAgICAgICB1cmw6ICdNZWRpYSBlbWJlZCBVUkwsIFlvdVR1YmUvVmltZW8nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXVkaW9Cb3g6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luc2VydCBBdWRpbycsXG4gICAgICAgICAgICAgICAgZmlsZTogJ1NlbGVjdCBmcm9tIGZpbGVzJyxcbiAgICAgICAgICAgICAgICB1cmw6ICdBdWRpbyBVUkwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnJvd3Nlcjoge1xuICAgICAgICAgICAgICAgIHRhZ3M6ICdUYWdzJyxcbiAgICAgICAgICAgICAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhcHRpb246ICdJbnNlcnQgZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgY2xvc2U6ICdDbG9zZScsXG4gICAgICAgICAgICBzdWJtaXRCdXR0b246ICdTdWJtaXQnLFxuICAgICAgICAgICAgcmV2ZXJ0QnV0dG9uOiAnUmV2ZXJ0JyxcbiAgICAgICAgICAgIHByb3BvcnRpb246ICdDb25zdHJhaW4gcHJvcG9ydGlvbnMnLFxuICAgICAgICAgICAgYmFzaWM6ICdCYXNpYycsXG4gICAgICAgICAgICBsZWZ0OiAnTGVmdCcsXG4gICAgICAgICAgICByaWdodDogJ1JpZ2h0JyxcbiAgICAgICAgICAgIGNlbnRlcjogJ0NlbnRlcicsXG4gICAgICAgICAgICB3aWR0aDogJ1dpZHRoJyxcbiAgICAgICAgICAgIGhlaWdodDogJ0hlaWdodCcsXG4gICAgICAgICAgICBzaXplOiAnU2l6ZScsXG4gICAgICAgICAgICByYXRpbzogJ1JhdGlvJ1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgICAgICBlZGl0OiAnRWRpdCcsXG4gICAgICAgICAgICB1bmxpbms6ICdVbmxpbmsnLFxuICAgICAgICAgICAgcmVtb3ZlOiAnUmVtb3ZlJyxcbiAgICAgICAgICAgIGluc2VydFJvd0Fib3ZlOiAnSW5zZXJ0IHJvdyBhYm92ZScsXG4gICAgICAgICAgICBpbnNlcnRSb3dCZWxvdzogJ0luc2VydCByb3cgYmVsb3cnLFxuICAgICAgICAgICAgZGVsZXRlUm93OiAnRGVsZXRlIHJvdycsXG4gICAgICAgICAgICBpbnNlcnRDb2x1bW5CZWZvcmU6ICdJbnNlcnQgY29sdW1uIGJlZm9yZScsXG4gICAgICAgICAgICBpbnNlcnRDb2x1bW5BZnRlcjogJ0luc2VydCBjb2x1bW4gYWZ0ZXInLFxuICAgICAgICAgICAgZGVsZXRlQ29sdW1uOiAnRGVsZXRlIGNvbHVtbicsXG4gICAgICAgICAgICBmaXhlZENvbHVtbldpZHRoOiAnRml4ZWQgY29sdW1uIHdpZHRoJyxcbiAgICAgICAgICAgIHJlc2l6ZTEwMDogJ1Jlc2l6ZSAxMDAlJyxcbiAgICAgICAgICAgIHJlc2l6ZTc1OiAnUmVzaXplIDc1JScsXG4gICAgICAgICAgICByZXNpemU1MDogJ1Jlc2l6ZSA1MCUnLFxuICAgICAgICAgICAgcmVzaXplMjU6ICdSZXNpemUgMjUlJyxcbiAgICAgICAgICAgIGF1dG9TaXplOiAnQXV0byBzaXplJyxcbiAgICAgICAgICAgIG1pcnJvckhvcml6b250YWw6ICdNaXJyb3IsIEhvcml6b250YWwnLFxuICAgICAgICAgICAgbWlycm9yVmVydGljYWw6ICdNaXJyb3IsIFZlcnRpY2FsJyxcbiAgICAgICAgICAgIHJvdGF0ZUxlZnQ6ICdSb3RhdGUgbGVmdCcsXG4gICAgICAgICAgICByb3RhdGVSaWdodDogJ1JvdGF0ZSByaWdodCcsXG4gICAgICAgICAgICBtYXhTaXplOiAnTWF4IHNpemUnLFxuICAgICAgICAgICAgbWluU2l6ZTogJ01pbiBzaXplJyxcbiAgICAgICAgICAgIHRhYmxlSGVhZGVyOiAnVGFibGUgaGVhZGVyJyxcbiAgICAgICAgICAgIG1lcmdlQ2VsbHM6ICdNZXJnZSBjZWxscycsXG4gICAgICAgICAgICBzcGxpdENlbGxzOiAnU3BsaXQgQ2VsbHMnLFxuICAgICAgICAgICAgSG9yaXpvbnRhbFNwbGl0OiAnSG9yaXpvbnRhbCBzcGxpdCcsXG4gICAgICAgICAgICBWZXJ0aWNhbFNwbGl0OiAnVmVydGljYWwgc3BsaXQnXG4gICAgICAgIH0sXG4gICAgICAgIG1lbnU6IHtcbiAgICAgICAgICAgIHNwYWNlZDogJ1NwYWNlZCcsXG4gICAgICAgICAgICBib3JkZXJlZDogJ0JvcmRlcmVkJyxcbiAgICAgICAgICAgIG5lb246ICdOZW9uJyxcbiAgICAgICAgICAgIHRyYW5zbHVjZW50OiAnVHJhbnNsdWNlbnQnLFxuICAgICAgICAgICAgc2hhZG93OiAnU2hhZG93JyxcbiAgICAgICAgICAgIGNvZGU6ICdDb2RlJ1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2Ygbm9HbG9iYWwgPT09IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX0xBTkcpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdTVU5FRElUT1JfTEFORycsIHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9MQU5HLCAnZW4nLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbGFuZ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZztcbn0pKTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE4IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2NvbG9yUGlja2VyJyxcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5jb2xvclBpY2tlciA9IHtcclxuICAgICAgICAgICAgY29sb3JMaXN0SFRNTDogJycsXHJcbiAgICAgICAgICAgIF9jb2xvcklucHV0OiAnJyxcclxuICAgICAgICAgICAgX2RlZmF1bHRDb2xvcjogJyMwMDAnLFxyXG4gICAgICAgICAgICBfc3R5bGVQcm9wZXJ0eTogJ2NvbG9yJyxcclxuICAgICAgICAgICAgX2N1cnJlbnRDb2xvcjogJycsXHJcbiAgICAgICAgICAgIF9jb2xvckxpc3Q6IFtdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgY29udGV4dC5jb2xvclBpY2tlci5jb2xvckxpc3RIVE1MID0gdGhpcy5jcmVhdGVDb2xvckxpc3QoY29yZSwgdGhpcy5fbWFrZUNvbG9yTGlzdCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBjb2xvciBsaXN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1ha2VDb2xvciB0aGlzLl9tYWtlQ29sb3JMaXN0XHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBjcmVhdGVDb2xvckxpc3Q6IGZ1bmN0aW9uIChjb3JlLCBtYWtlQ29sb3IpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBjb2xvckxpc3QgPSAhb3B0aW9uLmNvbG9yTGlzdCB8fCBvcHRpb24uY29sb3JMaXN0Lmxlbmd0aCA9PT0gMCA/XHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICcjZmYwMDAwJywgJyNmZjVlMDAnLCAnI2ZmZTQwMCcsICcjYWJmMjAwJywgJyMwMGQ4ZmYnLCAnIzAwNTVmZicsICcjNjYwMGZmJywgJyNmZjAwZGQnLCAnIzAwMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAnI2ZmZDhkOCcsICcjZmFlMGQ0JywgJyNmYWY0YzAnLCAnI2U0ZjdiYScsICcjZDRmNGZhJywgJyNkOWU1ZmYnLCAnI2U4ZDlmZicsICcjZmZkOWZhJywgJyNmMWYxZjEnLFxyXG4gICAgICAgICAgICAgICAgJyNmZmE3YTcnLCAnI2ZmYzE5ZScsICcjZmFlZDdkJywgJyNjZWYyNzknLCAnI2IyZWJmNCcsICcjYjJjY2ZmJywgJyNkMWIyZmYnLCAnI2ZmYjJmNScsICcjYmRiZGJkJyxcclxuICAgICAgICAgICAgICAgICcjZjE1ZjVmJywgJyNmMjk2NjEnLCAnI2U1ZDg1YycsICcjYmNlNTVjJywgJyM1Y2QxZTUnLCAnIzY2OTlmZicsICcjYTM2NmZmJywgJyNmMjYxZGYnLCAnIzhjOGM4YycsXHJcbiAgICAgICAgICAgICAgICAnIzk4MDAwMCcsICcjOTkzODAwJywgJyM5OThhMDAnLCAnIzZiOTkwMCcsICcjMDA4Mjk5JywgJyMwMDMzOTknLCAnIzNkMDA5OScsICcjOTkwMDg1JywgJyMzNTM1MzUnLFxyXG4gICAgICAgICAgICAgICAgJyM2NzAwMDAnLCAnIzY2MjUwMCcsICcjNjY1YzAwJywgJyM0NzY2MDAnLCAnIzAwNTc2NicsICcjMDAyMjY2JywgJyMyOTAwNjYnLCAnIzY2MDA1OCcsICcjMjIyMjIyJ1xyXG4gICAgICAgICAgICBdIDogb3B0aW9uLmNvbG9yTGlzdDtcclxuXHJcbiAgICAgICAgbGV0IGNvbG9yQXJyID0gW107XHJcbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sb3JMaXN0Lmxlbmd0aCwgY29sb3I7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckxpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvckFyci5wdXNoKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGxlbiAtIDEpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPVwic2Utc2VsZWN0b3ItY29sb3JcIj4nICsgbWFrZUNvbG9yKGNvbG9yQXJyKSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxkaXYgY2xhc3M9XCJzZS1zZWxlY3Rvci1jb2xvclwiPicgKyBtYWtlQ29sb3IoY29sb3IpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlzdCArPSAnJyArXHJcbiAgICAgICAgICAgICc8Zm9ybSBjbGFzcz1cInNlLWZvcm0tZ3JvdXBcIj4nICtcclxuICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCI5XCIgY2xhc3M9XCJfc2VfY29sb3JfcGlja2VyX2lucHV0IHNlLWNvbG9yLWlucHV0XCIvPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwic2UtYnRuLXByaW1hcnkgX3NlX2NvbG9yX3BpY2tlcl9zdWJtaXRcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jaGVja2VkICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBfc2VfY29sb3JfcGlja2VyX3JlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5yZW1vdmVGb3JtYXQgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5lcmFzZSArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Zvcm0+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBieSB0aGlzLmNyZWF0ZUNvbG9yTGlzdFxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gY29sb3JMaXN0IENvbG9yIGxpc3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9tYWtlQ29sb3JMaXN0OiBmdW5jdGlvbiAoY29sb3JMaXN0KSB7XHJcbiAgICAgICAgbGV0IGxpc3QgPSAnJztcclxuXHJcbiAgICAgICAgbGlzdCArPSAnPHVsIGNsYXNzPVwic2UtY29sb3ItcGFsbGV0XCI+JztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sb3JMaXN0Lmxlbmd0aCwgY29sb3I7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb2xvciA9IGNvbG9yTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXZhbHVlPVwiJyArIGNvbG9yICsgJ1wiIHRpdGxlPVwiJyArIGNvbG9yICsgJ1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjonICsgY29sb3IgKyAnO1wiPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9saT4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEaXNwbGF5cyBvciByZXNldHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb2xvciBhdCBjb2xvciBsaXN0LlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIEN1cnJlbnQgU2VsZWN0ZWQgbm9kZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gY29sb3IgQ29sb3IgdmFsdWVcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKG5vZGUsIGNvbG9yKSB7XHJcbiAgICAgICAgY29uc3QgY29sb3JQaWNrZXIgPSB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXI7XHJcbiAgICAgICAgbGV0IGZpbGxDb2xvciA9IGNvbG9yID8gY29sb3IgOiBjb2xvclBpY2tlci5nZXRDb2xvckluTm9kZS5jYWxsKHRoaXMsIG5vZGUpIHx8IHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fZGVmYXVsdENvbG9yO1xyXG4gICAgICAgIGZpbGxDb2xvciA9IGNvbG9yUGlja2VyLmlzSGV4Q29sb3IoZmlsbENvbG9yKSA/IGZpbGxDb2xvciA6IGNvbG9yUGlja2VyLnJnYjJoZXgoZmlsbENvbG9yKSB8fCBmaWxsQ29sb3I7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbG9yTGlzdCA9IHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fY29sb3JMaXN0O1xyXG4gICAgICAgIGlmIChjb2xvckxpc3QpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbG9yTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGxDb2xvci50b0xvd2VyQ2FzZSgpID09PSBjb2xvckxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb2xvckxpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbG9yTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2xvclBpY2tlci5zZXRJbnB1dFRleHQuY2FsbCh0aGlzLCBjb2xvclBpY2tlci5jb2xvck5hbWUyaGV4LmNhbGwodGhpcywgZmlsbENvbG9yKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFN0b3JlIGNvbG9yIHZhbHVlc1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhleENvbG9yU3RyIEhheCBjb2xvciB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRDdXJyZW50Q29sb3I6IGZ1bmN0aW9uIChoZXhDb2xvclN0cikge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fY3VycmVudENvbG9yID0gaGV4Q29sb3JTdHI7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyLl9jb2xvcklucHV0LnN0eWxlLmJvcmRlckNvbG9yID0gaGV4Q29sb3JTdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldCBjb2xvciBhdCBpbnB1dCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaGV4Q29sb3JTdHIgSGF4IGNvbG9yIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldElucHV0VGV4dDogZnVuY3Rpb24gKGhleENvbG9yU3RyKSB7XHJcbiAgICAgICAgaGV4Q29sb3JTdHIgPSAvXiMvLnRlc3QoaGV4Q29sb3JTdHIpID8gaGV4Q29sb3JTdHIgOiAnIycgKyBoZXhDb2xvclN0cjtcclxuICAgICAgICB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2NvbG9ySW5wdXQudmFsdWUgPSBoZXhDb2xvclN0cjtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuc2V0Q3VycmVudENvbG9yLmNhbGwodGhpcywgaGV4Q29sb3JTdHIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIGNvbG9yIHZhbHVlIGF0IGNvbG9yIHByb3BlcnR5IG9mIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBTZWxlY3RlZCBub2RlIFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0Q29sb3JJbk5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgbGV0IGZpbmRDb2xvciA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlUHJvcGVydHkgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX3N0eWxlUHJvcGVydHk7XHJcblxyXG4gICAgICAgIHdoaWxlIChub2RlICYmICF0aGlzLnV0aWwuaXNXeXNpd3lnRGl2KG5vZGUpICYmIGZpbmRDb2xvci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEgJiYgbm9kZS5zdHlsZVtzdHlsZVByb3BlcnR5XSkgZmluZENvbG9yID0gbm9kZS5zdHlsZVtzdHlsZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmaW5kQ29sb3I7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIHRvIGNoZWNrIGhleCBmb3JtYXQgY29sb3JcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQ29sb3IgdmFsdWVcclxuICAgICAqL1xyXG4gICAgaXNIZXhDb2xvcjogZnVuY3Rpb24gKHN0cikge1xyXG4gICAgICAgIHJldHVybiAvXiNbMC05YS1mXXszfSg/OlswLTlhLWZdezN9KT8kL2kudGVzdChzdHIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0byBjb252ZXJ0IGhleCBmb3JtYXQgdG8gYSByZ2IgY29sb3JcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZ2IgUkdCIGNvbG9yIGZvcm1hdFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcmdiMmhleDogZnVuY3Rpb24gKHJnYikge1xyXG4gICAgICAgIGNvbnN0IHJnYk1hdGNoID0gcmdiLm1hdGNoKC9ecmdiYT9bXFxzK10/XFwoW1xccytdPyhcXGQrKVtcXHMrXT8sW1xccytdPyhcXGQrKVtcXHMrXT8sW1xccytdPyhcXGQrKVtcXHMrXT8vaSk7XHJcblxyXG4gICAgICAgIHJldHVybiAocmdiTWF0Y2ggJiYgcmdiTWF0Y2gubGVuZ3RoID09PSA0KSA/IFwiI1wiICtcclxuICAgICAgICAgICAgKFwiMFwiICsgcGFyc2VJbnQocmdiTWF0Y2hbMV0sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpICtcclxuICAgICAgICAgICAgKFwiMFwiICsgcGFyc2VJbnQocmdiTWF0Y2hbMl0sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpICtcclxuICAgICAgICAgICAgKFwiMFwiICsgcGFyc2VJbnQocmdiTWF0Y2hbM10sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpIDogJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGNvbG9yIHZhbHVlcyBvZiBvdGhlciBmb3JtYXRzIHRvIGhleCBjb2xvciB2YWx1ZXMgYW5kIHJldHVybnMuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29sb3JOYW1lIENvbG9yIHZhbHVlXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBjb2xvck5hbWUyaGV4OiBmdW5jdGlvbiAoY29sb3JOYW1lKSB7XHJcbiAgICAgICAgaWYgKC9eIy8udGVzdChjb2xvck5hbWUpKSByZXR1cm4gY29sb3JOYW1lO1xyXG4gICAgICAgIHZhciB0ZW1wID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRlbXAuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0ZW1wLnN0eWxlLmNvbG9yID0gY29sb3JOYW1lO1xyXG4gICAgICAgIHZhciBjb2xvcnMgPSB0aGlzLl93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fZC5ib2R5LmFwcGVuZENoaWxkKHRlbXApKS5jb2xvci5tYXRjaCgvXFxkKy9nKS5tYXAoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHBhcnNlSW50KGEsMTApOyB9KTtcclxuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbSh0ZW1wKTtcclxuICAgICAgICByZXR1cm4gKGNvbG9ycy5sZW5ndGggPj0gMykgPyAnIycgKyAoKCgxIDw8IDI0KSArIChjb2xvcnNbMF0gPDwgMTYpICsgKGNvbG9yc1sxXSA8PCA4KSArIGNvbG9yc1syXSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkgOiBmYWxzZTtcclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGNvbG9yUGlja2VyIGZyb20gJy4uL21vZHVsZXMvX2NvbG9yUGlja2VyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdmb250Q29sb3InLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtjb2xvclBpY2tlcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuZm9udENvbG9yID0ge1xyXG4gICAgICAgICAgICBwcmV2aWV3RWw6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9ySW5wdXQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yTGlzdDogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHQuZm9udENvbG9yLmNvbG9ySW5wdXQgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29sb3JfcGlja2VyX2lucHV0Jyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgY29udGV4dC5mb250Q29sb3IuY29sb3JJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25DaGFuZ2VJbnB1dC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29sb3JfcGlja2VyX3N1Ym1pdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9yZW1vdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucmVtb3ZlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGxpc3REaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBjb250ZXh0LmZvbnRDb2xvci5jb2xvckxpc3QgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbG9yQXJlYSA9IGNvcmUuY29udGV4dC5jb2xvclBpY2tlci5jb2xvckxpc3RIVE1MO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBjb2xvckFyZWE7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRQaWNrZXIgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXI7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEZvbnRDb2xvciA9IHRoaXMuY29udGV4dC5mb250Q29sb3I7XHJcblxyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX2NvbG9ySW5wdXQgPSBjb250ZXh0Rm9udENvbG9yLmNvbG9ySW5wdXQ7XHJcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnd3Q29tcHV0ZWRTdHlsZS5jb2xvcjtcclxuICAgICAgICBjb250ZXh0UGlja2VyLl9kZWZhdWx0Q29sb3IgPSBjb2xvciA/IHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5pc0hleENvbG9yKGNvbG9yKSA/IGNvbG9yIDogdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLnJnYjJoZXgoY29sb3IpIDogXCIjMzMzMzMzXCI7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fc3R5bGVQcm9wZXJ0eSA9ICdjb2xvcic7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fY29sb3JMaXN0ID0gY29udGV4dEZvbnRDb2xvci5jb2xvckxpc3Q7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLmluaXQuY2FsbCh0aGlzLCB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBfY29sb3JQaWNrZXJcclxuICAgICAqL1xyXG4gICAgb25DaGFuZ2VJbnB1dDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuc2V0Q3VycmVudENvbG9yLmNhbGwodGhpcywgZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZm9udENvbG9yLmFwcGx5Q29sb3IuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2N1cnJlbnRDb2xvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZvbnRDb2xvci5hcHBseUNvbG9yLmNhbGwodGhpcywgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgWydjb2xvciddLCBbJ3NwYW4nXSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFwcGx5Q29sb3I6IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgICAgIGlmICghY29sb3IpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgbmV3Tm9kZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIHRoaXMubm9kZUNoYW5nZShuZXdOb2RlLCBbJ2NvbG9yJ10sIG51bGwsIG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBjb2xvclBpY2tlciBmcm9tICcuLi9tb2R1bGVzL19jb2xvclBpY2tlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnaGlsaXRlQ29sb3InLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtjb2xvclBpY2tlcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuaGlsaXRlQ29sb3IgPSB7XHJcbiAgICAgICAgICAgIHByZXZpZXdFbDogbnVsbCxcclxuICAgICAgICAgICAgY29sb3JJbnB1dDogbnVsbCxcclxuICAgICAgICAgICAgY29sb3JMaXN0OiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcbiAgICAgICAgY29udGV4dC5oaWxpdGVDb2xvci5jb2xvcklucHV0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9pbnB1dCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGNvbnRleHQuaGlsaXRlQ29sb3IuY29sb3JJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25DaGFuZ2VJbnB1dC5iaW5kKGNvcmUpKTtcclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29sb3JfcGlja2VyX3N1Ym1pdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9yZW1vdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucmVtb3ZlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGxpc3REaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5oaWxpdGVDb2xvci5jb2xvckxpc3QgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xyXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIGxpc3REaXYgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbG9yQXJlYSA9IGNvcmUuY29udGV4dC5jb2xvclBpY2tlci5jb2xvckxpc3RIVE1MO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBjb2xvckFyZWE7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRQaWNrZXIgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXI7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEhpbGl0ZUNvbG9yID0gdGhpcy5jb250ZXh0LmhpbGl0ZUNvbG9yO1xyXG5cclxuICAgICAgICBjb250ZXh0UGlja2VyLl9jb2xvcklucHV0ID0gY29udGV4dEhpbGl0ZUNvbG9yLmNvbG9ySW5wdXQ7XHJcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnd3Q29tcHV0ZWRTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fZGVmYXVsdENvbG9yID0gY29sb3IgPyB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuaXNIZXhDb2xvcihjb2xvcikgPyBjb2xvciA6IHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5yZ2IyaGV4KGNvbG9yKSA6IFwiI2ZmZmZmZlwiO1xyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX3N0eWxlUHJvcGVydHkgPSAnYmFja2dyb3VuZENvbG9yJztcclxuICAgICAgICBjb250ZXh0UGlja2VyLl9jb2xvckxpc3QgPSBjb250ZXh0SGlsaXRlQ29sb3IuY29sb3JMaXN0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5pbml0LmNhbGwodGhpcywgdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCksIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgX2NvbG9yUGlja2VyXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlSW5wdXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLnNldEN1cnJlbnRDb2xvci5jYWxsKHRoaXMsIGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmhpbGl0ZUNvbG9yLmFwcGx5Q29sb3IuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2N1cnJlbnRDb2xvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmhpbGl0ZUNvbG9yLmFwcGx5Q29sb3IuY2FsbCh0aGlzLCBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMubm9kZUNoYW5nZShudWxsLCBbJ2JhY2tncm91bmQtY29sb3InXSwgWydzcGFuJ10sIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhcHBseUNvbG9yOiBmdW5jdGlvbiAoY29sb3IpIHtcclxuICAgICAgICBpZiAoIWNvbG9yKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgbmV3Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcclxuICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobmV3Tm9kZSwgWydiYWNrZ3JvdW5kLWNvbG9yJ10sIG51bGwsIG51bGwpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICd0ZW1wbGF0ZScsXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcbiAgICAgICAgY29udGV4dC50ZW1wbGF0ZSA9IHt9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgdGVtcGxhdGVEaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XG5cbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cbiAgICAgICAgdGVtcGxhdGVEaXYucXVlcnlTZWxlY3RvcigndWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja3VwLmJpbmQoY29yZSkpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCB0ZW1wbGF0ZURpdik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICB0ZW1wbGF0ZURpdiA9IG51bGw7XG4gICAgfSxcblxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTGlzdCA9IGNvcmUub3B0aW9ucy50ZW1wbGF0ZXM7XG4gICAgICAgIGlmICghdGVtcGxhdGVMaXN0IHx8IHRlbXBsYXRlTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnBsdWdpbnMudGVtcGxhdGUuZmFpbF0gVG8gdXNlIHRoZSBcInRlbXBsYXRlXCIgcGx1Z2luLCBwbGVhc2UgZGVmaW5lIHRoZSBcInRlbXBsYXRlc1wiIG9wdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLWxpc3QtbGF5ZXInO1xuXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1zdWJtZW51IHNlLWxpc3QtaW5uZXJcIj4nICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0ZW1wbGF0ZUxpc3QubGVuZ3RoLCB0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHQgPSB0ZW1wbGF0ZUxpc3RbaV07XG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgaSArICdcIiB0aXRsZT1cIicgKyB0Lm5hbWUgKyAnXCI+JyArIHQubmFtZSArICc8L2J1dHRvbj48L2xpPic7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdCArPSAnPC91bD48L2Rpdj4nO1xuXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcblxuICAgICAgICByZXR1cm4gbGlzdERpdjtcbiAgICB9LFxuXG4gICAgcGlja3VwOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoIS9eQlVUVE9OJC9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZXNbZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyldO1xuXG4gICAgICAgIGlmICh0ZW1wLmh0bWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudHModGVtcC5odG1sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IudGVtcGxhdGUuZmFpbF0gY2F1c2UgOiBcInRlbXBsYXRlc1tpXS5odG1sIG5vdCBmb3VuZFwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuICAgIH1cbn07IiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTggSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnc2VsZWN0TWVudScsXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb3JlLmNvbnRleHQuc2VsZWN0TWVudSA9IHtcbiAgICAgICAgICAgIGNhbGxlcjoge30sXG4gICAgICAgICAgICBjYWxsZXJDb250ZXh0OiBudWxsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIHNldEZvcm06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwic2Utc2VsZWN0LWxpc3RcIj48L2Rpdj4nO1xuICAgIH0sXG5cbiAgICBjcmVhdGVMaXN0OiBmdW5jdGlvbiAobGlzdENvbnRleHQsIGl0ZW1zLCBodG1sKSB7XG4gICAgICAgIGxpc3RDb250ZXh0LmZvcm0uaW5uZXJIVE1MID0gJzx1bD4nICsgaHRtbCArICc8L3VsPic7XG4gICAgICAgIGxpc3RDb250ZXh0Lml0ZW1zID0gaXRlbXM7XG4gICAgICAgIGxpc3RDb250ZXh0Lm1lbnVzID0gbGlzdENvbnRleHQuZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xuICAgIH0sXG5cbiAgICBpbml0RXZlbnQ6IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBmb3Jtcykge1xuICAgICAgICBjb25zdCBmb3JtID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLXNlbGVjdC1saXN0Jyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJbcGx1Z2luTmFtZV0gPSB7XG4gICAgICAgICAgICBmb3JtOiBmb3JtLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgbWVudXM6IFtdLFxuICAgICAgICAgICAgaW5kZXg6IC0xLFxuICAgICAgICAgICAgaXRlbTogbnVsbCxcbiAgICAgICAgICAgIGNsaWNrTWV0aG9kOiBudWxsLFxuICAgICAgICAgICAgY2FsbGVyTmFtZTogcGx1Z2luTmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub25Nb3VzZWRvd25fbGlzdCk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub25Nb3VzZU1vdmVfbGlzdC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51Lm9uQ2xpY2tfbGlzdC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcbiAgICB9LFxuXG4gICAgb25Nb3VzZWRvd25fbGlzdDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG5cbiAgICBvbk1vdXNlTW92ZV9saXN0OiBmdW5jdGlvbiAoY29udGV4dCwgZSkge1xuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dC5mb3JtLCAnX19zZV9zZWxlY3QtbWVudS1tb3VzZS1tb3ZlJyk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybjtcbiAgICAgICAgY29udGV4dC5pbmRleCA9IGluZGV4ICogMTtcbiAgICB9LFxuXG4gICAgb25DbGlja19saXN0OiBmdW5jdGlvbiAoY29udGV4dCwgZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xuICAgICAgICBpZiAoIWluZGV4KSByZXR1cm47XG4gICAgICAgIGNvbnRleHQuY2xpY2tNZXRob2QuY2FsbCh0aGlzLCBjb250ZXh0Lml0ZW1zW2luZGV4XSk7XG4gICAgfSxcblxuICAgIG1vdmVJdGVtOiBmdW5jdGlvbiAobGlzdENvbnRleHQsIG51bSkge1xuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MobGlzdENvbnRleHQuZm9ybSwgJ19fc2Vfc2VsZWN0LW1lbnUtbW91c2UtbW92ZScpO1xuICAgICAgICBudW0gPSBsaXN0Q29udGV4dC5pbmRleCArIG51bTtcbiAgICAgICAgY29uc3QgbWVudXMgPSBsaXN0Q29udGV4dC5tZW51cztcbiAgICAgICAgY29uc3QgbGVuID0gbWVudXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBzZWxlY3RJbmRleCA9IGxpc3RDb250ZXh0LmluZGV4ID0gbnVtID49IGxlbiA/IDAgOiBudW0gPCAwID8gbGVuIC0gMSA6IG51bTtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBzZWxlY3RJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhtZW51c1tpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MobWVudXNbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxpc3RDb250ZXh0Lml0ZW0gPSBsaXN0Q29udGV4dC5pdGVtc1tzZWxlY3RJbmRleF07XG4gICAgfSxcblxuICAgIGdldEl0ZW06IGZ1bmN0aW9uIChsaXN0Q29udGV4dCwgaW5kZXgpIHtcbiAgICAgICAgaW5kZXggPSAoIWluZGV4IHx8IGluZGV4IDwgMCkgPyBsaXN0Q29udGV4dC5pbmRleCA6IGluZGV4O1xuICAgICAgICByZXR1cm4gbGlzdENvbnRleHQuaXRlbXNbaW5kZXhdO1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24gKGNhbGxlck5hbWUsIGNsaWNrTWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IGxpc3RDb250ZXh0ID0gdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyW2NhbGxlck5hbWVdO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0ID0gbGlzdENvbnRleHQ7XG4gICAgICAgIGxpc3RDb250ZXh0LmNsaWNrTWV0aG9kID0gY2xpY2tNZXRob2Q7XG4gICAgICAgIGxpc3RDb250ZXh0LmNhbGxlck5hbWUgPSBjYWxsZXJOYW1lO1xuICAgIH0sXG5cbiAgICBvcGVuOiBmdW5jdGlvbiAobGlzdENvbnRleHQsIHBvc2l0aW9uSGFuZGxlcikge1xuICAgICAgICBjb25zdCBmb3JtID0gbGlzdENvbnRleHQuZm9ybTtcbiAgICAgICAgZm9ybS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIGZvcm0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIHBvc2l0aW9uSGFuZGxlcihmb3JtKTtcbiAgICAgICAgZm9ybS5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XG4gICAgfSxcblxuICAgIGNsb3NlOiBmdW5jdGlvbiAobGlzdENvbnRleHQpIHtcbiAgICAgICAgbGlzdENvbnRleHQuZm9ybS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBsaXN0Q29udGV4dC5pdGVtcyA9IFtdO1xuICAgICAgICBsaXN0Q29udGV4dC5tZW51cyA9IFtdO1xuICAgICAgICBsaXN0Q29udGV4dC5pbmRleCA9IC0xO1xuICAgICAgICBsaXN0Q29udGV4dC5pdGVtID0gbnVsbDtcbiAgICB9LFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKGxpc3RDb250ZXh0KSB7XG4gICAgICAgIGlmICghbGlzdENvbnRleHQpIHJldHVybjtcbiAgICAgICAgbGlzdENvbnRleHQuaXRlbXMgPSBbXTtcbiAgICAgICAgbGlzdENvbnRleHQubWVudXMgPSBbXTtcbiAgICAgICAgbGlzdENvbnRleHQuaW5kZXggPSAtMTtcbiAgICAgICAgbGlzdENvbnRleHQuaXRlbSA9IG51bGw7XG4gICAgICAgIGxpc3RDb250ZXh0LmNhbGxlck5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCA9IG51bGw7XG4gICAgfVxufTsiLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHNlbGVjdE1lbnUgZnJvbSAnLi9fc2VsZWN0TWVudSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnYW5jaG9yJyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtzZWxlY3RNZW51XSk7XG4gICAgICAgIFxuICAgICAgICBjb3JlLmNvbnRleHQuYW5jaG9yID0ge1xuICAgICAgICAgICAgY2FsbGVyOiB7fSxcbiAgICAgICAgICAgIGZvcm1zOiB0aGlzLnNldERpYWxvZ0Zvcm0oY29yZSksXG4gICAgICAgICAgICBob3N0OiAoY29yZS5fdy5sb2NhdGlvbi5vcmlnaW4gKyBjb3JlLl93LmxvY2F0aW9uLnBhdGhuYW1lKS5yZXBsYWNlKC9cXC8kLywgJycpLFxuICAgICAgICAgICAgY2FsbGVyQ29udGV4dDogbnVsbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKiogZGlhbG9nICovXG4gICAgc2V0RGlhbG9nRm9ybTogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgcmVsTGlzdCA9IGNvcmUub3B0aW9ucy5saW5rUmVsO1xuICAgICAgICBjb25zdCBkZWZhdWx0UmVsID0gKGNvcmUub3B0aW9ucy5saW5rUmVsRGVmYXVsdC5kZWZhdWx0IHx8ICcnKS5zcGxpdCgnICcpO1xuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XG4gICAgICAgIGNvbnN0IGZvcm1zID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXG4gICAgICAgIGxldCBodG1sID0gJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctYm9keVwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xuICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3gudXJsICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybS1maWxlc1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBzZS1pbnB1dC11cmxcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiJyArIChjb3JlLm9wdGlvbnMucHJvdG9jb2wgfHwgJycpICsgJ1wiIC8+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctZmlsZXMtZWRnZS1idXR0b24gX3NlX2Jvb2ttYXJrX2J1dHRvblwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3guYm9va21hcmsgKyAnXCI+JyArIGljb25zLmJvb2ttYXJrICsgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICBjb3JlLnBsdWdpbnMuc2VsZWN0TWVudS5zZXRGb3JtKCkgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWFuY2hvci1wcmV2aWV3LWZvcm1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2Utc3ZnIHNlLWFuY2hvci1wcmV2aWV3LWljb24gX3NlX2FuY2hvcl9ib29rbWFya19pY29uXCI+JyArIGljb25zLmJvb2ttYXJrICsgJzwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2Utc3ZnIHNlLWFuY2hvci1wcmV2aWV3LWljb24gX3NlX2FuY2hvcl9kb3dubG9hZF9pY29uXCI+JyArIGljb25zLmRvd25sb2FkICsgJzwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9XCJzZS1saW5rLXByZXZpZXdcIj48L3ByZT4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXG4gICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC50ZXh0ICsgJzwvbGFiZWw+PGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBfc2VfYW5jaG9yX3RleHRcIiB0eXBlPVwidGV4dFwiIC8+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZvb3RlclwiPicgK1xuICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfYW5jaG9yX2NoZWNrXCIgLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC5uZXdXaW5kb3dDaGVjayArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfYW5jaG9yX2Rvd25sb2FkXCIgLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC5kb3dubG9hZExpbmtDaGVjayArICc8L2xhYmVsPic7XG4gICAgICAgICAgICBpZiAocmVsTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInNlLWFuY2hvci1yZWxcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBzZS1idG4tc2VsZWN0IHNlLWFuY2hvci1yZWwtYnRuXCI+Jmx0O3JlbCZndDs8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hbmNob3ItcmVsLXdyYXBwZXJcIj48cHJlIGNsYXNzPVwic2UtbGluay1wcmV2aWV3IHNlLWFuY2hvci1yZWwtcHJldmlld1wiPjwvcHJlPjwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtbGF5ZXJcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljIHNlLWxpc3QtY2hlY2tlZFwiPic7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlbExpc3QubGVuZ3RoLCByZWw7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZWwgPSByZWxMaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCcgKyAoZGVmYXVsdFJlbC5pbmRleE9mKHJlbCkgPiAtMSA/ICcgc2UtY2hlY2tlZCcgOiAnJykgKyAnXCIgZGF0YS1jb21tYW5kPVwiJyArIHJlbCArICdcIiB0aXRsZT1cIicgKyByZWwgKyAnXCI+PHNwYW4gY2xhc3M9XCJzZS1zdmdcIj4nICsgaWNvbnMuY2hlY2tlZCArICc8L3NwYW4+JyArIHJlbCArICc8L2J1dHRvbj48L2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvdWw+PC9kaXY+PC9kaXY+PC9kaXY+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xuXG4gICAgICAgIGZvcm1zLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIHJldHVybiBmb3JtcztcbiAgICB9LFxuXG4gICAgaW5pdEV2ZW50OiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgZm9ybXMpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yUGx1Z2luID0gdGhpcy5wbHVnaW5zLmFuY2hvcjtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyW3BsdWdpbk5hbWVdID0ge1xuICAgICAgICAgICAgbW9kYWw6IGZvcm1zLFxuICAgICAgICAgICAgdXJsSW5wdXQ6IG51bGwsXG4gICAgICAgICAgICBsaW5rRGVmYXVsdFJlbDogdGhpcy5vcHRpb25zLmxpbmtSZWxEZWZhdWx0LFxuICAgICAgICAgICAgZGVmYXVsdFJlbDogdGhpcy5vcHRpb25zLmxpbmtSZWxEZWZhdWx0LmRlZmF1bHQgfHwgJycsXG4gICAgICAgICAgICBjdXJyZW50UmVsOiBbXSxcbiAgICAgICAgICAgIGxpbmtBbmNob3I6IG51bGwsXG4gICAgICAgICAgICBsaW5rVmFsdWU6ICcnLFxuICAgICAgICAgICAgX2NoYW5nZTogZmFsc2UsXG4gICAgICAgICAgICBjYWxsZXJOYW1lOiBwbHVnaW5OYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmRlZmF1bHQgPT09ICdzdHJpbmcnKSBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmRlZmF1bHQgPSBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmRlZmF1bHQudHJpbSgpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdyA9PT0gJ3N0cmluZycpIGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdyA9IGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdy50cmltKCk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dC5saW5rRGVmYXVsdFJlbC5jaGVja19ib29rbWFyayA9PT0gJ3N0cmluZycpIGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfYm9va21hcmsgPSBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrLnRyaW0oKTtcblxuICAgICAgICBjb250ZXh0LnVybElucHV0ID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWlucHV0LXVybCcpO1xuICAgICAgICBjb250ZXh0LmFuY2hvclRleHQgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl90ZXh0Jyk7XG4gICAgICAgIGNvbnRleHQubmV3V2luZG93Q2hlY2sgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl9jaGVjaycpO1xuICAgICAgICBjb250ZXh0LmRvd25sb2FkQ2hlY2sgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl9kb3dubG9hZCcpO1xuICAgICAgICBjb250ZXh0LmRvd25sb2FkID0gZm9ybXMucXVlcnlTZWxlY3RvcignLl9zZV9hbmNob3JfZG93bmxvYWRfaWNvbicpO1xuICAgICAgICBjb250ZXh0LnByZXZpZXcgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuc2UtbGluay1wcmV2aWV3Jyk7XG4gICAgICAgIGNvbnRleHQuYm9va21hcmsgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl9ib29rbWFya19pY29uJyk7XG4gICAgICAgIGNvbnRleHQuYm9va21hcmtCdXR0b24gPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2Jvb2ttYXJrX2J1dHRvbicpO1xuXG4gICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmluaXRFdmVudC5jYWxsKHRoaXMsIHBsdWdpbk5hbWUsIGZvcm1zKTtcbiAgICAgICAgY29uc3QgbGlzdENvbnRleHQgPSB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJbcGx1Z2luTmFtZV07XG4gICAgICAgIFxuICAgICAgICAvKiogcmVsICovXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGlua1JlbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlbEJ1dHRvbiA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5zZS1hbmNob3ItcmVsLWJ0bicpO1xuICAgICAgICAgICAgY29udGV4dC5yZWxMaXN0ID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWxpc3QtbGF5ZXInKTtcbiAgICAgICAgICAgIGNvbnRleHQucmVsUHJldmlldyA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5zZS1hbmNob3ItcmVsLXByZXZpZXcnKTtcbiAgICAgICAgICAgIGNvbnRleHQucmVsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYW5jaG9yUGx1Z2luLm9uQ2xpY2tfcmVsQnV0dG9uLmJpbmQodGhpcywgY29udGV4dCkpO1xuICAgICAgICAgICAgY29udGV4dC5yZWxMaXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYW5jaG9yUGx1Z2luLm9uQ2xpY2tfcmVsTGlzdC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubmV3V2luZG93Q2hlY2suYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYW5jaG9yUGx1Z2luLm9uQ2hhbmdlX25ld1dpbmRvd0NoZWNrLmJpbmQodGhpcywgY29udGV4dCkpO1xuICAgICAgICBjb250ZXh0LmRvd25sb2FkQ2hlY2suYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYW5jaG9yUGx1Z2luLm9uQ2hhbmdlX2Rvd25sb2FkQ2hlY2suYmluZCh0aGlzLCBjb250ZXh0KSk7XG4gICAgICAgIGNvbnRleHQuYW5jaG9yVGV4dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGFuY2hvclBsdWdpbi5vbkNoYW5nZUFuY2hvclRleHQuYmluZCh0aGlzLCBjb250ZXh0KSk7XG4gICAgICAgIGNvbnRleHQudXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBhbmNob3JQbHVnaW4ub25DaGFuZ2VVcmxJbnB1dC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcbiAgICAgICAgY29udGV4dC51cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgYW5jaG9yUGx1Z2luLm9uS2V5RG93blVybElucHV0LmJpbmQodGhpcywgbGlzdENvbnRleHQpKTtcbiAgICAgICAgY29udGV4dC51cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGFuY2hvclBsdWdpbi5vbkZvY3VzVXJsSW5wdXQuYmluZCh0aGlzLCBjb250ZXh0LCBsaXN0Q29udGV4dCkpO1xuICAgICAgICBjb250ZXh0LnVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBhbmNob3JQbHVnaW4ub25CbHVyVXJsSW5wdXQuYmluZCh0aGlzLCBsaXN0Q29udGV4dCkpO1xuICAgICAgICBjb250ZXh0LmJvb2ttYXJrQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYW5jaG9yUGx1Z2luLm9uQ2xpY2tfYm9va21hcmtCdXR0b24uYmluZCh0aGlzLCBjb250ZXh0KSk7XG4gICAgfSxcblxuICAgIG9uOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgdXBkYXRlKSB7XG4gICAgICAgIGlmICghdXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLmluaXQuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yKTtcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYW5jaG9yVGV4dC52YWx1ZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgaHJlZiA9IGNvbnRleHRBbmNob3IubGlua0FuY2hvci5ocmVmO1xuICAgICAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gL1xcIy4rJC8udGVzdChocmVmKSA/IGhyZWYuc3Vic3RyKGhyZWYubGFzdEluZGV4T2YoJyMnKSkgOiBocmVmO1xuICAgICAgICAgICAgY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gY29udGV4dEFuY2hvci5saW5rQW5jaG9yLnRleHRDb250ZW50LnRyaW0oKSB8fCBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IuZ2V0QXR0cmlidXRlKCdhbHQnKTtcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IubmV3V2luZG93Q2hlY2suY2hlY2tlZCA9ICgvX2JsYW5rL2kudGVzdChjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IudGFyZ2V0KSA/IHRydWUgOiBmYWxzZSk7XG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkQ2hlY2suY2hlY2tlZCA9IGNvbnRleHRBbmNob3IubGlua0FuY2hvci5kb3dubG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyQ29udGV4dCA9IGNvbnRleHRBbmNob3I7XG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0UmVsLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgKHVwZGF0ZSAmJiBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IpID8gY29udGV4dEFuY2hvci5saW5rQW5jaG9yLnJlbCA6IGNvbnRleHRBbmNob3IuZGVmYXVsdFJlbCk7XG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0TGlua1ByZXZpZXcuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSk7XG4gICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51Lm9uLmNhbGwodGhpcywgY29udGV4dEFuY2hvci5jYWxsZXJOYW1lLCB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldEhlYWRlckJvb2ttYXJrKTtcbiAgICB9LFxuXG4gICAgX2Nsb3NlUmVsTWVudTogbnVsbCxcbiAgICB0b2dnbGVSZWxMaXN0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgc2hvdykge1xuICAgICAgICBpZiAoIXNob3cpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsdWdpbnMuYW5jaG9yLl9jbG9zZVJlbE1lbnUpIHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gY29udGV4dEFuY2hvci5yZWxCdXR0b247XG4gICAgICAgICAgICBjb25zdCByZWxMaXN0ID0gY29udGV4dEFuY2hvci5yZWxMaXN0O1xuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRhcmdldCwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgcmVsTGlzdC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICByZWxMaXN0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucnRsKSByZWxMaXN0LnN0eWxlLmxlZnQgPSAodGFyZ2V0Lm9mZnNldExlZnQgKyB0YXJnZXQub2Zmc2V0V2lkdGggKyAxKSArICdweCc7XG4gICAgICAgICAgICBlbHNlIHJlbExpc3Quc3R5bGUubGVmdCA9ICh0YXJnZXQub2Zmc2V0TGVmdCAtIHJlbExpc3Qub2Zmc2V0V2lkdGggLSAxKSArICdweCc7XG4gICAgICAgICAgICByZWxMaXN0LnN0eWxlLnRvcCA9ICh0YXJnZXQub2Zmc2V0VG9wICsgKHRhcmdldC5vZmZzZXRIZWlnaHQgLyAyKSAtIChyZWxMaXN0Lm9mZnNldEhlaWdodCAvIDIpKSArICdweCc7XG4gICAgICAgICAgICByZWxMaXN0LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcblxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5fY2xvc2VSZWxNZW51ID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCwgZSkge1xuICAgICAgICAgICAgICAgIGlmIChlICYmIChjb250ZXh0LnJlbEJ1dHRvbi5jb250YWlucyhlLnRhcmdldCkgfHwgY29udGV4dC5yZWxMaXN0LmNvbnRhaW5zKGUudGFyZ2V0KSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFyZ2V0LCAnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZWxMaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9jbG9zZVJlbE1lbnUpO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSA9IG51bGw7XG4gICAgICAgICAgICB9LmJpbmQodGhpcywgY29udGV4dEFuY2hvciwgdGFyZ2V0KTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLmFuY2hvci5fY2xvc2VSZWxNZW51KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrX3JlbEJ1dHRvbjogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGUpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci50b2dnbGVSZWxMaXN0LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgIXRoaXMudXRpbC5oYXNDbGFzcyhlLnRhcmdldCwgJ2FjdGl2ZScpKTtcbiAgICB9LFxuXG4gICAgb25DbGlja19yZWxMaXN0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgY29uc3QgY21kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XG4gICAgICAgIGlmICghY21kKSByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY29udGV4dEFuY2hvci5jdXJyZW50UmVsO1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGhpcy51dGlsLnRvZ2dsZUNsYXNzKHRhcmdldCwgJ3NlLWNoZWNrZWQnKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50LmluZGV4T2YoY21kKTtcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGN1cnJlbnQucHVzaChjbWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHRBbmNob3IucmVsUHJldmlldy50aXRsZSA9IGNvbnRleHRBbmNob3IucmVsUHJldmlldy50ZXh0Q29udGVudCA9IGN1cnJlbnQuam9pbignICcpO1xuICAgIH0sXG5cbiAgICBzZXRSZWw6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCByZWxBdHRyKSB7XG4gICAgICAgIGNvbnN0IHJlbExpc3RFbCA9IGNvbnRleHRBbmNob3IucmVsTGlzdDtcbiAgICAgICAgY29uc3QgcmVscyA9IGNvbnRleHRBbmNob3IuY3VycmVudFJlbCA9ICFyZWxBdHRyID8gW10gOiByZWxBdHRyLnNwbGl0KCcgJyk7XG4gICAgICAgIGlmICghcmVsTGlzdEVsKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY2hlY2tlZFJlbCA9IHJlbExpc3RFbC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoZWNrZWRSZWwubGVuZ3RoLCBjbWQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY21kID0gY2hlY2tlZFJlbFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xuICAgICAgICAgICAgaWYgKHJlbHMuaW5kZXhPZihjbWQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY2hlY2tlZFJlbFtpXSwgJ3NlLWNoZWNrZWQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNoZWNrZWRSZWxbaV0sICdzZS1jaGVja2VkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0QW5jaG9yLnJlbFByZXZpZXcudGl0bGUgPSBjb250ZXh0QW5jaG9yLnJlbFByZXZpZXcudGV4dENvbnRlbnQgPSByZWxzLmpvaW4oJyAnKTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSGVhZGVyTGlzdDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGNvbnRleHRMaXN0LCB1cmxWYWx1ZSkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy51dGlsLmdldExpc3RDaGlsZHJlbih0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnLCBmdW5jdGlvbihjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gL2hbMS02XS9pLnRlc3QoY3VycmVudC5ub2RlTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaGVhZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCB2YWx1ZVJlZ0V4cCA9IG5ldyB0aGlzLl93LlJlZ0V4cCgnXicgKyB1cmxWYWx1ZS5yZXBsYWNlKC9eIy8sICcnKSwgJ2knKTtcbiAgICAgICAgY29uc3QgbGlzdCA9IFtdO1xuICAgICAgICBsZXQgaHRtbCA9ICcnO1xuICAgICAgICBmb3IobGV0IGkgPSAwLCBsZW4gPSBoZWFkZXJzLmxlbmd0aCwgaDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBoID0gaGVhZGVyc1tpXTtcbiAgICAgICAgICAgIGlmICghdmFsdWVSZWdFeHAudGVzdChoLnRleHRDb250ZW50KSkgY29udGludWU7XG4gICAgICAgICAgICBsaXN0LnB1c2goaCk7XG4gICAgICAgICAgICBodG1sICs9ICc8bGkgY2xhc3M9XCJzZS1zZWxlY3QtaXRlbVwiIGRhdGEtaW5kZXg9XCInICsgaSArICdcIj4nICsgaC50ZXh0Q29udGVudCArICc8L2xpPic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgY29udGV4dExpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuY3JlYXRlTGlzdChjb250ZXh0TGlzdCwgbGlzdCwgaHRtbCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5vcGVuLmNhbGwodGhpcywgY29udGV4dExpc3QsIHRoaXMucGx1Z2lucy5hbmNob3IuX3NldE1lbnVMaXN0UG9zaXRpb24uYmluZCh0aGlzLCBjb250ZXh0QW5jaG9yKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3NldE1lbnVMaXN0UG9zaXRpb246IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBsaXN0KSB7XG4gICAgICAgIGxpc3Quc3R5bGUudG9wID0gKGNvbnRleHRBbmNob3IudXJsSW5wdXQub2Zmc2V0SGVpZ2h0ICsgMSkgKyAncHgnO1xuICAgIH0sXG5cbiAgICBvbktleURvd25VcmxJbnB1dDogZnVuY3Rpb24gKGNvbnRleHRMaXN0LCBlKSB7XG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSAzODogLy8gdXBcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5tb3ZlSXRlbS5jYWxsKHRoaXMsIGNvbnRleHRMaXN0LCAtMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBkb3duXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUubW92ZUl0ZW0uY2FsbCh0aGlzLCBjb250ZXh0TGlzdCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEzOiAvLyBlbnRlclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0TGlzdC5pbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRIZWFkZXJCb29rbWFyay5jYWxsKHRoaXMsIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmdldEl0ZW0oY29udGV4dExpc3QsIG51bGwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0SGVhZGVyQm9va21hcms6IGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEFuY2hvciA9IHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyQ29udGV4dDtcbiAgICAgICAgY29uc3QgaWQgPSBoZWFkZXIuaWQgfHwgJ2hfJyArIHRoaXMuX3cuTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnJlcGxhY2UoLy4rXFwuLywgJycpO1xuICAgICAgICBoZWFkZXIuaWQgPSBpZDtcbiAgICAgICAgY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZSA9ICcjJyArIGlkO1xuXG4gICAgICAgIGlmICghY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlLnRyaW0oKSB8fCAhY29udGV4dEFuY2hvci5fY2hhbmdlKSB7XG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmFuY2hvclRleHQudmFsdWUgPSBoZWFkZXIudGV4dENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0TGlua1ByZXZpZXcuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlKTtcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuY2xvc2UuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJDb250ZXh0LnVybElucHV0LmZvY3VzKCk7XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlQW5jaG9yVGV4dDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGUpIHtcbiAgICAgICAgY29udGV4dEFuY2hvci5fY2hhbmdlID0gISFlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlVXJsSW5wdXQ6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldExpbmtQcmV2aWV3LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgdmFsdWUpO1xuXG4gICAgICAgIGlmICgvXiMvLnRlc3QodmFsdWUpKSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUhlYWRlckxpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0LCB2YWx1ZSk7XG4gICAgICAgIGVsc2UgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuY2xvc2UuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0KTtcbiAgICB9LFxuXG4gICAgb25Gb2N1c1VybElucHV0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgY29udGV4dExpbmspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlO1xuICAgICAgICBpZiAoL14jLy50ZXN0KHZhbHVlKSkgdGhpcy5wbHVnaW5zLmFuY2hvci5jcmVhdGVIZWFkZXJMaXN0LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgY29udGV4dExpbmssIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgb25CbHVyVXJsSW5wdXQ6IGZ1bmN0aW9uIChjb250ZXh0TGlzdCkge1xuICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5jbG9zZS5jYWxsKHRoaXMsIGNvbnRleHRMaXN0KTtcbiAgICB9LFxuXG4gICAgc2V0TGlua1ByZXZpZXc6IGZ1bmN0aW9uIChjb250ZXh0LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBwcmV2aWV3ID0gY29udGV4dC5wcmV2aWV3O1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMub3B0aW9ucy5saW5rUHJvdG9jb2w7XG4gICAgICAgIGNvbnN0IHJlc2VydmVkUHJvdG9jb2wgID0gL14obWFpbHRvXFw6fHRlbFxcOnxzbXNcXDp8aHR0cHMqXFw6XFwvXFwvfCMpLy50ZXN0KHZhbHVlKTtcbiAgICAgICAgY29uc3Qgc2FtZVByb3RvY29sID0gIXByb3RvY29sID8gZmFsc2UgOiB0aGlzLl93LlJlZ0V4cCgnXicgKyB2YWx1ZS5zdWJzdHIoMCwgcHJvdG9jb2wubGVuZ3RoKSkudGVzdChwcm90b2NvbCk7XG4gICAgICAgIGNvbnRleHQubGlua1ZhbHVlID0gcHJldmlldy50ZXh0Q29udGVudCA9ICF2YWx1ZSA/ICcnIDogKHByb3RvY29sICYmICFyZXNlcnZlZFByb3RvY29sICYmICFzYW1lUHJvdG9jb2wpID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHJlc2VydmVkUHJvdG9jb2wgPyB2YWx1ZSA6IC9ed3d3XFwuLy50ZXN0KHZhbHVlKSA/ICdodHRwOi8vJyArIHZhbHVlIDogdGhpcy5jb250ZXh0LmFuY2hvci5ob3N0ICsgKC9eXFwvLy50ZXN0KHZhbHVlKSA/ICcnIDogJy8nKSArIHZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnRleHQuYm9va21hcmsuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dC5ib29rbWFya0J1dHRvbiwgJ2FjdGl2ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5ib29rbWFyay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHQuYm9va21hcmtCdXR0b24sICdhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCcjJykgPT09IC0xICYmIGNvbnRleHQuZG93bmxvYWRDaGVjay5jaGVja2VkKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5kb3dubG9hZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldEN0eDogZnVuY3Rpb24gKGFuY2hvciwgY29udGV4dEFuY2hvcikge1xuICAgICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xuICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IgPSBhbmNob3I7XG4gICAgICAgIGNvbnRleHRBbmNob3IubGlua1ZhbHVlID0gYW5jaG9yLmhyZWY7XG4gICAgICAgIGNvbnRleHRBbmNob3IuY3VycmVudFJlbCA9IGFuY2hvci5yZWwuc3BsaXQoXCIgXCIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVBbmNob3I6IGZ1bmN0aW9uIChhbmNob3IsIHVybCwgYWx0LCBjb250ZXh0QW5jaG9yLCBub3RUZXh0KSB7XG4gICAgICAgIC8vIGRvd25sb2FkXG4gICAgICAgIGlmICghL15cXCMvLnRlc3QodXJsKSAmJiBjb250ZXh0QW5jaG9yLmRvd25sb2FkQ2hlY2suY2hlY2tlZCkge1xuICAgICAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBhbHQgfHwgdXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvci5yZW1vdmVBdHRyaWJ1dGUoJ2Rvd25sb2FkJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuZXcgd2luZG93XG4gICAgICAgIGlmIChjb250ZXh0QW5jaG9yLm5ld1dpbmRvd0NoZWNrLmNoZWNrZWQpIGFuY2hvci50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgZWxzZSBhbmNob3IucmVtb3ZlQXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIHJlbFxuICAgICAgICBjb25zdCByZWwgPSBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwuam9pbignICcpO1xuICAgICAgICBpZiAoIXJlbCkgYW5jaG9yLnJlbW92ZUF0dHJpYnV0ZSgncmVsJyk7XG4gICAgICAgIGVsc2UgYW5jaG9yLnJlbCA9IHJlbDtcblxuICAgICAgICAvLyBlc3QgdXJsLCBhbHRcbiAgICAgICAgYW5jaG9yLmhyZWYgPSB1cmw7XG4gICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ2FsdCcsIGFsdCk7XG4gICAgICAgIGlmIChub3RUZXh0KSB7XG4gICAgICAgICAgICBpZiAoYW5jaG9yLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgYW5jaG9yLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IudGV4dENvbnRlbnQgPSBhbHQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlQW5jaG9yOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgbm90VGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dEFuY2hvci5saW5rVmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHVybCA9IGNvbnRleHRBbmNob3IubGlua1ZhbHVlO1xuICAgICAgICBjb25zdCBhbmNob3IgPSBjb250ZXh0QW5jaG9yLmFuY2hvclRleHQ7XG4gICAgICAgIGNvbnN0IGFuY2hvclRleHQgPSBhbmNob3IudmFsdWUubGVuZ3RoID09PSAwID8gdXJsIDogYW5jaG9yLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IG9BID0gY29udGV4dEFuY2hvci5saW5rQW5jaG9yIHx8IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdBJyk7XG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IudXBkYXRlQW5jaG9yKG9BLCB1cmwsIGFuY2hvclRleHQsIGNvbnRleHRBbmNob3IsIG5vdFRleHQpO1xuXG4gICAgICAgIGNvbnRleHRBbmNob3IubGlua1ZhbHVlID0gY29udGV4dEFuY2hvci5wcmV2aWV3LnRleHRDb250ZW50ID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZSA9IGNvbnRleHRBbmNob3IuYW5jaG9yVGV4dC52YWx1ZSA9ICcnO1xuXG4gICAgICAgIHJldHVybiBvQTtcbiAgICB9LFxuXG4gICAgb25DbGlja19ib29rbWFya0J1dHRvbjogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IpIHtcbiAgICAgICAgbGV0IHVybCA9IGNvbnRleHRBbmNob3IudXJsSW5wdXQudmFsdWU7XG4gICAgICAgIGlmICgvXlxcIy8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDEpO1xuICAgICAgICAgICAgY29udGV4dEFuY2hvci5ib29rbWFyay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRBbmNob3IuYm9va21hcmtCdXR0b24sICdhY3RpdmUnKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwgPSAnIycgKyB1cmw7XG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmJvb2ttYXJrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHRBbmNob3IuYm9va21hcmtCdXR0b24sICdhY3RpdmUnKTtcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWRDaGVjay5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUhlYWRlckxpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0LCB1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZSA9IHVybDtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRMaW5rUHJldmlldy5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIHVybCk7XG4gICAgICAgIGNvbnRleHRBbmNob3IudXJsSW5wdXQuZm9jdXMoKTtcbiAgICB9LFxuXG4gICAgb25DaGFuZ2VfbmV3V2luZG93Q2hlY2s6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dEFuY2hvci5saW5rRGVmYXVsdFJlbC5jaGVja19uZXdfd2luZG93ICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgICAgICBpZiAoZS50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxNZXJnZS5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxEZWxldGUuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX25ld193aW5kb3cpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZV9kb3dubG9hZENoZWNrOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgY29udGV4dEFuY2hvci5kb3dubG9hZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYm9va21hcmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0QW5jaG9yLmJvb2ttYXJrQnV0dG9uLCAnYWN0aXZlJyk7XG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSA9IGNvbnRleHRBbmNob3IucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBbmNob3IudXJsSW5wdXQudmFsdWUgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlLnJlcGxhY2UoL15cXCMrLywgJycpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0UmVsLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgdGhpcy5wbHVnaW5zLmFuY2hvci5fcmVsTWVyZ2UuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRBbmNob3IubGlua0RlZmF1bHRSZWwuY2hlY2tfYm9va21hcmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxEZWxldGUuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3JlbE1lcmdlOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgcmVsQXR0cikge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gY29udGV4dEFuY2hvci5jdXJyZW50UmVsO1xuICAgICAgICBpZiAoIXJlbEF0dHIpIHJldHVybiBjdXJyZW50LmpvaW4oJyAnKTtcbiAgICAgICAgXG4gICAgICAgIGlmICgvXm9ubHlcXDovLnRlc3QocmVsQXR0cikpIHtcbiAgICAgICAgICAgIHJlbEF0dHIgPSByZWxBdHRyLnJlcGxhY2UoL15vbmx5XFw6LywgJycpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuY3VycmVudFJlbCA9IHJlbEF0dHIuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgIHJldHVybiByZWxBdHRyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVscyA9IHJlbEF0dHIuc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlbHMubGVuZ3RoLCBpbmRleDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpbmRleCA9IGN1cnJlbnQuaW5kZXhPZihyZWxzW2ldKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGN1cnJlbnQucHVzaChyZWxzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyZW50LmpvaW4oJyAnKTtcbiAgICB9LFxuXG4gICAgX3JlbERlbGV0ZTogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHJlbEF0dHIpIHtcbiAgICAgICAgaWYgKCFyZWxBdHRyKSByZXR1cm4gY29udGV4dEFuY2hvci5jdXJyZW50UmVsLmpvaW4oJyAnKTtcbiAgICAgICAgaWYgKC9eb25seVxcOi8udGVzdChyZWxBdHRyKSkgcmVsQXR0ciA9IHJlbEF0dHIucmVwbGFjZSgvXm9ubHlcXDovLCAnJykudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IHJlbHMgPSBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwuam9pbignICcpLnJlcGxhY2UodGhpcy5fdy5SZWdFeHAocmVsQXR0ciArICdcXFxccyonKSwgJycpO1xuICAgICAgICBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwgPSByZWxzLnNwbGl0KCcgJyk7XG4gICAgICAgIHJldHVybiByZWxzO1xuICAgIH0sXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvcikge1xuICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IgPSBudWxsO1xuICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSA9IGNvbnRleHRBbmNob3IucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBbmNob3IudXJsSW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gJyc7XG4gICAgICAgIGNvbnRleHRBbmNob3IubmV3V2luZG93Q2hlY2suY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkQ2hlY2suY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICBjb250ZXh0QW5jaG9yLl9jaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmRlZmF1bHRSZWwpO1xuICAgICAgICBpZiAoY29udGV4dEFuY2hvci5yZWxMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnRvZ2dsZVJlbExpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuaW5pdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQpO1xuICAgIH1cbn07XG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGRpYWxvZyBmcm9tICcuLi9tb2R1bGVzL2RpYWxvZyc7XG5pbXBvcnQgYW5jaG9yIGZyb20gJy4uL21vZHVsZXMvX2FuY2hvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnbGluaycsXG4gICAgZGlzcGxheTogJ2RpYWxvZycsXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb3JlLmFkZE1vZHVsZShbZGlhbG9nLCBhbmNob3JdKTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xuICAgICAgICBjb25zdCBjb250ZXh0TGluayA9IGNvbnRleHQubGluayA9IHtcbiAgICAgICAgICAgIGZvY3VzRWxlbWVudDogbnVsbCwgLy8gQE92ZXJyaWRlIGRpYWxvZyAvLyBUaGlzIGVsZW1lbnQgaGFzIGZvY3VzIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG4gICAgICAgICAgICBfbGlua0FuY2hvcjogbnVsbCxcbiAgICAgICAgICAgIGFuY2hvckN0eDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBsaW5rIGRpYWxvZyAqL1xuICAgICAgICBsZXQgbGlua19kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcbiAgICAgICAgY29udGV4dExpbmsubW9kYWwgPSBsaW5rX2RpYWxvZztcbiAgICAgICAgXG4gICAgICAgIC8qKiBsaW5rIGNvbnRyb2xsZXIgKi9cbiAgICAgICAgbGV0IGxpbmtfY29udHJvbGxlciA9IHRoaXMuc2V0Q29udHJvbGxlcl9MaW5rQnV0dG9uKGNvcmUpO1xuICAgICAgICBjb250ZXh0TGluay5saW5rQ29udHJvbGxlciA9IGxpbmtfY29udHJvbGxlcjtcblxuICAgICAgICBsaW5rX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XG4gICAgICAgIGxpbmtfY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja19saW5rQ29udHJvbGxlci5iaW5kKGNvcmUpKTtcblxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cbiAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwuYXBwZW5kQ2hpbGQobGlua19kaWFsb2cpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgY29udHJvbGxlciAqL1xuICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQobGlua19jb250cm9sbGVyKTtcblxuICAgICAgICAvKiogbGluayBldmVudCAqL1xuICAgICAgICBjb3JlLnBsdWdpbnMuYW5jaG9yLmluaXRFdmVudC5jYWxsKGNvcmUsICdsaW5rJywgbGlua19kaWFsb2cpO1xuICAgICAgICBjb250ZXh0TGluay5mb2N1c0VsZW1lbnQgPSBjb250ZXh0LmFuY2hvci5jYWxsZXIubGluay51cmxJbnB1dDtcblxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgIGxpbmtfZGlhbG9nID0gbnVsbCwgbGlua19jb250cm9sbGVyID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqIGRpYWxvZyAqL1xuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XG5cbiAgICAgICAgZGlhbG9nLmNsYXNzTmFtZSA9ICdzZS1kaWFsb2ctY29udGVudCc7XG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBsZXQgaHRtbCA9ICcnICtcbiAgICAgICAgICAgICc8Zm9ybT4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5jYW5jZWwgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLW1vZGFsLXRpdGxlXCI+JyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3gudGl0bGUgKyAnPC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRleHQuYW5jaG9yLmZvcm1zLmlubmVySFRNTCArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9vdGVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Zvcm0+JztcblxuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcbiAgICB9LFxuXG4gICAgLyoqIG1vZGlmeSBjb250cm9sbGVyIGJ1dHRvbiAqL1xuICAgIHNldENvbnRyb2xsZXJfTGlua0J1dHRvbjogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xuICAgICAgICBjb25zdCBsaW5rX2J0biA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcblxuICAgICAgICBsaW5rX2J0bi5jbGFzc05hbWUgPSAnc2UtY29udHJvbGxlciBzZS1jb250cm9sbGVyLWxpbmsnO1xuICAgICAgICBsaW5rX2J0bi5pbm5lckhUTUwgPSAnJyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWFycm93IHNlLWFycm93LXVwXCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cImxpbmstY29udGVudFwiPjxzcGFuPjxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJcIj48L2E+Jm5ic3A7PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJ1cGRhdGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZWRpdCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmVkaXQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwidW5saW5rXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLnVubGluayArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnVubGluayArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZGVsZXRlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJzwvc3Bhbj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcblxuICAgICAgICByZXR1cm4gbGlua19idG47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBkaWFsb2dcbiAgICAgKi9cbiAgICBvcGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdsaW5rJywgJ2xpbmsnID09PSB0aGlzLmN1cnJlbnRDb250cm9sbGVyTmFtZSk7XG4gICAgfSxcblxuICAgIHN1Ym1pdDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb0EgPSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUFuY2hvci5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyLmxpbmssIGZhbHNlKTtcbiAgICBcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRm9ybWF0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvRm9ybWF0ID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzWzBdLm5vZGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgb0Zvcm1hdC5hcHBlbmRDaGlsZChvQSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnNlcnROb2RlKG9Gb3JtYXQsIG51bGwsIHRydWUpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluc2VydE5vZGUob0EsIG51bGwsIHRydWUpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uob0EuY2hpbGROb2Rlc1swXSwgMCwgb0EuY2hpbGROb2Rlc1swXSwgb0EudGV4dENvbnRlbnQubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IHJhbmdlXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSB0aGlzLmNvbnRleHQubGluay5fbGlua0FuY2hvci5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UodGV4dE5vZGUsIDAsIHRleHROb2RlLCB0ZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXIpID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlsLmlzQW5jaG9yKGVsZW1lbnQpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWltYWdlLWxpbmsnKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXIpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5saW5rLmNhbGxfY29udHJvbGxlci5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBkaWFsb2dcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24gKHVwZGF0ZSkge1xuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLm9uLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIubGluaywgdXBkYXRlKTtcbiAgICB9LFxuXG4gICAgY2FsbF9jb250cm9sbGVyOiBmdW5jdGlvbiAoc2VsZWN0aW9uQVRhZykge1xuICAgICAgICB0aGlzLmVkaXRMaW5rID0gdGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IgPSB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rLmxpbmtBbmNob3IgPSBzZWxlY3Rpb25BVGFnO1xuICAgICAgICBjb25zdCBsaW5rQnRuID0gdGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXI7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBsaW5rQnRuLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcblxuICAgICAgICBsaW5rLmhyZWYgPSBzZWxlY3Rpb25BVGFnLmhyZWY7XG4gICAgICAgIGxpbmsudGl0bGUgPSBzZWxlY3Rpb25BVGFnLnRleHRDb250ZW50O1xuICAgICAgICBsaW5rLnRleHRDb250ZW50ID0gc2VsZWN0aW9uQVRhZy50ZXh0Q29udGVudDtcblxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2VsZWN0aW9uQVRhZywgJ29uJyk7XG4gICAgICAgIHRoaXMuc2V0Q29udHJvbGxlclBvc2l0aW9uKGxpbmtCdG4sIHNlbGVjdGlvbkFUYWcsICdib3R0b20nLCB7bGVmdDogMCwgdG9wOiAwfSk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPbihsaW5rQnRuLCBzZWxlY3Rpb25BVGFnLCAnbGluaycsIHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCwgdGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IsICdvbicpKTtcbiAgICB9LFxuXG4gICAgb25DbGlja19saW5rQ29udHJvbGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSB8fCBlLnRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XG4gICAgICAgIGlmICghY29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoL3VwZGF0ZS8udGVzdChjb21tYW5kKSkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2xpbmsnLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgvdW5saW5rLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgICAgICAgICBjb25zdCBzYyA9IHRoaXMudXRpbC5nZXRDaGlsZEVsZW1lbnQodGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGVjID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudCh0aGlzLmNvbnRleHQubGluay5fbGlua0FuY2hvciwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKHNjLCAwLCBlYywgZWMudGV4dENvbnRlbnQubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShudWxsLCBudWxsLCBbJ0EnXSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyoqIGRlbGV0ZSAqL1xuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0odGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIubGluay5saW5rQW5jaG9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcblxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgZGlhbG9nXG4gICAgICovXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQubGluay5saW5rQ29udHJvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLmluaXQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rKTtcbiAgICB9XG59O1xuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xuaW1wb3J0IGFuY2hvciBmcm9tICcuLi9tb2R1bGVzL19hbmNob3InO1xuaW1wb3J0IGNvbXBvbmVudCBmcm9tICcuLi9tb2R1bGVzL2NvbXBvbmVudCc7XG5pbXBvcnQgcmVzaXppbmcgZnJvbSAnLi4vbW9kdWxlcy9yZXNpemluZyc7XG5pbXBvcnQgZmlsZU1hbmFnZXIgZnJvbSAnLi4vbW9kdWxlcy9maWxlTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnaW1hZ2UnLFxuICAgIGRpc3BsYXk6ICdkaWFsb2cnLFxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29yZS5hZGRNb2R1bGUoW2RpYWxvZywgYW5jaG9yLCBjb21wb25lbnQsIHJlc2l6aW5nLCBmaWxlTWFuYWdlcl0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvcmUub3B0aW9ucztcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gY29udGV4dC5pbWFnZSA9IHtcbiAgICAgICAgICAgIF9pbmZvTGlzdDogW10sIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAgICAgICAgX2luZm9JbmRleDogMCwgLy8gQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXG4gICAgICAgICAgICBfdXBsb2FkRmlsZUxlbmd0aDogMCwgLy8gQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxuICAgICAgICAgICAgc2l6ZVVuaXQ6IG9wdGlvbnMuX2ltYWdlU2l6ZVVuaXQsXG4gICAgICAgICAgICBfbGlua0VsZW1lbnQ6ICcnLFxuICAgICAgICAgICAgX2FsdFRleHQ6ICcnLFxuICAgICAgICAgICAgX2FsaWduOiAnbm9uZScsXG4gICAgICAgICAgICBfZmxvYXRDbGFzc1JlZ0V4cDogJ19fc2VfX2Zsb2F0XFxcXC1bYS16XSsnLFxuICAgICAgICAgICAgX3Zfc3JjOiB7X2xpbmtWYWx1ZTogJyd9LFxuICAgICAgICAgICAgc3ZnRGVmYXVsdFNpemU6ICczMCUnLFxuICAgICAgICAgICAgYmFzZTY0UmVuZGVySW5kZXg6IDAsXG4gICAgICAgICAgICAvLyBAcmVxdWlyZSBAT3ZlcnJpZGUgY29tcG9uZW50XG4gICAgICAgICAgICBfZWxlbWVudDogbnVsbCxcbiAgICAgICAgICAgIF9jb3ZlcjogbnVsbCxcbiAgICAgICAgICAgIF9jb250YWluZXI6IG51bGwsXG4gICAgICAgICAgICAvLyBAT3ZlcnJpZGUgcmVzaXppbmcgcHJvcGVydGllc1xuICAgICAgICAgICAgaW5wdXRYOiBudWxsLFxuICAgICAgICAgICAgaW5wdXRZOiBudWxsLFxuICAgICAgICAgICAgX2VsZW1lbnRfdzogMSxcbiAgICAgICAgICAgIF9lbGVtZW50X2g6IDEsXG4gICAgICAgICAgICBfZWxlbWVudF9sOiAwLFxuICAgICAgICAgICAgX2VsZW1lbnRfdDogMCxcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVg6ICdhdXRvJyxcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVk6ICdhdXRvJyxcbiAgICAgICAgICAgIF9vcmlnaW5fdzogb3B0aW9ucy5pbWFnZVdpZHRoID09PSAnYXV0bycgPyAnJyA6IG9wdGlvbnMuaW1hZ2VXaWR0aCxcbiAgICAgICAgICAgIF9vcmlnaW5faDogb3B0aW9ucy5pbWFnZUhlaWdodCA9PT0gJ2F1dG8nID8gJycgOiBvcHRpb25zLmltYWdlSGVpZ2h0LFxuICAgICAgICAgICAgX3Byb3BvcnRpb25DaGVja2VkOiB0cnVlLFxuICAgICAgICAgICAgX3Jlc2l6aW5nOiBvcHRpb25zLmltYWdlUmVzaXppbmcsXG4gICAgICAgICAgICBfcmVzaXplRG90SGlkZTogIW9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93LFxuICAgICAgICAgICAgX3JvdGF0aW9uOiBvcHRpb25zLmltYWdlUm90YXRpb24sXG4gICAgICAgICAgICBfb25seVBlcmNlbnRhZ2U6IG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBfcmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgX3JhdGlvWDogMSxcbiAgICAgICAgICAgIF9yYXRpb1k6IDEsXG4gICAgICAgICAgICBfY2FwdGlvblNob3c6IHRydWUsXG4gICAgICAgICAgICBfY2FwdGlvbkNoZWNrZWQ6IGZhbHNlLFxuICAgICAgICAgICAgX2NhcHRpb246IG51bGwsXG4gICAgICAgICAgICBjYXB0aW9uQ2hlY2tFbDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBpbWFnZSBkaWFsb2cgKi9cbiAgICAgICAgbGV0IGltYWdlX2RpYWxvZyA9IHRoaXMuc2V0RGlhbG9nKGNvcmUpO1xuICAgICAgICBjb250ZXh0SW1hZ2UubW9kYWwgPSBpbWFnZV9kaWFsb2c7XG4gICAgICAgIGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9pbWFnZV9maWxlJyk7XG4gICAgICAgIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2VfdXJsJyk7XG4gICAgICAgIGNvbnRleHRJbWFnZS5mb2N1c0VsZW1lbnQgPSBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlIHx8IGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlO1xuICAgICAgICBjb250ZXh0SW1hZ2UuYWx0VGV4dCA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX2FsdCcpO1xuICAgICAgICBjb250ZXh0SW1hZ2UuY2FwdGlvbkNoZWNrRWwgPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9pbWFnZV9jaGVja19jYXB0aW9uJyk7XG4gICAgICAgIGNvbnRleHRJbWFnZS5wcmV2aWV3U3JjID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFiX2NvbnRlbnRfaW1hZ2UgLnNlLWxpbmstcHJldmlldycpO1xuXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXG4gICAgICAgIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZGlhbG9nLXRhYnMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub3BlblRhYi5iaW5kKGNvcmUpKTtcbiAgICAgICAgaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCB0aGlzLnN1Ym1pdC5iaW5kKGNvcmUpKTtcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUpIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1yZW1vdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX3JlbW92ZVNlbGVjdGVkRmlsZXMuYmluZChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlLCBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSwgY29udGV4dEltYWdlLnByZXZpZXdTcmMpKTtcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlKSBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uTGlua1ByZXZpZXcuYmluZChjb250ZXh0SW1hZ2UucHJldmlld1NyYywgY29udGV4dEltYWdlLl92X3NyYywgb3B0aW9ucy5saW5rUHJvdG9jb2wpKTtcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgJiYgY29udGV4dEltYWdlLmltZ1VybEZpbGUpIGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fZmlsZUlucHV0Q2hhbmdlLmJpbmQoY29udGV4dEltYWdlKSk7XG5cbiAgICAgICAgY29uc3QgaW1hZ2VHYWxsZXJ5QnV0dG9uID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fX3NlX19nYWxsZXJ5Jyk7XG4gICAgICAgIGlmIChpbWFnZUdhbGxlcnlCdXR0b24pIGltYWdlR2FsbGVyeUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29wZW5HYWxsZXJ5LmJpbmQoY29yZSkpO1xuICAgICAgICBcbiAgICAgICAgY29udGV4dEltYWdlLnByb3BvcnRpb24gPSB7fTtcbiAgICAgICAgY29udGV4dEltYWdlLmlucHV0WCA9IHt9O1xuICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLmltYWdlUmVzaXppbmcpIHtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5wcm9wb3J0aW9uID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2VfY2hlY2tfcHJvcG9ydGlvbicpO1xuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WCA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX3NpemVfeCcpO1xuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WSA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX3NpemVfeScpO1xuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSA9IG9wdGlvbnMuaW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgPSBvcHRpb25zLmltYWdlSGVpZ2h0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5zZXRJbnB1dFNpemUuYmluZChjb3JlLCAneCcpKTtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLnNldElucHV0U2l6ZS5iaW5kKGNvcmUsICd5JykpO1xuXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UucHJvcG9ydGlvbi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLnNldFJhdGlvLmJpbmQoY29yZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWRpYWxvZy1idG4tcmV2ZXJ0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnNpemVSZXZlcnQuYmluZChjb3JlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cbiAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwuYXBwZW5kQ2hpbGQoaW1hZ2VfZGlhbG9nKTtcblxuICAgICAgICAvKiogbGluayBldmVudCAqL1xuICAgICAgICBjb3JlLnBsdWdpbnMuYW5jaG9yLmluaXRFdmVudC5jYWxsKGNvcmUsICdpbWFnZScsIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYl9jb250ZW50X3VybCcpKTtcbiAgICAgICAgY29udGV4dEltYWdlLmFuY2hvckN0eCA9IGNvcmUuY29udGV4dC5hbmNob3IuY2FsbGVyLmltYWdlO1xuXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cbiAgICAgICAgaW1hZ2VfZGlhbG9nID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqIGRpYWxvZyAqL1xuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG5cbiAgICAgICAgZGlhbG9nLmNsYXNzTmFtZSA9ICdzZS1kaWFsb2ctY29udGVudCBzZS1kaWFsb2ctaW1hZ2UnO1xuICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICBsZXQgaHRtbCA9ICcnICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWhlYWRlclwiPicgK1xuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1jbG9zZVwiIGNsYXNzPVwiY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jYW5jZWwgK1xuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1tb2RhbC10aXRsZVwiPicgKyBsYW5nLmRpYWxvZ0JveC5pbWFnZUJveC50aXRsZSArICc8L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy10YWJzXCI+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiX3NlX3RhYl9saW5rIGFjdGl2ZVwiIGRhdGEtdGFiLWxpbms9XCJpbWFnZVwiPicgKyBsYW5nLnRvb2xiYXIuaW1hZ2UgKyAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiX3NlX3RhYl9saW5rXCIgZGF0YS10YWItbGluaz1cInVybFwiPicgKyBsYW5nLnRvb2xiYXIubGluayArICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8Zm9ybSBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cIl9zZV90YWJfY29udGVudCBfc2VfdGFiX2NvbnRlbnRfaW1hZ2VcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctYm9keVwiPjxkaXYgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNjY2M7XCI+JztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24uaW1hZ2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3guaW1hZ2VCb3guZmlsZSArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBfc2VfaW1hZ2VfZmlsZVwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiJyArIG9wdGlvbi5pbWFnZUFjY2VwdCArICdcIicgKyAob3B0aW9uLmltYWdlTXVsdGlwbGVGaWxlID8gJyBtdWx0aXBsZT1cIm11bHRpcGxlXCInIDogJycpICsgJy8+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWZpbGVzLWVkZ2UtYnV0dG9uIHNlLWZpbGUtcmVtb3ZlXCIgdGl0bGU9XCInICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICdcIj4nICsgY29yZS5pY29ucy5jYW5jZWwgKyAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24uaW1hZ2VVcmxJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5pbWFnZUJveC51cmwgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybS1maWxlc1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gc2UtaW5wdXQtdXJsIF9zZV9pbWFnZV91cmxcIiB0eXBlPVwidGV4dFwiIC8+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9wdGlvbi5pbWFnZUdhbGxlcnlVcmwgJiYgY29yZS5wbHVnaW5zLmltYWdlR2FsbGVyeSkgPyAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWZpbGVzLWVkZ2UtYnV0dG9uIF9fc2VfX2dhbGxlcnlcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuaW1hZ2VHYWxsZXJ5ICsgJ1wiPicgKyBjb3JlLmljb25zLmltYWdlX2dhbGxlcnkgKyAnPC9idXR0b24+JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9XCJzZS1saW5rLXByZXZpZXdcIj48L3ByZT4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3guaW1hZ2VCb3guYWx0VGV4dCArICc8L2xhYmVsPjxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gX3NlX2ltYWdlX2FsdFwiIHR5cGU9XCJ0ZXh0XCIgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uLmltYWdlUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5UGVyY2VudGFnZSA9IG9wdGlvbi5pbWFnZVNpemVPbmx5UGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5UGVyY2VudERpc3BsYXkgPSBvbmx5UGVyY2VudGFnZSA/ICcgc3R5bGU9XCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCInIDogJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RGlzcGxheSA9ICFvcHRpb24uaW1hZ2VIZWlnaHRTaG93ID8gJyBzdHlsZT1cImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIicgOiAnJztcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlQZXJjZW50YWdlIHx8ICFvcHRpb24uaW1hZ2VIZWlnaHRTaG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctc2l6ZS10ZXh0XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLXdcIj4nICsgbGFuZy5kaWFsb2dCb3guc2l6ZSArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1zaXplLXRleHRcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cInNpemUtd1wiPicgKyBsYW5nLmRpYWxvZ0JveC53aWR0aCArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiPiZuYnNwOzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLWhcIj4nICsgbGFuZy5kaWFsb2dCb3guaGVpZ2h0ICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtY29udHJvbCBfc2VfaW1hZ2Vfc2l6ZV94XCIgcGxhY2Vob2xkZXI9XCJhdXRvXCInICsgKG9ubHlQZXJjZW50YWdlID8gJyB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiJyA6ICd0eXBlPVwidGV4dFwiJykgKyAob25seVBlcmNlbnRhZ2UgPyAnIG1heD1cIjEwMFwiJyA6ICcnKSArICcgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiJyArIGhlaWdodERpc3BsYXkgKyAnPicgKyAob25seVBlcmNlbnRhZ2UgPyAnJScgOiAneCcpICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwic2UtaW5wdXQtY29udHJvbCBfc2VfaW1hZ2Vfc2l6ZV95XCIgcGxhY2Vob2xkZXI9XCJhdXRvXCInICsgb25seVBlcmNlbnREaXNwbGF5ICsgKG9ubHlQZXJjZW50YWdlID8gJyBtYXg9XCIxMDBcIicgOiAnJykgKyBoZWlnaHREaXNwbGF5ICsgJy8+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCcgKyBvbmx5UGVyY2VudERpc3BsYXkgKyBoZWlnaHREaXNwbGF5ICsgJz48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLWNoZWNrIF9zZV9pbWFnZV9jaGVja19wcm9wb3J0aW9uXCIgY2hlY2tlZC8+Jm5ic3A7JyArIGxhbmcuZGlhbG9nQm94LnByb3BvcnRpb24gKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3gucmV2ZXJ0QnV0dG9uICsgJ1wiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1idG4tcmV2ZXJ0XCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCI+JyArIGNvcmUuaWNvbnMucmV2ZXJ0ICsgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodG1sICs9ICcnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0gc2UtZGlhbG9nLWZvcm0tZm9vdGVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLWNoZWNrIF9zZV9pbWFnZV9jaGVja19jYXB0aW9uXCIgLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3guY2FwdGlvbiArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiX3NlX3RhYl9jb250ZW50IF9zZV90YWJfY29udGVudF91cmxcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgY29yZS5jb250ZXh0LmFuY2hvci5mb3Jtcy5pbm5lckhUTUwgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb290ZXJcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJub25lXCIgY2hlY2tlZD4nICsgbGFuZy5kaWFsb2dCb3guYmFzaWMgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cImxlZnRcIj4nICsgbGFuZy5kaWFsb2dCb3gubGVmdCArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwiY2VudGVyXCI+JyArIGxhbmcuZGlhbG9nQm94LmNlbnRlciArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwicmlnaHRcIj4nICsgbGFuZy5kaWFsb2dCb3gucmlnaHQgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzZS1idG4tcHJpbWFyeVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICdcIj48c3Bhbj4nICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJzwvc3Bhbj48L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPC9mb3JtPic7XG5cbiAgICAgICAgZGlhbG9nLmlubmVySFRNTCA9IGh0bWw7XG5cbiAgICAgICAgcmV0dXJuIGRpYWxvZztcbiAgICB9LFxuXG4gICAgX2ZpbGVJbnB1dENoYW5nZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW1nSW5wdXRGaWxlLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmltZ1VybEZpbGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3U3JjLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmltZ1VybEZpbGUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3U3JjLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJ2xpbmUtdGhyb3VnaCc7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3JlbW92ZVNlbGVjdGVkRmlsZXM6IGZ1bmN0aW9uICh1cmxJbnB1dCwgcHJldmlld1NyYykge1xuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgICAgIGlmICh1cmxJbnB1dCkge1xuICAgICAgICAgICAgdXJsSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgcHJldmlld1NyYy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9vcGVuR2FsbGVyeTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNhbGxQbHVnaW4oJ2ltYWdlR2FsbGVyeScsIHRoaXMucGx1Z2lucy5pbWFnZUdhbGxlcnkub3Blbi5iaW5kKHRoaXMsIHRoaXMucGx1Z2lucy5pbWFnZS5fc2V0VXJsSW5wdXQuYmluZCh0aGlzLmNvbnRleHQuaW1hZ2UpKSwgbnVsbCk7XG4gICAgfSxcblxuICAgIF9zZXRVcmxJbnB1dDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB0aGlzLmFsdFRleHQudmFsdWUgPSB0YXJnZXQuYWx0O1xuICAgICAgICB0aGlzLl92X3NyYy5fbGlua1ZhbHVlID0gdGhpcy5wcmV2aWV3U3JjLnRleHRDb250ZW50ID0gdGhpcy5pbWdVcmxGaWxlLnZhbHVlID0gdGFyZ2V0LnNyYztcbiAgICAgICAgdGhpcy5pbWdVcmxGaWxlLmZvY3VzKCk7XG4gICAgfSxcblxuICAgIF9vbkxpbmtQcmV2aWV3OiBmdW5jdGlvbiAoY29udGV4dCwgcHJvdG9jb2wsIGUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgIGNvbnRleHQuX2xpbmtWYWx1ZSA9IHRoaXMudGV4dENvbnRlbnQgPSAhdmFsdWUgPyAnJyA6IChwcm90b2NvbCAmJiB2YWx1ZS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEgJiYgdmFsdWUuaW5kZXhPZignIycpICE9PSAwKSA/IHByb3RvY29sICsgdmFsdWUgOiB2YWx1ZS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEgPyAnLycgKyB2YWx1ZSA6IHZhbHVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgQFJlcXVpcmVkIGZpbGVNYW5hZ2VyXG4gICAgICovXG4gICAgZmlsZVRhZ3M6IFsnaW1nJ10sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgY29yZSwgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBmcm9tIGNvcmUuc2VsZWN0Q29tcG9uZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxuICAgICAqL1xuICAgIHNlbGVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIGVsZW1lbnQsIHRoaXMucGx1Z2lucy5yZXNpemluZy5jYWxsX2NvbnRyb2xsZXJfcmVzaXplLmNhbGwodGhpcywgZWxlbWVudCwgJ2ltYWdlJykpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXG4gICAgICovXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VFbCA9IGVsZW1lbnQgfHwgdGhpcy5jb250ZXh0LmltYWdlLl9lbGVtZW50O1xuICAgICAgICBjb25zdCBpbWFnZUNvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGltYWdlRWwsIHRoaXMudXRpbC5pc01lZGlhQ29tcG9uZW50KSB8fCBpbWFnZUVsO1xuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSBpbWFnZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpICogMTtcbiAgICAgICAgbGV0IGZvY3VzRWwgPSAoaW1hZ2VDb250YWluZXIucHJldmlvdXNFbGVtZW50U2libGluZyB8fCBpbWFnZUNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZW1wdHlEaXYgPSBpbWFnZUNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShpbWFnZUNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5pbml0LmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcblxuICAgICAgICBpZiAoZW1wdHlEaXYgIT09IHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpIHRoaXMudXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhlbXB0eURpdiwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7IH0sIG51bGwpO1xuXG4gICAgICAgIC8vIGZvY3VzXG4gICAgICAgIHRoaXMuZm9jdXNFZGdlKGZvY3VzRWwpO1xuICAgICAgICBcbiAgICAgICAgLy8gZXZlbnRcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLmRlbGV0ZUluZm8uY2FsbCh0aGlzLCAnaW1hZ2UnLCBkYXRhSW5kZXgsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQpO1xuXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIG9uOiBmdW5jdGlvbiAodXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcbiAgICAgICAgXG4gICAgICAgIGlmICghdXBkYXRlKSB7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlID0gY29udGV4dEltYWdlLl9vcmlnaW5fdyA9IHRoaXMub3B0aW9ucy5pbWFnZVdpZHRoID09PSBjb250ZXh0SW1hZ2UuX2RlZmF1bHRTaXplWCA/ICcnIDogdGhpcy5vcHRpb25zLmltYWdlV2lkdGg7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlID0gY29udGV4dEltYWdlLl9vcmlnaW5faCA9IHRoaXMub3B0aW9ucy5pbWFnZUhlaWdodCA9PT0gY29udGV4dEltYWdlLl9kZWZhdWx0U2l6ZVkgPyAnJyA6IHRoaXMub3B0aW9ucy5pbWFnZUhlaWdodDtcbiAgICAgICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5pbWFnZU11bHRpcGxlRmlsZSkgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMuaW1hZ2VNdWx0aXBsZUZpbGUpIGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUucmVtb3ZlQXR0cmlidXRlKCdtdWx0aXBsZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iub24uY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LCB1cGRhdGUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIG9wZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2ltYWdlJywgJ2ltYWdlJyA9PT0gdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpO1xuICAgIH0sXG5cbiAgICBvcGVuVGFiOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBjb25zdCBtb2RhbCA9IHRoaXMuY29udGV4dC5pbWFnZS5tb2RhbDtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IChlID09PSAnaW5pdCcgPyBtb2RhbC5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYl9saW5rJykgOiBlLnRhcmdldCk7XG5cbiAgICAgICAgaWYgKCEvXkJVVFRPTiQvaS50ZXN0KHRhcmdldEVsZW1lbnQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlY2xhcmUgYWxsIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCB0YWJOYW1lID0gdGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFiLWxpbmsnKTtcbiAgICAgICAgY29uc3QgY29udGVudENsYXNzTmFtZSA9ICdfc2VfdGFiX2NvbnRlbnQnO1xuICAgICAgICBsZXQgaSwgdGFiQ29udGVudCwgdGFiTGlua3M7XG5cbiAgICAgICAgLy8gR2V0IGFsbCBlbGVtZW50cyB3aXRoIGNsYXNzPVwidGFiY29udGVudFwiIGFuZCBoaWRlIHRoZW1cbiAgICAgICAgdGFiQ29udGVudCA9IG1vZGFsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29udGVudENsYXNzTmFtZSk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0YWJDb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0YWJDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgYWxsIGVsZW1lbnRzIHdpdGggY2xhc3M9XCJ0YWJsaW5rc1wiIGFuZCByZW1vdmUgdGhlIGNsYXNzIFwiYWN0aXZlXCJcbiAgICAgICAgdGFiTGlua3MgPSBtb2RhbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdfc2VfdGFiX2xpbmsnKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRhYkxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFiTGlua3NbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3cgdGhlIGN1cnJlbnQgdGFiLCBhbmQgYWRkIGFuIFwiYWN0aXZlXCIgY2xhc3MgdG8gdGhlIGJ1dHRvbiB0aGF0IG9wZW5lZCB0aGUgdGFiXG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy4nICsgY29udGVudENsYXNzTmFtZSArICdfJyArIHRhYk5hbWUpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFyZ2V0RWxlbWVudCwgJ2FjdGl2ZScpO1xuXG4gICAgICAgIC8vIGZvY3VzXG4gICAgICAgIGlmICh0YWJOYW1lID09PSAnaW1hZ2UnICYmIHRoaXMuY29udGV4dC5pbWFnZS5mb2N1c0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbWFnZS5mb2N1c0VsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWJOYW1lID09PSAndXJsJykge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIuaW1hZ2UudXJsSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XG4gICAgICAgIGNvbnN0IGltYWdlUGx1Z2luID0gdGhpcy5wbHVnaW5zLmltYWdlO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb250ZXh0SW1hZ2UuX2FsdFRleHQgPSBjb250ZXh0SW1hZ2UuYWx0VGV4dC52YWx1ZTtcbiAgICAgICAgY29udGV4dEltYWdlLl9hbGlnbiA9IGNvbnRleHRJbWFnZS5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCJdOmNoZWNrZWQnKS52YWx1ZTtcbiAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uQ2hlY2tlZCA9IGNvbnRleHRJbWFnZS5jYXB0aW9uQ2hlY2tFbC5jaGVja2VkO1xuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9yZXNpemluZykgY29udGV4dEltYWdlLl9wcm9wb3J0aW9uQ2hlY2tlZCA9IGNvbnRleHRJbWFnZS5wcm9wb3J0aW9uLmNoZWNrZWQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKSB7XG4gICAgICAgICAgICAgICAgaW1hZ2VQbHVnaW4udXBkYXRlX2ltYWdlLmNhbGwodGhpcywgZmFsc2UsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgJiYgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xuICAgICAgICAgICAgICAgIGltYWdlUGx1Z2luLnN1Ym1pdEFjdGlvbi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5pbWFnZS5pbWdJbnB1dEZpbGUuZmlsZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSAmJiBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICAgICAgICAgICAgICBpbWFnZVBsdWdpbi5vblJlbmRlcl9pbWdVcmwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5pbWFnZS5zdWJtaXQuZmFpbF0gY2F1c2UgOiBcIicgKyBlcnJvci5tZXNzYWdlICsgJ1wiJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLmNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIHN1Ym1pdEFjdGlvbjogZnVuY3Rpb24gKGZpbGVMaXN0KSB7XG4gICAgICAgIGlmIChmaWxlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBsZXQgZmlsZVNpemUgPSAwO1xuICAgICAgICBsZXQgZmlsZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoL2ltYWdlL2kudGVzdChmaWxlTGlzdFtpXS50eXBlKSkge1xuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZUxpc3RbaV0pO1xuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW1pdFNpemUgPSB0aGlzLm9wdGlvbnMuaW1hZ2VVcGxvYWRTaXplTGltaXQ7XG4gICAgICAgIGlmIChsaW1pdFNpemUgPiAwKSB7XG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VzSW5mbyA9IHRoaXMuY29udGV4dC5pbWFnZS5faW5mb0xpc3Q7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW1hZ2VzSW5mby5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IGltYWdlc0luZm9baV0uc2l6ZSAqIDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9ICdbU1VORURJVE9SLmltYWdlVXBsb2FkLmZhaWxdIFNpemUgb2YgdXBsb2FkYWJsZSB0b3RhbCBpbWFnZXM6ICcgKyAobGltaXRTaXplLzEwMDApICsgJ0tCJztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4oZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xuICAgICAgICBjb250ZXh0SW1hZ2UuX3VwbG9hZEZpbGVMZW5ndGggPSBmaWxlcy5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUFuY2hvci5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5hbmNob3JDdHgsIHRydWUpO1xuICAgICAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICAgICAgYW5jaG9yOiBhbmNob3IsXG4gICAgICAgICAgICBpbnB1dFdpZHRoOiBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlLFxuICAgICAgICAgICAgaW5wdXRIZWlnaHQ6IGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUsXG4gICAgICAgICAgICBhbGlnbjogY29udGV4dEltYWdlLl9hbGlnbixcbiAgICAgICAgICAgIGlzVXBkYXRlOiB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsLFxuICAgICAgICAgICAgZWxlbWVudDogY29udGV4dEltYWdlLl9lbGVtZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkQmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkQmVmb3JlKGZpbGVzLCBpbmZvLCB0aGlzLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHRoaXMuX3cuQXJyYXkuaXNBcnJheShkYXRhLnJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnJlZ2lzdGVyLmNhbGwodGhpcywgaW5mbywgZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl93LkFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkgZmlsZXMgPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UudXBsb2FkLmNhbGwodGhpcywgaW5mbywgZmlsZXMpO1xuICAgIH0sXG5cbiAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yICE9PSAnZnVuY3Rpb24nIHx8IHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvcihtZXNzYWdlLCByZXNwb25zZSwgdGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4obWVzc2FnZSk7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5wbHVnaW4uaW1hZ2UuZXJyb3JdIHJlc3BvbnNlOiAnICsgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgZmlsZXMpIHtcbiAgICAgICAgaWYgKCFmaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZpbGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLmVycm9yLmNhbGwodGhpcywgZmlsZXMsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRVcmwgPSB0aGlzLm9wdGlvbnMuaW1hZ2VVcGxvYWRVcmw7XG4gICAgICAgIGNvbnN0IGZpbGVzTGVuID0gdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA/IDEgOiBmaWxlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gc2VydmVyIHVwbG9hZFxuICAgICAgICBpZiAodHlwZW9mIGltYWdlVXBsb2FkVXJsID09PSAnc3RyaW5nJyAmJiBpbWFnZVVwbG9hZFVybC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlLScgKyBpLCBmaWxlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgaW1hZ2VVcGxvYWRVcmwsIHRoaXMub3B0aW9ucy5pbWFnZVVwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy5pbWFnZS5jYWxsQmFja19pbWdVcGxvYWQuYmluZCh0aGlzLCBpbmZvKSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gYmFzZTY0XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0dXBfcmVhZGVyLmNhbGwodGhpcywgZmlsZXMsIGluZm8uYW5jaG9yLCBpbmZvLmlucHV0V2lkdGgsIGluZm8uaW5wdXRIZWlnaHQsIGluZm8uYWxpZ24sIGZpbGVzTGVuLCBpbmZvLmlzVXBkYXRlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjYWxsQmFja19pbWdVcGxvYWQ6IGZ1bmN0aW9uIChpbmZvLCB4bWxIdHRwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMuaW1hZ2VVcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5pbWFnZVVwbG9hZEhhbmRsZXIoeG1sSHR0cCwgaW5mbywgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5lcnJvci5jYWxsKHRoaXMsIHJlc3BvbnNlLmVycm9yTWVzc2FnZSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCBmaWxlTGlzdCA9IHJlc3BvbnNlLnJlc3VsdDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGZpbGUgPSB7IG5hbWU6IGZpbGVMaXN0W2ldLm5hbWUsIHNpemU6IGZpbGVMaXN0W2ldLnNpemUgfTtcbiAgICAgICAgICAgIGlmIChpbmZvLmlzVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnVwZGF0ZV9zcmMuY2FsbCh0aGlzLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uZWxlbWVudCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uYW5jaG9yLCBpbmZvLmlucHV0V2lkdGgsIGluZm8uaW5wdXRIZWlnaHQsIGluZm8uYWxpZ24sIGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgIH0sXG5cbiAgICBzZXR1cF9yZWFkZXI6IGZ1bmN0aW9uIChmaWxlcywgYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCBhbGlnbiwgZmlsZXNMZW4sIGlzVXBkYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuYmFzZTY0UmVuZGVySW5kZXggPSBmaWxlc0xlbjtcbiAgICAgICAgICAgIGNvbnN0IHdGaWxlUmVhZGVyID0gdGhpcy5fdy5GaWxlUmVhZGVyO1xuICAgICAgICAgICAgY29uc3QgZmlsZXNTdGFjayA9IFtmaWxlc0xlbl07XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuaW5wdXRYLnZhbHVlID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuaW5wdXRZLnZhbHVlID0gaGVpZ2h0O1xuICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIHJlYWRlciwgZmlsZTsgaSA8IGZpbGVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZWFkZXIgPSBuZXcgd0ZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICBmaWxlID0gZmlsZXNbaV07XG4gICAgXG4gICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChyZWFkZXIsIHVwZGF0ZSwgdXBkYXRlRWxlbWVudCwgZmlsZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNTdGFja1tpbmRleF0gPSB7IHJlc3VsdDogcmVhZGVyLnJlc3VsdCwgZmlsZTogZmlsZSB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgtLXRoaXMuY29udGV4dC5pbWFnZS5iYXNlNjRSZW5kZXJJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLm9uUmVuZGVyX2ltZ0Jhc2U2NC5jYWxsKHRoaXMsIHVwZGF0ZSwgZmlsZXNTdGFjaywgdXBkYXRlRWxlbWVudCwgYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCBhbGlnbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMsIHJlYWRlciwgaXNVcGRhdGUsIHRoaXMuY29udGV4dC5pbWFnZS5fZWxlbWVudCwgZmlsZSwgaSk7XG5cbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmltYWdlLnNldHVwX3JlYWRlci5mYWlsXSBjYXVzZSA6IFwiJyArIGUubWVzc2FnZSArICdcIicpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVuZGVyX2ltZ0Jhc2U2NDogZnVuY3Rpb24gKHVwZGF0ZSwgZmlsZXNTdGFjaywgdXBkYXRlRWxlbWVudCwgYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCBhbGlnbikge1xuICAgICAgICBjb25zdCB1cGRhdGVNZXRob2QgPSB0aGlzLnBsdWdpbnMuaW1hZ2UudXBkYXRlX3NyYztcbiAgICAgICAgY29uc3QgY3JlYXRlTWV0aG9kID0gdGhpcy5wbHVnaW5zLmltYWdlLmNyZWF0ZV9pbWFnZTtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWxlc1N0YWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1maWxlLW5hbWUnLCBmaWxlc1N0YWNrW2ldLmZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1maWxlLXNpemUnLCBmaWxlc1N0YWNrW2ldLmZpbGUuc2l6ZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlTWV0aG9kLmNhbGwodGhpcywgZmlsZXNTdGFja1tpXS5yZXN1bHQsIHVwZGF0ZUVsZW1lbnQsIGZpbGVzU3RhY2tbaV0uZmlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNyZWF0ZU1ldGhvZC5jYWxsKHRoaXMsIGZpbGVzU3RhY2tbaV0ucmVzdWx0LCBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIGFsaWduLCBmaWxlc1N0YWNrW2ldLmZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVuZGVyX2ltZ1VybDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB7bmFtZTogY29udGV4dEltYWdlLl92X3NyYy5fbGlua1ZhbHVlLnNwbGl0KCcvJykucG9wKCksIHNpemU6IDB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpIHRoaXMucGx1Z2lucy5pbWFnZS51cGRhdGVfc3JjLmNhbGwodGhpcywgY29udGV4dEltYWdlLl92X3NyYy5fbGlua1ZhbHVlLCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQsIGZpbGUpO1xuICAgICAgICAgICAgZWxzZSB0aGlzLnBsdWdpbnMuaW1hZ2UuY3JlYXRlX2ltYWdlLmNhbGwodGhpcywgY29udGV4dEltYWdlLl92X3NyYy5fbGlua1ZhbHVlLCB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUFuY2hvci5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5hbmNob3JDdHgsIHRydWUpLCBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlLCBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlLCBjb250ZXh0SW1hZ2UuX2FsaWduLCBmaWxlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuaW1hZ2UuVVJMUmVuZGVyaW5nLmZhaWxdIGNhdXNlIDogXCInICsgZS5tZXNzYWdlICsgJ1wiJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVuZGVyX2xpbms6IGZ1bmN0aW9uIChpbWdUYWcsIGFuY2hvcikge1xuICAgICAgICBpZiAoYW5jaG9yKSB7XG4gICAgICAgICAgICBhbmNob3Iuc2V0QXR0cmlidXRlKCdkYXRhLWltYWdlLWxpbmsnLCAnaW1hZ2UnKTtcbiAgICAgICAgICAgIGltZ1RhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW1hZ2UtbGluaycsIGFuY2hvci5ocmVmKTtcbiAgICAgICAgICAgIGFuY2hvci5hcHBlbmRDaGlsZChpbWdUYWcpO1xuICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbWdUYWc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB4eSAneCc6IHdpZHRoLCAneSc6IGhlaWdodFxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZSBFdmVudCBvYmplY3RcbiAgICAgKi9cbiAgICBzZXRJbnB1dFNpemU6IGZ1bmN0aW9uICh4eSwgZSkge1xuICAgICAgICBpZiAoZSAmJiBlLmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zZXRJbnB1dFNpemUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuaW1hZ2UsIHh5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXG4gICAgICovXG4gICAgc2V0UmF0aW86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2V0UmF0aW8uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuaW1hZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcbiAgICAgKi9cbiAgICBjaGVja0ZpbGVJbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGltYWdlUGx1Z2luID0gdGhpcy5wbHVnaW5zLmltYWdlO1xuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XG5cbiAgICAgICAgY29uc3QgbW9kaWZ5SGFuZGxlciA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgICAgIGltYWdlUGx1Z2luLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIHRhZywgbnVsbCk7XG4gICAgICAgICAgICBpbWFnZVBsdWdpbi5vcGVuTW9kaWZ5LmNhbGwodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBnZXQgc2l6ZVxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSA9IGNvbnRleHRJbWFnZS5fb3JpZ2luX3c7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlID0gY29udGV4dEltYWdlLl9vcmlnaW5faDtcbiAgICAgICAgICAgIC8vIGdldCBhbGlnblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy51dGlsLmdldEZvcm1hdEVsZW1lbnQodGFnKTtcbiAgICAgICAgICAgIGlmIChmb3JtYXQpIGNvbnRleHRJbWFnZS5fYWxpZ24gPSBmb3JtYXQuc3R5bGUudGV4dEFsaWduIHx8IGZvcm1hdC5zdHlsZS5mbG9hdDtcbiAgICAgICAgICAgIC8vIGxpbmtcbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YWcsIHRoaXMudXRpbC5pc0FuY2hvcik7XG4gICAgICAgICAgICBpZiAobGluayAmJiAhY29udGV4dEltYWdlLmFuY2hvckN0eC5saW5rVmFsdWUpIGNvbnRleHRJbWFnZS5hbmNob3JDdHgubGlua1ZhbHVlID0gJyAnO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbWFnZVBsdWdpbi51cGRhdGVfaW1hZ2UuY2FsbCh0aGlzLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0uYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgWydpbWcnXSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgbW9kaWZ5SGFuZGxlciwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAqL1xuICAgIHJlc2V0RmlsZUluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnJlc2V0SW5mby5jYWxsKHRoaXMsICdpbWFnZScsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQpO1xuICAgIH0sXG5cbiAgICBjcmVhdGVfaW1hZ2U6IGZ1bmN0aW9uIChzcmMsIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgYWxpZ24sIGZpbGUpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VQbHVnaW4gPSB0aGlzLnBsdWdpbnMuaW1hZ2U7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gJ2ltYWdlJztcblxuICAgICAgICBsZXQgb0ltZyA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdJTUcnKTtcbiAgICAgICAgb0ltZy5zcmMgPSBzcmM7XG4gICAgICAgIG9JbWcuYWx0ID0gY29udGV4dEltYWdlLl9hbHRUZXh0O1xuICAgICAgICBvSW1nLnNldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnLCAnMCcpO1xuICAgICAgICBhbmNob3IgPSBpbWFnZVBsdWdpbi5vblJlbmRlcl9saW5rLmNhbGwodGhpcywgb0ltZywgYW5jaG9yKTtcblxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9yZXNpemluZykge1xuICAgICAgICAgICAgb0ltZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHJvcG9ydGlvbicsIGNvbnRleHRJbWFnZS5fcHJvcG9ydGlvbkNoZWNrZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGFuY2hvcik7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvbnRhaW5lci5jYWxsKHRoaXMsIGNvdmVyLCAnc2UtaW1hZ2UtY29udGFpbmVyJyk7XG5cbiAgICAgICAgLy8gY2FwdGlvblxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9jYXB0aW9uQ2hlY2tlZCkge1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5jcmVhdGVfY2FwdGlvbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgZmFsc2UpO1xuICAgICAgICAgICAgY292ZXIuYXBwZW5kQ2hpbGQoY29udGV4dEltYWdlLl9jYXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudCA9IG9JbWc7XG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIgPSBjb3ZlcjtcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cbiAgICAgICAgLy8gc2V0IHNpemVcbiAgICAgICAgaW1hZ2VQbHVnaW4uYXBwbHlTaXplLmNhbGwodGhpcywgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgLy8gYWxpZ25cbiAgICAgICAgaW1hZ2VQbHVnaW4uc2V0QWxpZ24uY2FsbCh0aGlzLCBhbGlnbiwgb0ltZywgY292ZXIsIGNvbnRhaW5lcik7XG5cbiAgICAgICAgb0ltZy5vbmxvYWQgPSBpbWFnZVBsdWdpbi5faW1hZ2VfY3JlYXRlX29ubG9hZC5iaW5kKHRoaXMsIG9JbWcsIGNvbnRleHRJbWFnZS5zdmdEZWZhdWx0U2l6ZSwgY29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMuaW5zZXJ0Q29tcG9uZW50KGNvbnRhaW5lciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgb0ltZywgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgZmlsZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9ICcnO1xuICAgIH0sXG5cbiAgICBfaW1hZ2VfY3JlYXRlX29ubG9hZDogZnVuY3Rpb24gKG9JbWcsIHN2Z0RlZmF1bHRTaXplLCBjb250YWluZXIpIHtcbiAgICAgICAgLy8gc3ZnIGV4Y2VwdGlvbiBoYW5kbGluZ1xuICAgICAgICBpZiAob0ltZy5vZmZzZXRXaWR0aCA9PT0gMCkgdGhpcy5wbHVnaW5zLmltYWdlLmFwcGx5U2l6ZS5jYWxsKHRoaXMsIHN2Z0RlZmF1bHRTaXplLCAnJyk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWVkaWFBdXRvU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChvSW1nLCAnaW1hZ2UnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmFwcGVuZEZvcm1hdFRhZyhjb250YWluZXIsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShsaW5lLCAwLCBsaW5lLCAwKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVfaW1hZ2U6IGZ1bmN0aW9uIChpbml0LCBvcGVuQ29udHJvbGxlciwgbm90SGlzdG9yeVB1c2gpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xuICAgICAgICBsZXQgaW1hZ2VFbCA9IGNvbnRleHRJbWFnZS5fZWxlbWVudDtcbiAgICAgICAgbGV0IGNvdmVyID0gY29udGV4dEltYWdlLl9jb3ZlcjtcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IGNvbnRleHRJbWFnZS5fY29udGFpbmVyO1xuICAgICAgICBsZXQgaXNOZXdDb250YWluZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY292ZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlzTmV3Q29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGltYWdlRWwgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGltYWdlRWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY292ZXIgPSBjb3Zlci5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAgICBpbWFnZUVsID0gY292ZXIucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgICAgICBpc05ld0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBjb250YWluZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb250YWluZXIuY2FsbCh0aGlzLCBjb3ZlciwgJ3NlLWltYWdlLWNvbnRhaW5lcicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY292ZXIpO1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9jb3ZlciA9IGNvdmVyO1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50ID0gaW1hZ2VFbDtcbiAgICAgICAgICAgIGlzTmV3Q29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBzaXplXG4gICAgICAgIGxldCBjaGFuZ2VTaXplO1xuICAgICAgICBjb25zdCB4ID0gdGhpcy51dGlsLmlzTnVtYmVyKGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUpID8gY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWU7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnV0aWwuaXNOdW1iZXIoY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSkgPyBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlICsgY29udGV4dEltYWdlLnNpemVVbml0IDogY29udGV4dEltYWdlLmlucHV0WS52YWx1ZTtcbiAgICAgICAgaWYgKC8lJC8udGVzdChpbWFnZUVsLnN0eWxlLndpZHRoKSkge1xuICAgICAgICAgICAgY2hhbmdlU2l6ZSA9IHggIT09IGNvbnRhaW5lci5zdHlsZS53aWR0aCB8fCB5ICE9PSBjb250YWluZXIuc3R5bGUuaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hhbmdlU2l6ZSA9IHggIT09IGltYWdlRWwuc3R5bGUud2lkdGggfHwgeSAhPT0gaW1hZ2VFbC5zdHlsZS5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHRcbiAgICAgICAgaW1hZ2VFbC5hbHQgPSBjb250ZXh0SW1hZ2UuX2FsdFRleHQ7XG4gICAgICAgIFxuICAgICAgICAvLyBjYXB0aW9uXG4gICAgICAgIGxldCBtb2RpZmllZENhcHRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fY2FwdGlvbkNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlmICghY29udGV4dEltYWdlLl9jYXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5jcmVhdGVfY2FwdGlvbi5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIGNvdmVyLmFwcGVuZENoaWxkKGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRDYXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX2NhcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250ZXh0SW1hZ2UuX2NhcHRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRDYXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpbmtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5wbHVnaW5zLmFuY2hvci5jcmVhdGVBbmNob3IuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LCB0cnVlKTtcbiAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9saW5rRWxlbWVudCA9IGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQgPT09IGFuY2hvciA/IGFuY2hvci5jbG9uZU5vZGUoZmFsc2UpIDogYW5jaG9yO1xuICAgICAgICAgICAgY292ZXIuaW5zZXJ0QmVmb3JlKHRoaXMucGx1Z2lucy5pbWFnZS5vblJlbmRlcl9saW5rLmNhbGwodGhpcywgaW1hZ2VFbCwgY29udGV4dEltYWdlLl9saW5rRWxlbWVudCksIGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dEltYWdlLl9saW5rRWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VFbGVtZW50ID0gaW1hZ2VFbDtcbiAgICAgICAgICAgIGltYWdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW1hZ2UtbGluaycsICcnKTtcbiAgICAgICAgICAgIGlmIChjb3Zlci5jb250YWlucyhjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gaW1hZ2VFbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb3Zlci5yZW1vdmVDaGlsZChjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb3Zlci5pbnNlcnRCZWZvcmUobmV3RWwsIGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XG4gICAgICAgICAgICAgICAgaW1hZ2VFbCA9IG5ld0VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdEVsZW1lbnQgPSAodGhpcy51dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGNvbnRleHRJbWFnZS5fZWxlbWVudC5wYXJlbnROb2RlKSB8fCB0aGlzLnV0aWwuaXNXeXNpd3lnRGl2KGNvbnRleHRJbWFnZS5fZWxlbWVudC5wYXJlbnROb2RlKSkgPyBcbiAgICAgICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgOiBcbiAgICAgICAgICAgICAgICAvXkEkL2kudGVzdChjb250ZXh0SW1hZ2UuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlTmFtZSkgPyBjb250ZXh0SW1hZ2UuX2VsZW1lbnQucGFyZW50Tm9kZSA6IHRoaXMudXRpbC5nZXRGb3JtYXRFbGVtZW50KGNvbnRleHRJbWFnZS5fZWxlbWVudCkgfHwgY29udGV4dEltYWdlLl9lbGVtZW50O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5pc0Zvcm1hdEVsZW1lbnQoZXhpc3RFbGVtZW50KSAmJiBleGlzdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250ZXh0SW1hZ2UuX2VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIC8vIGNsZWFuIGZvcm1hdCB0YWdcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlRW1wdHlOb2RlKGV4aXN0RWxlbWVudCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDApIGV4aXN0RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnV0aWwuaHRtbFJlbW92ZVdoaXRlU3BhY2UoZXhpc3RFbGVtZW50LmlubmVySFRNTCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGV4aXN0RWxlbWVudC5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRzID0gZXhpc3RFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQucHJldmlvdXNTaWJsaW5nID8gZm9ybWF0cy5uZXh0RWxlbWVudFNpYmxpbmcgOiBmb3JtYXRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oZXhpc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW1hZ2VFbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcblxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50ID0gaW1hZ2VFbDtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIgPSBjb3ZlcjtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJhbnNmb3JtXG4gICAgICAgIGlmIChtb2RpZmllZENhcHRpb24gfHwgKCFjb250ZXh0SW1hZ2UuX29ubHlQZXJjZW50YWdlICYmIGNoYW5nZVNpemUpKSB7XG4gICAgICAgICAgICBpZiAoIWluaXQgJiYgKC9cXGQrLy50ZXN0KGltYWdlRWwuc3R5bGUuaGVpZ2h0KSB8fCAodGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCAmJiBjb250ZXh0SW1hZ2UuX2NhcHRpb25DaGVja2VkKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoLyUkLy50ZXN0KGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUpIHx8IC8lJC8udGVzdChjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBpbWFnZUVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuc2V0VHJhbnNmb3JtU2l6ZS5jYWxsKHRoaXMsIGltYWdlRWwsIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSwgMCksIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSwgMCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNpemVcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fcmVzaXppbmcpIHtcbiAgICAgICAgICAgIGltYWdlRWwuc2V0QXR0cmlidXRlKCdkYXRhLXByb3BvcnRpb24nLCBjb250ZXh0SW1hZ2UuX3Byb3BvcnRpb25DaGVja2VkKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLmFwcGx5U2l6ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxpZ25cbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgaW1hZ2VFbCwgbnVsbCwgbnVsbCk7XG5cbiAgICAgICAgLy8gc2V0IGltYWdlc0luZm9cbiAgICAgICAgaWYgKGluaXQpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgaW1hZ2VFbCwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgbnVsbCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3BlbkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGltYWdlRWwsICdpbWFnZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xuICAgICAgICBpZiAoIW5vdEhpc3RvcnlQdXNoKSB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZV9zcmM6IGZ1bmN0aW9uIChzcmMsIGVsZW1lbnQsIGZpbGUpIHtcbiAgICAgICAgZWxlbWVudC5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuX3cuc2V0VGltZW91dCh0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5iaW5kKHRoaXMsICdpbWFnZScsIGVsZW1lbnQsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQsIGZpbGUsIHRydWUpKTtcbiAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZWxlbWVudCwgJ2ltYWdlJyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXG4gICAgICovXG4gICAgb25Nb2RpZnlNb2RlOiBmdW5jdGlvbiAoZWxlbWVudCwgc2l6ZSkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcbiAgICAgICAgY29udGV4dEltYWdlLl9saW5rRWxlbWVudCA9IGNvbnRleHRJbWFnZS5hbmNob3JDdHgubGlua0FuY2hvciA9IC9eQSQvaS50ZXN0KGVsZW1lbnQucGFyZW50Tm9kZS5ub2RlTmFtZSkgPyBlbGVtZW50LnBhcmVudE5vZGUgOiBudWxsO1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgJ0ZJR1VSRScpO1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMudXRpbC5pc01lZGlhQ29tcG9uZW50KTtcbiAgICAgICAgY29udGV4dEltYWdlLl9jYXB0aW9uID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudChjb250ZXh0SW1hZ2UuX2NvdmVyLCAnRklHQ0FQVElPTicpO1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2FsaWduID0gZWxlbWVudC5zdHlsZS5mbG9hdCB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicpIHx8ICdub25lJztcbiAgICAgICAgZWxlbWVudC5zdHlsZS5mbG9hdCA9ICcnO1xuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldEN0eChjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50LCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4KTtcblxuICAgICAgICBpZiAoc2l6ZSkge1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50X3cgPSBzaXplLnc7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnRfaCA9IHNpemUuaDtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudF90ID0gc2l6ZS50O1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50X2wgPSBzaXplLmw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdXNlclNpemUgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemUnKSB8fCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpO1xuICAgICAgICBsZXQgdywgaDtcbiAgICAgICAgaWYgKHVzZXJTaXplKSB7XG4gICAgICAgICAgICB1c2VyU2l6ZSA9IHVzZXJTaXplLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB3ID0gdXNlclNpemVbMF07XG4gICAgICAgICAgICBoID0gdXNlclNpemVbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSkge1xuICAgICAgICAgICAgdyA9IHNpemUudztcbiAgICAgICAgICAgIGggPSBzaXplLmg7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0SW1hZ2UuX29yaWdpbl93ID0gdyB8fCBlbGVtZW50LnN0eWxlLndpZHRoIHx8IGVsZW1lbnQud2lkdGggfHwgJyc7XG4gICAgICAgIGNvbnRleHRJbWFnZS5fb3JpZ2luX2ggPSBoIHx8IGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0IHx8ICcnO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xuICAgICAqL1xuICAgIG9wZW5Nb2RpZnk6IGZ1bmN0aW9uIChub3RPcGVuKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlKSB7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUgPSBjb250ZXh0SW1hZ2UucHJldmlld1NyYy50ZXh0Q29udGVudCA9IGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLnZhbHVlID0gY29udGV4dEltYWdlLl9lbGVtZW50LnNyYztcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0SW1hZ2UuX2FsdFRleHQgPSBjb250ZXh0SW1hZ2UuYWx0VGV4dC52YWx1ZSA9IGNvbnRleHRJbWFnZS5fZWxlbWVudC5hbHQ7XG4gICAgICAgIGNvbnRleHRJbWFnZS5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCJdW3ZhbHVlPVwiJyArIGNvbnRleHRJbWFnZS5fYWxpZ24gKyAnXCJdJykuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIGNvbnRleHRJbWFnZS5fYWxpZ24gPSBjb250ZXh0SW1hZ2UubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiXTpjaGVja2VkJykudmFsdWU7XG4gICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbkNoZWNrZWQgPSBjb250ZXh0SW1hZ2UuY2FwdGlvbkNoZWNrRWwuY2hlY2tlZCA9ICEhY29udGV4dEltYWdlLl9jYXB0aW9uO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fcmVzaXppbmcpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSwgdGhpcy5wbHVnaW5zLmltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm90T3BlbikgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2ltYWdlJywgdHJ1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAqL1xuICAgIGFwcGx5U2l6ZTogZnVuY3Rpb24gKHcsIGgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xuXG4gICAgICAgIGlmICghdykgdyA9IGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUgfHwgdGhpcy5vcHRpb25zLmltYWdlV2lkdGg7XG4gICAgICAgIGlmICghaCkgaCA9IGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgfHwgdGhpcy5vcHRpb25zLmltYWdlSGVpZ2h0O1xuICAgICAgICBcbiAgICAgICAgaWYgKChjb250ZXh0SW1hZ2UuX29ubHlQZXJjZW50YWdlICYmICEhdykgfHwgLyUkLy50ZXN0KHcpKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0UGVyY2VudFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCghdyB8fCB3ID09PSAnYXV0bycpICYmICghaCB8fCBoID09PSAnYXV0bycpKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QXV0b1NpemUuY2FsbCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRTaXplLmNhbGwodGhpcywgdywgaCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcbiAgICAgKi9cbiAgICBzaXplUmV2ZXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NpemVSZXZlcnQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuaW1hZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcbiAgICAgKi9cbiAgICBzZXRTaXplOiBmdW5jdGlvbiAodywgaCwgbm90UmVzZXRQZXJjZW50YWdlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xuICAgICAgICBjb25zdCBvbmx5VyA9IC9eKHJ3fGx3KSQvLnRlc3QoZGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3Qgb25seUggPSAvXih0aHxiaCkkLy50ZXN0KGRpcmVjdGlvbik7XG5cbiAgICAgICAgaWYgKCFvbmx5SCkge1xuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy51dGlsLmlzTnVtYmVyKHcpID8gdyArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IHc7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuY2FuY2VsUGVyY2VudEF0dHIuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9ubHlXKSB7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IC8lJC8udGVzdChoKSA/ICcnIDogaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX2FsaWduID09PSAnY2VudGVyJykgdGhpcy5wbHVnaW5zLmltYWdlLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICAgIGlmICghbm90UmVzZXRQZXJjZW50YWdlKSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcblxuICAgICAgICAvLyBzYXZlIGN1cnJlbnQgc2l6ZVxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zYXZlQ3VycmVudFNpemUuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcbiAgICAgKi9cbiAgICBzZXRBdXRvU2l6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgY29udGV4dEltYWdlLl9lbGVtZW50KTtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLmNhbmNlbFBlcmNlbnRBdHRyLmNhbGwodGhpcyk7XG5cbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS5oZWlnaHQgPSAnJztcblxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJywgJ2F1dG8sYXV0bycpO1xuXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSk7XG4gICAgfSxcbiAgICBcbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcbiAgICAgKi9cbiAgICBzZXRPcmlnaW5TaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJyk7XG5cbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgY29udGV4dEltYWdlLl9lbGVtZW50KTtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLmNhbmNlbFBlcmNlbnRBdHRyLmNhbGwodGhpcyk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luU2l6ZSA9IChjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpIHx8ICcnKS5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCB3ID0gb3JpZ2luU2l6ZVswXTtcbiAgICAgICAgY29uc3QgaCA9IG9yaWdpblNpemVbMV07XG5cbiAgICAgICAgaWYgKG9yaWdpblNpemUpIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX29ubHlQZXJjZW50YWdlIHx8ICgvJSQvLnRlc3QodykgJiYgKC8lJC8udGVzdChoKSB8fCAhL1xcZC8udGVzdChoKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgdywgaCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRTaXplLmNhbGwodGhpcywgdywgaCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zYXZlQ3VycmVudFNpemUuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqL1xuICAgIHNldFBlcmNlbnRTaXplOiBmdW5jdGlvbiAodywgaCkge1xuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XG4gICAgICAgIGggPSAhIWggJiYgIS8lJC8udGVzdChoKSAmJiAhdGhpcy51dGlsLmdldE51bWJlcihoLCAwKSA/IHRoaXMudXRpbC5pc051bWJlcihoKSA/IGggKyAnJScgOiBoIDogdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IChoIHx8ICcnKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0UGVyY2VudGFnZSA9IC8lJC8udGVzdChoKTtcblxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lci5zdHlsZS53aWR0aCA9IHRoaXMudXRpbC5pc051bWJlcih3KSA/IHcgKyAnJScgOiB3O1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS5oZWlnaHQgPSAhaGVpZ2h0UGVyY2VudGFnZSA/ICcnIDogaDtcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0UGVyY2VudGFnZSA/ICcnIDogaDtcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcblxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnLCB3ICsgJywnICsgaCk7XG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5zZXRDYXB0aW9uUG9zaXRpb24uY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQpO1xuXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqL1xuICAgIGNhbmNlbFBlcmNlbnRBdHRyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcbiAgICAgICAgXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XG5cbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRJbWFnZS5fY29udGFpbmVyLCB0aGlzLmNvbnRleHQuaW1hZ2UuX2Zsb2F0Q2xhc3NSZWdFeHApO1xuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dEltYWdlLl9jb250YWluZXIsICdfX3NlX19mbG9hdC0nICsgY29udGV4dEltYWdlLl9hbGlnbik7XG5cbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXG4gICAgICovXG4gICAgc2V0QWxpZ246IGZ1bmN0aW9uIChhbGlnbiwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikge1xuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWFsaWduKSBhbGlnbiA9IGNvbnRleHRJbWFnZS5fYWxpZ247XG4gICAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IGNvbnRleHRJbWFnZS5fZWxlbWVudDtcbiAgICAgICAgaWYgKCFjb3ZlcikgY292ZXIgPSBjb250ZXh0SW1hZ2UuX2NvdmVyO1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gY29udGV4dEltYWdlLl9jb250YWluZXI7XG5cbiAgICAgICAgaWYgKGFsaWduICYmIGFsaWduICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLm1hcmdpbiA9ICdhdXRvJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLm1hcmdpbiA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS53aWR0aCkgJiYgYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUubWluV2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICBjb3Zlci5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5taW5XaWR0aCA9ICcnO1xuICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gKGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSA6ICgoIWVsZW1lbnQuc3R5bGUud2lkdGggfHwgZWxlbWVudC5zdHlsZS53aWR0aCA9PT0gJ2F1dG8nKSA/ICcnIDogZWxlbWVudC5zdHlsZS53aWR0aCB8fCAnMTAwJScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzQ2xhc3MoY29udGFpbmVyLCAnX19zZV9fZmxvYXQtJyArIGFsaWduKSkge1xuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgY29udGV4dEltYWdlLl9mbG9hdENsYXNzUmVnRXhwKTtcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250YWluZXIsICdfX3NlX19mbG9hdC0nICsgYWxpZ24pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicsIGFsaWduKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xuICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSkgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS52YWx1ZSA9ICcnO1xuICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ1VybEZpbGUpIGNvbnRleHRJbWFnZS5fdl9zcmMuX2xpbmtWYWx1ZSA9IGNvbnRleHRJbWFnZS5wcmV2aWV3U3JjLnRleHRDb250ZW50ID0gY29udGV4dEltYWdlLmltZ1VybEZpbGUudmFsdWUgPSAnJztcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgJiYgY29udGV4dEltYWdlLmltZ1VybEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5wcmV2aWV3U3JjLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0SW1hZ2UuYWx0VGV4dC52YWx1ZSA9ICcnO1xuICAgICAgICBjb250ZXh0SW1hZ2UubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiXVt2YWx1ZT1cIm5vbmVcIl0nKS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgY29udGV4dEltYWdlLmNhcHRpb25DaGVja0VsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLm9wZW5UYWIuY2FsbCh0aGlzLCAnaW5pdCcpO1xuXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX3Jlc2l6aW5nKSB7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlID0gdGhpcy5vcHRpb25zLmltYWdlV2lkdGggPT09IGNvbnRleHRJbWFnZS5fZGVmYXVsdFNpemVYID8gJycgOiB0aGlzLm9wdGlvbnMuaW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgPSB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQgPT09IGNvbnRleHRJbWFnZS5fZGVmYXVsdFNpemVZID8gJycgOiB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQ7XG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UucHJvcG9ydGlvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fcmF0aW8gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fcmF0aW9YID0gMTtcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fcmF0aW9ZID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IuaW5pdC5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5hbmNob3JDdHgpO1xuICAgIH1cbn07XG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGRpYWxvZyBmcm9tICcuLi9tb2R1bGVzL2RpYWxvZyc7XG5pbXBvcnQgY29tcG9uZW50IGZyb20gJy4uL21vZHVsZXMvY29tcG9uZW50JztcbmltcG9ydCByZXNpemluZyBmcm9tICcuLi9tb2R1bGVzL3Jlc2l6aW5nJztcbmltcG9ydCBmaWxlTWFuYWdlciBmcm9tICcuLi9tb2R1bGVzL2ZpbGVNYW5hZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICd2aWRlbycsXG4gICAgZGlzcGxheTogJ2RpYWxvZycsXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb3JlLmFkZE1vZHVsZShbZGlhbG9nLCBjb21wb25lbnQsIHJlc2l6aW5nLCBmaWxlTWFuYWdlcl0pO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb3JlLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IGNvbnRleHQudmlkZW8gPSB7XG4gICAgICAgICAgICBfaW5mb0xpc3Q6IFtdLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcbiAgICAgICAgICAgIF9pbmZvSW5kZXg6IDAsIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAgICAgICAgX3VwbG9hZEZpbGVMZW5ndGg6IDAsIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAgICAgICAgZm9jdXNFbGVtZW50OiBudWxsLCAvLyBAT3ZlcnJpZGUgZGlhbG9nIC8vIFRoaXMgZWxlbWVudCBoYXMgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cbiAgICAgICAgICAgIHNpemVVbml0OiBvcHRpb25zLl92aWRlb1NpemVVbml0LFxuICAgICAgICAgICAgX2FsaWduOiAnbm9uZScsXG4gICAgICAgICAgICBfZmxvYXRDbGFzc1JlZ0V4cDogJ19fc2VfX2Zsb2F0XFxcXC1bYS16XSsnLFxuICAgICAgICAgICAgX3lvdXR1YmVRdWVyeTogb3B0aW9ucy55b3V0dWJlUXVlcnksXG4gICAgICAgICAgICBfdmlkZW9SYXRpbzogKG9wdGlvbnMudmlkZW9SYXRpbyAqIDEwMCkgKyAnJScsXG4gICAgICAgICAgICBfZGVmYXVsdFJhdGlvOiAob3B0aW9ucy52aWRlb1JhdGlvICogMTAwKSArICclJyxcbiAgICAgICAgICAgIF9saW5rVmFsdWU6ICcnLFxuICAgICAgICAgICAgLy8gQHJlcXVpcmUgQE92ZXJyaWRlIGNvbXBvbmVudFxuICAgICAgICAgICAgX2VsZW1lbnQ6IG51bGwsXG4gICAgICAgICAgICBfY292ZXI6IG51bGwsXG4gICAgICAgICAgICBfY29udGFpbmVyOiBudWxsLFxuICAgICAgICAgICAgLy8gQE92ZXJyaWRlIHJlc2l6aW5nIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGlucHV0WDogbnVsbCxcbiAgICAgICAgICAgIGlucHV0WTogbnVsbCxcbiAgICAgICAgICAgIF9lbGVtZW50X3c6IDEsXG4gICAgICAgICAgICBfZWxlbWVudF9oOiAxLFxuICAgICAgICAgICAgX2VsZW1lbnRfbDogMCxcbiAgICAgICAgICAgIF9lbGVtZW50X3Q6IDAsXG4gICAgICAgICAgICBfZGVmYXVsdFNpemVYOiAnMTAwJScsXG4gICAgICAgICAgICBfZGVmYXVsdFNpemVZOiAob3B0aW9ucy52aWRlb1JhdGlvICogMTAwKSArICclJyxcbiAgICAgICAgICAgIF9vcmlnaW5fdzogb3B0aW9ucy52aWRlb1dpZHRoID09PSAnMTAwJScgPyAnJyA6IG9wdGlvbnMudmlkZW9XaWR0aCxcbiAgICAgICAgICAgIF9vcmlnaW5faDogb3B0aW9ucy52aWRlb0hlaWdodCA9PT0gJzU2LjI1JScgPyAnJyA6IG9wdGlvbnMudmlkZW9IZWlnaHQsXG4gICAgICAgICAgICBfcHJvcG9ydGlvbkNoZWNrZWQ6IHRydWUsXG4gICAgICAgICAgICBfcmVzaXppbmc6IG9wdGlvbnMudmlkZW9SZXNpemluZyxcbiAgICAgICAgICAgIF9yZXNpemVEb3RIaWRlOiAhb3B0aW9ucy52aWRlb0hlaWdodFNob3csXG4gICAgICAgICAgICBfcm90YXRpb246IG9wdGlvbnMudmlkZW9Sb3RhdGlvbixcbiAgICAgICAgICAgIF9vbmx5UGVyY2VudGFnZTogb3B0aW9ucy52aWRlb1NpemVPbmx5UGVyY2VudGFnZSxcbiAgICAgICAgICAgIF9yYXRpbzogZmFsc2UsXG4gICAgICAgICAgICBfcmF0aW9YOiAxLFxuICAgICAgICAgICAgX3JhdGlvWTogMSxcbiAgICAgICAgICAgIF9jYXB0aW9uU2hvdzogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICAvKiogdmlkZW8gZGlhbG9nICovXG4gICAgICAgIGxldCB2aWRlb19kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcbiAgICAgICAgY29udGV4dFZpZGVvLm1vZGFsID0gdmlkZW9fZGlhbG9nO1xuICAgICAgICBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV92aWRlb19maWxlJyk7XG4gICAgICAgIGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUgPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWlucHV0LXVybCcpO1xuICAgICAgICBjb250ZXh0VmlkZW8uZm9jdXNFbGVtZW50ID0gY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSB8fCBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGU7XG4gICAgICAgIGNvbnRleHRWaWRlby5wcmV2aWV3ID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1saW5rLXByZXZpZXcnKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignZm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuc3VibWl0LmJpbmQoY29yZSkpO1xuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlKSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVtb3ZlU2VsZWN0ZWRGaWxlcy5iaW5kKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSwgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSwgY29udGV4dFZpZGVvLnByZXZpZXcpKTtcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSAmJiBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fZmlsZUlucHV0Q2hhbmdlLmJpbmQoY29udGV4dFZpZGVvKSk7XG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25MaW5rUHJldmlldy5iaW5kKGNvbnRleHRWaWRlby5wcmV2aWV3LCBjb250ZXh0VmlkZW8sIG9wdGlvbnMubGlua1Byb3RvY29sKSk7XG5cbiAgICAgICAgY29udGV4dFZpZGVvLnByb3BvcnRpb24gPSB7fTtcbiAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvUmF0aW9PcHRpb24gPSB7fTtcbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WCA9IHt9O1xuICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnZpZGVvUmVzaXppbmcpIHtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fY2hlY2tfcHJvcG9ydGlvbicpO1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvUmF0aW9PcHRpb24gPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLXZpZGVvLXJhdGlvJyk7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fc2l6ZV94Jyk7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fc2l6ZV95Jyk7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlID0gb3B0aW9ucy52aWRlb1dpZHRoO1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSA9IG9wdGlvbnMudmlkZW9IZWlnaHQ7XG5cbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFguYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLnNldElucHV0U2l6ZS5iaW5kKGNvcmUsICd4JykpO1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuc2V0SW5wdXRTaXplLmJpbmQoY29yZSwgJ3knKSk7XG5cbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFguYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zZXRSYXRpby5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zZXRSYXRpby5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8udmlkZW9SYXRpb09wdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLnNldFZpZGVvUmF0aW8uYmluZChjb3JlKSk7XG5cbiAgICAgICAgICAgIHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZGlhbG9nLWJ0bi1yZXZlcnQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuc2l6ZVJldmVydC5iaW5kKGNvcmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZCh2aWRlb19kaWFsb2cpO1xuXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cbiAgICAgICAgdmlkZW9fZGlhbG9nID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqIGRpYWxvZyAqL1xuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG5cbiAgICAgICAgZGlhbG9nLmNsYXNzTmFtZSA9ICdzZS1kaWFsb2ctY29udGVudCc7XG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBsZXQgaHRtbCA9ICcnICtcbiAgICAgICAgICAgICc8Zm9ybSBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmNhbmNlbCArXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtbW9kYWwtdGl0bGVcIj4nICsgbGFuZy5kaWFsb2dCb3gudmlkZW9Cb3gudGl0bGUgKyAnPC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JztcblxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmlkZW9GaWxlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gudmlkZW9Cb3guZmlsZSArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0tZmlsZXNcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gX3NlX3ZpZGVvX2ZpbGVcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIicgKyBvcHRpb24udmlkZW9BY2NlcHQgKyAnXCInICsgKG9wdGlvbi52aWRlb011bHRpcGxlRmlsZSA/ICcgbXVsdGlwbGU9XCJtdWx0aXBsZVwiJyA6ICcnKSArICcvPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZmlsZXNSZW1vdmVcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctZmlsZXMtZWRnZS1idXR0b24gc2UtZmlsZS1yZW1vdmVcIiB0aXRsZT1cIicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJ1wiPicgKyBjb3JlLmljb25zLmNhbmNlbCArICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyA7XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmlkZW9VcmxJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC52aWRlb0JveC51cmwgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBzZS1pbnB1dC11cmxcIiB0eXBlPVwidGV4dFwiIC8+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9XCJzZS1saW5rLXByZXZpZXdcIj48L3ByZT4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbi52aWRlb1Jlc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF0aW9MaXN0ID0gb3B0aW9uLnZpZGVvUmF0aW9MaXN0IHx8IFt7bmFtZTogJzE2OjknLCB2YWx1ZTogMC41NjI1fSwge25hbWU6ICc0OjMnLCB2YWx1ZTogMC43NX0sIHtuYW1lOiAnMjE6OScsIHZhbHVlOiAwLjQyODV9XTtcbiAgICAgICAgICAgICAgICBjb25zdCByYXRpbyA9IG9wdGlvbi52aWRlb1JhdGlvO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlQZXJjZW50YWdlID0gb3B0aW9uLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlQZXJjZW50RGlzcGxheSA9IG9ubHlQZXJjZW50YWdlID8gJyBzdHlsZT1cImRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcIicgOiAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHREaXNwbGF5ID0gIW9wdGlvbi52aWRlb0hlaWdodFNob3cgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdGlvRGlzcGxheSA9ICFvcHRpb24udmlkZW9SYXRpb1Nob3cgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlXaWR0aERpc3BsYXkgPSAhb25seVBlcmNlbnRhZ2UgJiYgIW9wdGlvbi52aWRlb0hlaWdodFNob3cgJiYgIW9wdGlvbi52aWRlb1JhdGlvU2hvdyA/ICcgc3R5bGU9XCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCInIDogJyc7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLXNpemUtdGV4dFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLXdcIj4nICsgbGFuZy5kaWFsb2dCb3gud2lkdGggKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiPiZuYnNwOzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cInNpemUtaFwiJyArIGhlaWdodERpc3BsYXkgKyAnPicgKyBsYW5nLmRpYWxvZ0JveC5oZWlnaHQgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2l6ZS1oXCInICsgcmF0aW9EaXNwbGF5ICsgJz4oJyArIGxhbmcuZGlhbG9nQm94LnJhdGlvICsgJyk8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWNvbnRyb2wgX3NlX3ZpZGVvX3NpemVfeFwiIHBsYWNlaG9sZGVyPVwiMTAwJVwiJyArIChvbmx5UGVyY2VudGFnZSA/ICcgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIicgOiAndHlwZT1cInRleHRcIicpICsgKG9ubHlQZXJjZW50YWdlID8gJyBtYXg9XCIxMDBcIicgOiAnJykgKyAnLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZS1kaWFsb2ctc2l6ZS14XCInICsgb25seVdpZHRoRGlzcGxheSArICc+JyArIChvbmx5UGVyY2VudGFnZSA/ICclJyA6ICd4JykgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1jb250cm9sIF9zZV92aWRlb19zaXplX3lcIiBwbGFjZWhvbGRlcj1cIicgKyAob3B0aW9uLnZpZGVvUmF0aW8gKiAxMDApICsgJyVcIicgKyAob25seVBlcmNlbnRhZ2UgPyAnIHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCInIDogJ3R5cGU9XCJ0ZXh0XCInKSArIChvbmx5UGVyY2VudGFnZSA/ICcgbWF4PVwiMTAwXCInIDogJycpICsgaGVpZ2h0RGlzcGxheSArICcvPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzZWxlY3QgY2xhc3M9XCJzZS1pbnB1dC1zZWxlY3Qgc2UtdmlkZW8tcmF0aW9cIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5yYXRpbyArICdcIicgKyByYXRpb0Rpc3BsYXkgKyAnPic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWlnaHREaXNwbGF5KSBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiXCI+IC0gPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmF0aW9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgcmF0aW9MaXN0W2ldLnZhbHVlICsgJ1wiJyArIChyYXRpby50b1N0cmluZygpID09PSByYXRpb0xpc3RbaV0udmFsdWUudG9TdHJpbmcoKSA/ICcgc2VsZWN0ZWQnIDogJycpICsgJz4nICsgcmF0aW9MaXN0W2ldLm5hbWUgKyAnPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8L3NlbGVjdD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5yZXZlcnRCdXR0b24gKyAnXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWJ0bi1yZXZlcnRcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIj4nICsgY29yZS5pY29ucy5yZXZlcnQgKyAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybSBzZS1kaWFsb2ctZm9ybS1mb290ZXJcIicgKyBvbmx5UGVyY2VudERpc3BsYXkgKyBvbmx5V2lkdGhEaXNwbGF5ICsgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfdmlkZW9fY2hlY2tfcHJvcG9ydGlvblwiIGNoZWNrZWQvPiZuYnNwOycgKyBsYW5nLmRpYWxvZ0JveC5wcm9wb3J0aW9uICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBodG1sICs9ICcnICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9vdGVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl92aWRlb19yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwibm9uZVwiIGNoZWNrZWQ+JyArIGxhbmcuZGlhbG9nQm94LmJhc2ljICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX3ZpZGVvX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJsZWZ0XCI+JyArIGxhbmcuZGlhbG9nQm94LmxlZnQgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cImNlbnRlclwiPicgKyBsYW5nLmRpYWxvZ0JveC5jZW50ZXIgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cInJpZ2h0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJpZ2h0ICsgJzwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwic2UtYnRuLXByaW1hcnlcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCI+PHNwYW4+JyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICc8L3NwYW4+PC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZm9ybT4nO1xuXG4gICAgICAgIGRpYWxvZy5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgIHJldHVybiBkaWFsb2c7XG4gICAgfSxcblxuICAgIF9maWxlSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZGVvSW5wdXRGaWxlLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXcuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9VcmxGaWxlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdsaW5lLXRocm91Z2gnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9yZW1vdmVTZWxlY3RlZEZpbGVzOiBmdW5jdGlvbiAodXJsSW5wdXQsIHByZXZpZXcpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgICBpZiAodXJsSW5wdXQpIHtcbiAgICAgICAgICAgIHVybElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIHByZXZpZXcuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25MaW5rUHJldmlldzogZnVuY3Rpb24gKGNvbnRleHQsIHByb3RvY29sLCBlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgICAgICBpZiAoL148aWZyYW1lLipcXC9pZnJhbWU+JC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuX2xpbmtWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9ICc8SUZyYW1lIDpzcmM9XCIuLlwiPjwvSUZyYW1lPic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0Ll9saW5rVmFsdWUgPSB0aGlzLnRleHRDb250ZW50ID0gIXZhbHVlID8gJycgOiAocHJvdG9jb2wgJiYgdmFsdWUuaW5kZXhPZignOi8vJykgPT09IC0xICYmIHZhbHVlLmluZGV4T2YoJyMnKSAhPT0gMCkgPyBwcm90b2NvbCArIHZhbHVlIDogdmFsdWUuaW5kZXhPZignOi8vJykgPT09IC0xID8gJy8nICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfc2V0VGFnQXR0cnM6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjb250cm9scycsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGF0dHJzID0gdGhpcy5vcHRpb25zLnZpZGVvVGFnQXR0cnM7XG4gICAgICAgIGlmICghYXR0cnMpIHJldHVybjtcblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmhhc093bihhdHRycywga2V5KSkgY29udGludWU7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZVZpZGVvVGFnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHZpZGVvVGFnID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ1ZJREVPJyk7XG4gICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5fc2V0VGFnQXR0cnMuY2FsbCh0aGlzLCB2aWRlb1RhZyk7XG4gICAgICAgIHJldHVybiB2aWRlb1RhZztcbiAgICB9LFxuXG4gICAgX3NldElmcmFtZUF0dHJzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmZyYW1lQm9yZGVyID0gJzAnO1xuICAgICAgICBlbGVtZW50LmFsbG93RnVsbHNjcmVlbiA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgYXR0cnMgPSB0aGlzLm9wdGlvbnMudmlkZW9JZnJhbWVBdHRycztcbiAgICAgICAgaWYgKCFhdHRycykgcmV0dXJuO1xuXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhdHRycykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzT3duKGF0dHJzLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSWZyYW1lVGFnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGlmcmFtZVRhZyA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdJRlJBTUUnKTtcbiAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLl9zZXRJZnJhbWVBdHRycy5jYWxsKHRoaXMsIGlmcmFtZVRhZyk7XG4gICAgICAgIHJldHVybiBpZnJhbWVUYWc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBAUmVxdWlyZWQgZmlsZU1hbmFnZXJcbiAgICAgKi9cbiAgICBmaWxlVGFnczogWydpZnJhbWUnLCAndmlkZW8nXSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBjb3JlLCByZXNpemluZywgZmlsZU1hbmFnZXJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMgY2FsbGVkIGZyb20gY29yZS5zZWxlY3RDb21wb25lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XG4gICAgICovXG4gICAgc2VsZWN0OiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgZWxlbWVudCwgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLmNhbGxfY29udHJvbGxlcl9yZXNpemUuY2FsbCh0aGlzLCBlbGVtZW50LCAndmlkZW8nKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlciwgcmVzaXppbmdcbiAgICAgKi9cbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBmcmFtZSA9IGVsZW1lbnQgfHwgdGhpcy5jb250ZXh0LnZpZGVvLl9lbGVtZW50O1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRleHQudmlkZW8uX2NvbnRhaW5lcjtcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gZnJhbWUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxO1xuICAgICAgICBsZXQgZm9jdXNFbCA9IChjb250YWluZXIucHJldmlvdXNFbGVtZW50U2libGluZyB8fCBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nKTtcblxuICAgICAgICBjb25zdCBlbXB0eURpdiA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250YWluZXIpO1xuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uaW5pdC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XG5cbiAgICAgICAgaWYgKGVtcHR5RGl2ICE9PSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnKSB0aGlzLnV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZW1wdHlEaXYsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOyB9LCBudWxsKTtcblxuICAgICAgICAvLyBmb2N1c1xuICAgICAgICB0aGlzLmZvY3VzRWRnZShmb2N1c0VsKTtcblxuICAgICAgICAvLyBldmVudFxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuZGVsZXRlSW5mby5jYWxsKHRoaXMsICd2aWRlbycsIGRhdGFJbmRleCwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCk7XG5cbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uICh1cGRhdGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuXG4gICAgICAgIGlmICghdXBkYXRlKSB7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlID0gY29udGV4dFZpZGVvLl9vcmlnaW5fdyA9IHRoaXMub3B0aW9ucy52aWRlb1dpZHRoID09PSBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWCA/ICcnIDogdGhpcy5vcHRpb25zLnZpZGVvV2lkdGg7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZLnZhbHVlID0gY29udGV4dFZpZGVvLl9vcmlnaW5faCA9IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodCA9PT0gY29udGV4dFZpZGVvLl9kZWZhdWx0U2l6ZVkgPyAnJyA6IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodDtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgJiYgdGhpcy5vcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMudmlkZW9NdWx0aXBsZUZpbGUpIGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ211bHRpcGxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZykge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFZpZGVvUmF0aW9TZWxlY3QuY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8uX29yaWdpbl9oIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFJhdGlvKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIG9wZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ3ZpZGVvJywgJ3ZpZGVvJyA9PT0gdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpO1xuICAgIH0sXG4gICAgXG4gICAgc2V0VmlkZW9SYXRpbzogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0Lm9wdGlvbnNbZS50YXJnZXQuc2VsZWN0ZWRJbmRleF0udmFsdWU7XG5cbiAgICAgICAgY29udGV4dFZpZGVvLl9kZWZhdWx0U2l6ZVkgPSBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8gPSAhdmFsdWUgPyBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWSA6ICh2YWx1ZSAqIDEwMCkgKyAnJSc7XG4gICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkucGxhY2Vob2xkZXIgPSAhdmFsdWUgPyAnJyA6ICh2YWx1ZSAqIDEwMCkgKyAnJSc7XG4gICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSAnJztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHh5ICd4Jzogd2lkdGgsICd5JzogaGVpZ2h0XG4gICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlIEV2ZW50IG9iamVjdFxuICAgICAqL1xuICAgIHNldElucHV0U2l6ZTogZnVuY3Rpb24gKHh5LCBlKSB7XG4gICAgICAgIGlmIChlICYmIGUua2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2V0SW5wdXRTaXplLmNhbGwodGhpcywgY29udGV4dFZpZGVvLCB4eSk7XG5cbiAgICAgICAgaWYgKHh5ID09PSAneScpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRWaWRlb1JhdGlvU2VsZWN0LmNhbGwodGhpcywgZS50YXJnZXQudmFsdWUgfHwgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqL1xuICAgIHNldFJhdGlvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldFJhdGlvLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnZpZGVvKTtcbiAgICB9LFxuXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XG4gICAgICAgIGNvbnN0IHZpZGVvUGx1Z2luID0gdGhpcy5wbHVnaW5zLnZpZGVvO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb250ZXh0VmlkZW8uX2FsaWduID0gY29udGV4dFZpZGVvLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIl06Y2hlY2tlZCcpLnZhbHVlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlICYmIGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZS5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xuICAgICAgICAgICAgICAgIHZpZGVvUGx1Z2luLnN1Ym1pdEFjdGlvbi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC52aWRlby52aWRlb0lucHV0RmlsZS5maWxlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUgJiYgY29udGV4dFZpZGVvLl9saW5rVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICAgICAgICAgICAgICB2aWRlb1BsdWdpbi5zZXR1cF91cmwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi52aWRlby5zdWJtaXQuZmFpbF0gY2F1c2UgOiBcIicgKyBlcnJvci5tZXNzYWdlICsgJ1wiJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLmNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIHN1Ym1pdEFjdGlvbjogZnVuY3Rpb24gKGZpbGVMaXN0KSB7XG4gICAgICAgIGlmIChmaWxlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBsZXQgZmlsZVNpemUgPSAwO1xuICAgICAgICBsZXQgZmlsZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoL3ZpZGVvL2kudGVzdChmaWxlTGlzdFtpXS50eXBlKSkge1xuICAgICAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZUxpc3RbaV0pO1xuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW1pdFNpemUgPSB0aGlzLm9wdGlvbnMudmlkZW9VcGxvYWRTaXplTGltaXQ7XG4gICAgICAgIGlmIChsaW1pdFNpemUgPiAwKSB7XG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xuICAgICAgICAgICAgY29uc3QgdmlkZW9zSW5mbyA9IHRoaXMuY29udGV4dC52aWRlby5faW5mb0xpc3Q7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdmlkZW9zSW5mby5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IHZpZGVvc0luZm9baV0uc2l6ZSAqIDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9ICdbU1VORURJVE9SLnZpZGVvVXBsb2FkLmZhaWxdIFNpemUgb2YgdXBsb2FkYWJsZSB0b3RhbCB2aWRlb3M6ICcgKyAobGltaXRTaXplLzEwMDApICsgJ0tCJztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4oZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuICAgICAgICBjb250ZXh0VmlkZW8uX3VwbG9hZEZpbGVMZW5ndGggPSBmaWxlcy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgICAgIGlucHV0V2lkdGg6IGNvbnRleHRWaWRlby5pbnB1dFgudmFsdWUsXG4gICAgICAgICAgICBpbnB1dEhlaWdodDogY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSxcbiAgICAgICAgICAgIGFsaWduOiBjb250ZXh0VmlkZW8uX2FsaWduLFxuICAgICAgICAgICAgaXNVcGRhdGU6IHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwsXG4gICAgICAgICAgICBlbGVtZW50OiBjb250ZXh0VmlkZW8uX2VsZW1lbnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRCZWZvcmUoZmlsZXMsIGluZm8sIHRoaXMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgdGhpcy5fdy5BcnJheS5pc0FycmF5KGRhdGEucmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8udXBsb2FkLmNhbGwodGhpcywgaW5mbywgZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5sZW5ndGggPiAwKSBmaWxlcyA9IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucy52aWRlby51cGxvYWQuY2FsbCh0aGlzLCBpbmZvLCBmaWxlcyk7XG4gICAgfSxcblxuICAgIGVycm9yOiBmdW5jdGlvbiAobWVzc2FnZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IgIT09ICdmdW5jdGlvbicgfHwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZEVycm9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnBsdWdpbi52aWRlby5lcnJvcl0gcmVzcG9uc2U6ICcgKyBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGxvYWQ6IGZ1bmN0aW9uIChpbmZvLCBmaWxlcykge1xuICAgICAgICBpZiAoIWZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZmlsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uZXJyb3IuY2FsbCh0aGlzLCBmaWxlcywgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWRlb1VwbG9hZFVybCA9IHRoaXMub3B0aW9ucy52aWRlb1VwbG9hZFVybDtcbiAgICAgICAgY29uc3QgZmlsZXNMZW4gPSB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID8gMSA6IGZpbGVzLmxlbmd0aDtcblxuICAgICAgICAvLyBzZXJ2ZXIgdXBsb2FkXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW9VcGxvYWRVcmwgPT09ICdzdHJpbmcnICYmIHZpZGVvVXBsb2FkVXJsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUtJyArIGksIGZpbGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci51cGxvYWQuY2FsbCh0aGlzLCB2aWRlb1VwbG9hZFVybCwgdGhpcy5vcHRpb25zLnZpZGVvVXBsb2FkSGVhZGVyLCBmb3JtRGF0YSwgdGhpcy5wbHVnaW5zLnZpZGVvLmNhbGxCYWNrX3ZpZGVvVXBsb2FkLmJpbmQodGhpcywgaW5mbyksIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRFcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi52aWRlb1VwbG9hZC5mYWlsXSBjYXVzZSA6IFRoZXJlIGlzIG5vIFwidmlkZW9VcGxvYWRVcmxcIiBvcHRpb24uJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2FsbEJhY2tfdmlkZW9VcGxvYWQ6IGZ1bmN0aW9uIChpbmZvLCB4bWxIdHRwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMudmlkZW9VcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy52aWRlb1VwbG9hZEhhbmRsZXIoeG1sSHR0cCwgaW5mbywgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5lcnJvci5jYWxsKHRoaXMsIHJlc3BvbnNlLmVycm9yTWVzc2FnZSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCBmaWxlTGlzdCA9IHJlc3BvbnNlLnJlc3VsdDtcbiAgICAgICAgY29uc3QgdmlkZW9UYWcgPSB0aGlzLnBsdWdpbnMudmlkZW8uY3JlYXRlVmlkZW9UYWcuY2FsbCh0aGlzKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGZpbGUgPSB7IG5hbWU6IGZpbGVMaXN0W2ldLm5hbWUsIHNpemU6IGZpbGVMaXN0W2ldLnNpemUgfTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5jcmVhdGVfdmlkZW8uY2FsbCh0aGlzLCAoaW5mby5pc1VwZGF0ZSA/IGluZm8uZWxlbWVudCA6IHZpZGVvVGFnLmNsb25lTm9kZShmYWxzZSkpLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uaW5wdXRXaWR0aCwgaW5mby5pbnB1dEhlaWdodCwgaW5mby5hbGlnbiwgZmlsZSwgaW5mby5pc1VwZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgIH0sXG5cbiAgICBzZXR1cF91cmw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcbiAgICAgICAgICAgIGxldCB1cmwgPSBjb250ZXh0VmlkZW8uX2xpbmtWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKHVybC5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgLyoqIGlmcmFtZSBzb3VyY2UgKi9cbiAgICAgICAgICAgIGlmICgvXjxpZnJhbWUuKlxcL2lmcmFtZT4kLy50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvSWZyYW1lID0gKG5ldyB0aGlzLl93LkRPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcodXJsLCAndGV4dC9odG1sJykucXVlcnlTZWxlY3RvcignaWZyYW1lJyk7XG4gICAgICAgICAgICAgICAgdXJsID0gb0lmcmFtZS5zcmM7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLyoqIHlvdXR1YmUgKi9cbiAgICAgICAgICAgIGlmICgveW91dHVcXC4/YmUvLnRlc3QodXJsKSkge1xuICAgICAgICAgICAgICAgIGlmICghL15odHRwLy50ZXN0KHVybCkpIHVybCA9ICdodHRwczovLycgKyB1cmw7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3dhdGNoP3Y9JywgJycpO1xuICAgICAgICAgICAgICAgIGlmICghL15cXC9cXC8uK1xcL2VtYmVkXFwvLy50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UodXJsLm1hdGNoKC9cXC9cXC8uK1xcLy8pWzBdLCAnLy93d3cueW91dHViZS5jb20vZW1iZWQvJykucmVwbGFjZSgnJicsICc/JicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0VmlkZW8uX3lvdXR1YmVRdWVyeS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFw/Ly50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBzcGxpdFVybFswXSArICc/JyArIGNvbnRleHRWaWRlby5feW91dHViZVF1ZXJ5ICsgJyYnICsgc3BsaXRVcmxbMV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJz8nICsgY29udGV4dFZpZGVvLl95b3V0dWJlUXVlcnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC92aW1lb1xcLmNvbS8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVybCA9ICdodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJyArIHVybC5zbGljZSh1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uY3JlYXRlX3ZpZGVvLmNhbGwodGhpcywgdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZUlmcmFtZVRhZy5jYWxsKHRoaXMpLCB1cmwsIGNvbnRleHRWaWRlby5pbnB1dFgudmFsdWUsIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUsIGNvbnRleHRWaWRlby5fYWxpZ24sIG51bGwsIHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IudmlkZW8udXBsb2FkLmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVfdmlkZW86IGZ1bmN0aW9uIChvRnJhbWUsIHNyYywgd2lkdGgsIGhlaWdodCwgYWxpZ24sIGZpbGUsIGlzVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9ICd2aWRlbyc7XG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcbiAgICAgICAgXG4gICAgICAgIGxldCBjb3ZlciA9IG51bGw7XG4gICAgICAgIGxldCBjb250YWluZXIgPSBudWxsO1xuICAgICAgICBsZXQgaW5pdCA9IGZhbHNlO1xuXG4gICAgICAgIC8qKiB1cGRhdGUgKi9cbiAgICAgICAgaWYgKGlzVXBkYXRlKSB7XG4gICAgICAgICAgICBvRnJhbWUgPSBjb250ZXh0VmlkZW8uX2VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAob0ZyYW1lLnNyYyAhPT0gc3JjKSB7XG4gICAgICAgICAgICAgICAgaW5pdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNZb3V0dWJlID0gL3lvdXR1XFwuP2JlLy50ZXN0KHNyYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNWaW1lbyA9IC92aW1lb1xcLmNvbS8udGVzdChzcmMpO1xuICAgICAgICAgICAgICAgIGlmICgoaXNZb3V0dWJlIHx8IGlzVmltZW8pICYmICEvXmlmcmFtZSQvaS50ZXN0KG9GcmFtZS5ub2RlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZUlmcmFtZVRhZy5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYWcuc3JjID0gc3JjO1xuICAgICAgICAgICAgICAgICAgICBvRnJhbWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3VGFnLCBvRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQgPSBvRnJhbWUgPSBuZXdUYWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNZb3V0dWJlICYmICFpc1ZpbWVvICYmICEvXnZpZGVvbyQvaS50ZXN0KG9GcmFtZS5ub2RlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZVZpZGVvVGFnLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZy5zcmMgPSBzcmM7XG4gICAgICAgICAgICAgICAgICAgIG9GcmFtZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdUYWcsIG9GcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IG9GcmFtZSA9IG5ld1RhZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvRnJhbWUuc3JjID0gc3JjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRleHRWaWRlby5fY29udGFpbmVyO1xuICAgICAgICAgICAgY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChvRnJhbWUsICdGSUdVUkUnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiogY3JlYXRlICovXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5pdCA9IHRydWU7XG4gICAgICAgICAgICBvRnJhbWUuc3JjID0gc3JjO1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50ID0gb0ZyYW1lO1xuICAgICAgICAgICAgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIG9GcmFtZSk7XG4gICAgICAgICAgICBjb250YWluZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb250YWluZXIuY2FsbCh0aGlzLCBjb3ZlciwgJ3NlLXZpZGVvLWNvbnRhaW5lcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIHJlbmRlcmluZyAqL1xuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyID0gY292ZXI7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyID0gY29udGFpbmVyO1xuXG4gICAgICAgIGNvbnN0IGlucHV0VXBkYXRlID0gKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVYLmNhbGwodGhpcywgY29udGV4dFZpZGVvKSAhPT0gKHdpZHRoIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVYKSkgfHwgKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY29udGV4dFZpZGVvKSAhPT0gKGhlaWdodCB8fCBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8pKTtcbiAgICAgICAgY29uc3QgY2hhbmdlU2l6ZSA9ICFpc1VwZGF0ZSB8fCBpbnB1dFVwZGF0ZTtcblxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZykge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnZpZGVvLl9wcm9wb3J0aW9uQ2hlY2tlZCA9IGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmNoZWNrZWQ7XG4gICAgICAgICAgICBvRnJhbWUuc2V0QXR0cmlidXRlKCdkYXRhLXByb3BvcnRpb24nLCBjb250ZXh0VmlkZW8uX3Byb3BvcnRpb25DaGVja2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNpemVcbiAgICAgICAgbGV0IGlzUGVyY2VudCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hhbmdlU2l6ZSkge1xuICAgICAgICAgICAgaXNQZXJjZW50ID0gdGhpcy5wbHVnaW5zLnZpZGVvLmFwcGx5U2l6ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxpZ25cbiAgICAgICAgaWYgKCEoaXNQZXJjZW50ICYmIGFsaWduID09PSAnY2VudGVyJykpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRBbGlnbi5jYWxsKHRoaXMsIG51bGwsIG9GcmFtZSwgY292ZXIsIGNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmICghaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0aGlzLmluc2VydENvbXBvbmVudChjb250YWluZXIsIGZhbHNlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5hcHBlbmRGb3JtYXRUYWcoY29udGFpbmVyLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGxpbmUsIDAsIGxpbmUsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRWaWRlby5fcmVzaXppbmcgJiYgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCAmJiBjaGFuZ2VTaXplKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuc2V0VHJhbnNmb3JtU2l6ZS5jYWxsKHRoaXMsIG9GcmFtZSwgbnVsbCwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgaWYgKGluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICd2aWRlbycsIG9GcmFtZSwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCwgZmlsZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChvRnJhbWUsICd2aWRlbycpO1xuICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gPSAnJztcbiAgICB9LFxuXG4gICAgX3VwZGF0ZV92aWRlb0NvdmVyOiBmdW5jdGlvbiAob0ZyYW1lKSB7XG4gICAgICAgIGlmICghb0ZyYW1lKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuICAgICAgICBcbiAgICAgICAgaWYgKC9edmlkZW8kL2kudGVzdChvRnJhbWUubm9kZU5hbWUpKSB0aGlzLnBsdWdpbnMudmlkZW8uX3NldFRhZ0F0dHJzLmNhbGwodGhpcywgb0ZyYW1lKTtcbiAgICAgICAgZWxzZSB0aGlzLnBsdWdpbnMudmlkZW8uX3NldElmcmFtZUF0dHJzLmNhbGwodGhpcywgb0ZyYW1lKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGV4aXN0RWxlbWVudCA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KG9GcmFtZSwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpIHx8IFxuICAgICAgICAgICAgdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQob0ZyYW1lLCBmdW5jdGlvbiAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzV3lzaXd5Z0RpdihjdXJyZW50LnBhcmVudE5vZGUpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMudXRpbCkpO1xuXG4gICAgICAgIGNvbnN0IHByZXZGcmFtZSA9IG9GcmFtZTtcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50ID0gb0ZyYW1lID0gb0ZyYW1lLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgY29uc3QgY292ZXIgPSBjb250ZXh0VmlkZW8uX2NvdmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY292ZXIuY2FsbCh0aGlzLCBvRnJhbWUpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjb250ZXh0VmlkZW8uX2NvbnRhaW5lciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvbnRhaW5lci5jYWxsKHRoaXMsIGNvdmVyLCAnc2UtdmlkZW8tY29udGFpbmVyJyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZ2NhcHRpb24gPSBleGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcignZmlnY2FwdGlvbicpO1xuICAgICAgICAgICAgbGV0IGNhcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKCEhZmlnY2FwdGlvbikge1xuICAgICAgICAgICAgICAgIGNhcHRpb24gPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgICAgICAgICAgY2FwdGlvbi5pbm5lckhUTUwgPSBmaWdjYXB0aW9uLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShmaWdjYXB0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2l6ZVxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IChvRnJhbWUuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemUnKSB8fCBvRnJhbWUuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpIHx8ICcnKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLmFwcGx5U2l6ZS5jYWxsKHRoaXMsIChzaXplWzBdIHx8IHByZXZGcmFtZS5zdHlsZS53aWR0aCB8fCBwcmV2RnJhbWUud2lkdGggfHwgJycpLCAoc2l6ZVsxXSB8fCBwcmV2RnJhbWUuc3R5bGUuaGVpZ2h0IHx8IHByZXZGcmFtZS5oZWlnaHQgfHwgJycpKTtcblxuICAgICAgICAgICAgLy8gYWxpZ25cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMudXRpbC5nZXRGb3JtYXRFbGVtZW50KHByZXZGcmFtZSk7XG4gICAgICAgICAgICBpZiAoZm9ybWF0KSBjb250ZXh0VmlkZW8uX2FsaWduID0gZm9ybWF0LnN0eWxlLnRleHRBbGlnbiB8fCBmb3JtYXQuc3R5bGUuZmxvYXQ7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBvRnJhbWUsIGNvdmVyLCBjb250YWluZXIpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmlzRm9ybWF0RWxlbWVudChleGlzdEVsZW1lbnQpICYmIGV4aXN0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHByZXZGcmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gY2xlYW4gZm9ybWF0IHRhZ1xuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVFbXB0eU5vZGUoZXhpc3RFbGVtZW50LCBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgZXhpc3RFbGVtZW50LmlubmVySFRNTCA9IHRoaXMudXRpbC5odG1sUmVtb3ZlV2hpdGVTcGFjZShleGlzdEVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEhY2FwdGlvbikgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNhcHRpb24sIGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbU1VORURJVE9SLnZpZGVvLmVycm9yXSBNYXliZSB0aGUgdmlkZW8gdGFnIGlzIG5lc3RlZC4nLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICd2aWRlbycsIG9GcmFtZSwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCwgbnVsbCwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXG4gICAgICovXG4gICAgb25Nb2RpZnlNb2RlOiBmdW5jdGlvbiAoZWxlbWVudCwgc2l6ZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCAnRklHVVJFJyk7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpO1xuICAgICAgICBjb250ZXh0VmlkZW8uX2FsaWduID0gZWxlbWVudC5zdHlsZS5mbG9hdCB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicpIHx8ICdub25lJztcbiAgICAgICAgZWxlbWVudC5zdHlsZS5mbG9hdCA9ICcnO1xuXG4gICAgICAgIGlmIChzaXplKSB7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnRfdyA9IHNpemUudztcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudF9oID0gc2l6ZS5oO1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50X3QgPSBzaXplLnQ7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnRfbCA9IHNpemUubDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcmlnaW4gPSBjb250ZXh0VmlkZW8uX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemUnKSB8fCBjb250ZXh0VmlkZW8uX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpO1xuICAgICAgICBsZXQgdywgaDtcbiAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgb3JpZ2luID0gb3JpZ2luLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB3ID0gb3JpZ2luWzBdO1xuICAgICAgICAgICAgaCA9IG9yaWdpblsxXTtcbiAgICAgICAgfSBlbHNlIGlmIChzaXplKSB7XG4gICAgICAgICAgICB3ID0gc2l6ZS53O1xuICAgICAgICAgICAgaCA9IHNpemUuaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHRWaWRlby5fb3JpZ2luX3cgPSB3IHx8IGVsZW1lbnQuc3R5bGUud2lkdGggfHwgZWxlbWVudC53aWR0aCB8fCAnJztcbiAgICAgICAgY29udGV4dFZpZGVvLl9vcmlnaW5faCA9IGggfHwgZWxlbWVudC5zdHlsZS5oZWlnaHQgfHwgZWxlbWVudC5oZWlnaHQgfHwgJyc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXG4gICAgICovXG4gICAgb3Blbk1vZGlmeTogZnVuY3Rpb24gKG5vdE9wZW4pIHtcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlKSBjb250ZXh0VmlkZW8uX2xpbmtWYWx1ZSA9IGNvbnRleHRWaWRlby5wcmV2aWV3LnRleHRDb250ZW50ID0gY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZS52YWx1ZSA9IChjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3JjIHx8IChjb250ZXh0VmlkZW8uX2VsZW1lbnQucXVlcnlTZWxlY3Rvcignc291cmNlJykgfHwgJycpLnNyYyB8fCAnJyk7XG4gICAgICAgIGNvbnRleHRWaWRlby5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX3ZpZGVvX3JhZGlvXCJdW3ZhbHVlPVwiJyArIGNvbnRleHRWaWRlby5fYWxpZ24gKyAnXCJdJykuY2hlY2tlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fcmVzaXppbmcpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbywgdGhpcy5wbHVnaW5zLnZpZGVvKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgeSA9IGNvbnRleHRWaWRlby5fdmlkZW9SYXRpbyA9IHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY29udGV4dFZpZGVvKTtcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvU2VsZWN0ZWQgPSB0aGlzLnBsdWdpbnMudmlkZW8uc2V0VmlkZW9SYXRpb1NlbGVjdC5jYWxsKHRoaXMsIHkpO1xuICAgICAgICAgICAgaWYgKCFyYXRpb1NlbGVjdGVkKSBjb250ZXh0VmlkZW8uaW5wdXRZLnZhbHVlID0gY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSA/IHRoaXMudXRpbC5nZXROdW1iZXIoeSwgMikgOiB5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub3RPcGVuKSB0aGlzLnBsdWdpbnMuZGlhbG9nLm9wZW4uY2FsbCh0aGlzLCAndmlkZW8nLCB0cnVlKTtcbiAgICB9LFxuICAgIFxuICAgIHNldFZpZGVvUmF0aW9TZWxlY3Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBsZXQgcmF0aW9TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XG4gICAgICAgIGNvbnN0IHJhdGlvT3B0aW9ucyA9IGNvbnRleHRWaWRlby52aWRlb1JhdGlvT3B0aW9uLm9wdGlvbnM7XG5cbiAgICAgICAgaWYgKC8lJC8udGVzdCh2YWx1ZSkgfHwgY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSkgdmFsdWUgPSAodGhpcy51dGlsLmdldE51bWJlcih2YWx1ZSwgMikgLyAxMDApICsgJyc7XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLnV0aWwuaXNOdW1iZXIodmFsdWUpIHx8ICh2YWx1ZSAqIDEpID49IDEpIHZhbHVlID0gJyc7XG5cbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5wbGFjZWhvbGRlciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmF0aW9PcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocmF0aW9PcHRpb25zW2ldLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJhdGlvU2VsZWN0ZWQgPSByYXRpb09wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkucGxhY2Vob2xkZXIgPSAhdmFsdWUgPyAnJyA6ICh2YWx1ZSAqIDEwMCkgKyAnJSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJhdGlvT3B0aW9uc1tpXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhdGlvU2VsZWN0ZWQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAqL1xuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLmNoZWNrSW5mby5jYWxsKHRoaXMsICd2aWRlbycsIFsnaWZyYW1lJywgJ3ZpZGVvJ10sIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWQsIHRoaXMucGx1Z2lucy52aWRlby5fdXBkYXRlX3ZpZGVvQ292ZXIuYmluZCh0aGlzKSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAqL1xuICAgIHJlc2V0RmlsZUluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnJlc2V0SW5mby5jYWxsKHRoaXMsICd2aWRlbycsIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcbiAgICAgKi9cbiAgICBhcHBseVNpemU6IGZ1bmN0aW9uICh3LCBoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcblxuICAgICAgICBpZiAoIXcpIHcgPSBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlIHx8IHRoaXMub3B0aW9ucy52aWRlb1dpZHRoO1xuICAgICAgICBpZiAoIWgpIGggPSBjb250ZXh0VmlkZW8uaW5wdXRZLnZhbHVlIHx8IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodDtcbiAgICAgICAgXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8uX29ubHlQZXJjZW50YWdlIHx8IC8lJC8udGVzdCh3KSB8fCAhdykge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgKHcgfHwgJzEwMCUnKSwgKGggfHwgKC8lJC8udGVzdChjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8pID8gY29udGV4dFZpZGVvLl92aWRlb1JhdGlvIDogY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoIXcgfHwgdyA9PT0gJ2F1dG8nKSAmJiAoIWggfHwgaCA9PT0gJ2F1dG8nKSkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0U2l6ZS5jYWxsKHRoaXMsIHcsIChoIHx8IGNvbnRleHRWaWRlby5fdmlkZW9SYXRpbyB8fCBjb250ZXh0VmlkZW8uX2RlZmF1bHRSYXRpbyksIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXG4gICAgICovXG4gICAgc2l6ZVJldmVydDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zaXplUmV2ZXJ0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnZpZGVvKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXG4gICAgICovXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHcsIGgsIG5vdFJlc2V0UGVyY2VudGFnZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcbiAgICAgICAgY29uc3Qgb25seVcgPSAvXihyd3xsdykkLy50ZXN0KGRpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IG9ubHlIID0gL14odGh8YmgpJC8udGVzdChkaXJlY3Rpb24pO1xuXG4gICAgICAgIGlmICghb25seUgpIHcgPSB0aGlzLnV0aWwuZ2V0TnVtYmVyKHcsIDApO1xuICAgICAgICBpZiAoIW9ubHlXKSBoID0gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRWaWRlby5zaXplVW5pdCA6ICFoID8gJycgOiBoO1xuXG4gICAgICAgIGlmICghb25seUgpIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS53aWR0aCA9IHcgPyB3ICsgY29udGV4dFZpZGVvLnNpemVVbml0IDogJyc7XG4gICAgICAgIGlmICghb25seVcpIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gaDtcblxuICAgICAgICBpZiAoIW9ubHlIICYmICEvJSQvLnRlc3QodykpIHtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9ubHlXICYmICEvJSQvLnRlc3QoaCkpIHtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub3RSZXNldFBlcmNlbnRhZ2UpIGNvbnRleHRWaWRlby5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtcGVyY2VudGFnZScpO1xuXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqL1xuICAgIHNldEF1dG9TaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRQZXJjZW50U2l6ZS5jYWxsKHRoaXMsIDEwMCwgdGhpcy5jb250ZXh0LnZpZGVvLl9kZWZhdWx0UmF0aW8pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcbiAgICAgKi9cbiAgICBzZXRPcmlnaW5TaXplOiBmdW5jdGlvbiAoZGF0YVNpemUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcblxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8uX2VsZW1lbnQpO1xuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uY2FuY2VsUGVyY2VudEF0dHIuY2FsbCh0aGlzKTtcblxuICAgICAgICBjb25zdCBvcmlnaW5TaXplID0gKChkYXRhU2l6ZSA/IGNvbnRleHRWaWRlby5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpIDogJycpIHx8IGNvbnRleHRWaWRlby5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XG4gICAgICAgIFxuICAgICAgICBpZiAob3JpZ2luU2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgdyA9IG9yaWdpblNpemVbMF07XG4gICAgICAgICAgICBjb25zdCBoID0gb3JpZ2luU2l6ZVsxXTtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fb25seVBlcmNlbnRhZ2UgfHwgKC8lJC8udGVzdCh3KSAmJiAoLyUkLy50ZXN0KGgpIHx8ICEvXFxkLy50ZXN0KGgpKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0UGVyY2VudFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2F2ZSBjdXJyZW50IHNpemVcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXG4gICAgICovXG4gICAgc2V0UGVyY2VudFNpemU6IGZ1bmN0aW9uICh3LCBoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcbiAgICAgICAgaCA9ICEhaCAmJiAhLyUkLy50ZXN0KGgpICYmICF0aGlzLnV0aWwuZ2V0TnVtYmVyKGgsIDApID8gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArICclJyA6IGggOiB0aGlzLnV0aWwuaXNOdW1iZXIoaCkgPyBoICsgY29udGV4dFZpZGVvLnNpemVVbml0IDogKGggfHwgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pO1xuXG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy51dGlsLmlzTnVtYmVyKHcpID8gdyArICclJyA6IHc7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLmhlaWdodCA9IGg7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGg7XG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMudmlkZW8uc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJywgdyArICcsJyArIGgpO1xuXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqL1xuICAgIGNhbmNlbFBlcmNlbnRBdHRyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcbiAgICAgICAgXG4gICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gJyc7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcnO1xuXG4gICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0VmlkZW8uX2NvbnRhaW5lciwgdGhpcy5jb250ZXh0LnZpZGVvLl9mbG9hdENsYXNzUmVnRXhwKTtcbiAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHRWaWRlby5fY29udGFpbmVyLCAnX19zZV9fZmxvYXQtJyArIGNvbnRleHRWaWRlby5fYWxpZ24pO1xuXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8uX2FsaWduID09PSAnY2VudGVyJykgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xuICAgICAqL1xuICAgIHNldEFsaWduOiBmdW5jdGlvbiAoYWxpZ24sIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFhbGlnbikgYWxpZ24gPSBjb250ZXh0VmlkZW8uX2FsaWduO1xuICAgICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSBjb250ZXh0VmlkZW8uX2VsZW1lbnQ7XG4gICAgICAgIGlmICghY292ZXIpIGNvdmVyID0gY29udGV4dFZpZGVvLl9jb3ZlcjtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IGNvbnRleHRWaWRlby5fY29udGFpbmVyO1xuXG4gICAgICAgIGlmIChhbGlnbiAmJiBhbGlnbiAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5tYXJnaW4gPSAnYXV0byc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoLyUkLy50ZXN0KGVsZW1lbnQuc3R5bGUud2lkdGgpICYmIGFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLm1pbldpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSBjb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5oZWlnaHQgPSBjb3Zlci5zdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gIS8lJC8udGVzdChjb3Zlci5zdHlsZS5oZWlnaHQpID8gY292ZXIuc3R5bGUuaGVpZ2h0IDogdGhpcy51dGlsLmdldE51bWJlcigodGhpcy51dGlsLmdldE51bWJlcihjb3Zlci5zdHlsZS5oZWlnaHQsIDIpIC8gMTAwKSAqIHRoaXMudXRpbC5nZXROdW1iZXIoY292ZXIuc3R5bGUud2lkdGgsIDIpLCAyKSArICclJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5taW5XaWR0aCA9ICcnO1xuICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gKGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSA6IChlbGVtZW50LnN0eWxlLndpZHRoIHx8ICcxMDAlJyk7XG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gY292ZXIuc3R5bGUuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzQ2xhc3MoY29udGFpbmVyLCAnX19zZV9fZmxvYXQtJyArIGFsaWduKSkge1xuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgY29udGV4dFZpZGVvLl9mbG9hdENsYXNzUmVnRXhwKTtcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250YWluZXIsICdfX3NlX19mbG9hdC0nICsgYWxpZ24pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicsIGFsaWduKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xuICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUudmFsdWUgPSAnJztcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUpIGNvbnRleHRWaWRlby5fbGlua1ZhbHVlID0gY29udGV4dFZpZGVvLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlLnZhbHVlID0gJyc7XG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgJiYgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSkge1xuICAgICAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8ucHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dFZpZGVvLl9vcmlnaW5fdyA9IHRoaXMub3B0aW9ucy52aWRlb1dpZHRoO1xuICAgICAgICBjb250ZXh0VmlkZW8uX29yaWdpbl9oID0gdGhpcy5vcHRpb25zLnZpZGVvSGVpZ2h0O1xuICAgICAgICBjb250ZXh0VmlkZW8ubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl92aWRlb19yYWRpb1wiXVt2YWx1ZT1cIm5vbmVcIl0nKS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8uX3Jlc2l6aW5nKSB7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlID0gdGhpcy5vcHRpb25zLnZpZGVvV2lkdGggPT09IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVYID8gJycgOiB0aGlzLm9wdGlvbnMudmlkZW9XaWR0aDtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQgPT09IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVZID8gJycgOiB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQ7XG4gICAgICAgICAgICBjb250ZXh0VmlkZW8ucHJvcG9ydGlvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRWaWRlb1JhdGlvU2VsZWN0LmNhbGwodGhpcywgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgZGlhbG9nIGZyb20gJy4uL21vZHVsZXMvZGlhbG9nJztcbmltcG9ydCBjb21wb25lbnQgZnJvbSAnLi4vbW9kdWxlcy9jb21wb25lbnQnO1xuaW1wb3J0IGZpbGVNYW5hZ2VyIGZyb20gJy4uL21vZHVsZXMvZmlsZU1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ2F1ZGlvJyxcbiAgICBkaXNwbGF5OiAnZGlhbG9nJyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtkaWFsb2csIGNvbXBvbmVudCwgZmlsZU1hbmFnZXJdKTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSBjb250ZXh0LmF1ZGlvID0ge1xuICAgICAgICAgICAgX2luZm9MaXN0OiBbXSwgLy8gQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXG4gICAgICAgICAgICBfaW5mb0luZGV4OiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcbiAgICAgICAgICAgIF91cGxvYWRGaWxlTGVuZ3RoOiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcbiAgICAgICAgICAgIGZvY3VzRWxlbWVudDogbnVsbCwgLy8gQE92ZXJyaWRlIGRpYWxvZyAvLyBUaGlzIGVsZW1lbnQgaGFzIGZvY3VzIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG4gICAgICAgICAgICB0YXJnZXRTZWxlY3Q6IG51bGwsXG4gICAgICAgICAgICBfb3JpZ2luX3c6IGNvcmUub3B0aW9ucy5hdWRpb1dpZHRoLFxuICAgICAgICAgICAgX29yaWdpbl9oOiBjb3JlLm9wdGlvbnMuYXVkaW9IZWlnaHQsXG4gICAgICAgICAgICBfbGlua1ZhbHVlOiAnJyxcbiAgICAgICAgICAgIC8vIEByZXF1aXJlIEBPdmVycmlkZSBjb21wb25lbnRcbiAgICAgICAgICAgIF9lbGVtZW50OiBudWxsLFxuICAgICAgICAgICAgX2NvdmVyOiBudWxsLFxuICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvKiogZGlhbG9nICovXG4gICAgICAgIGxldCBhdWRpb19kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcbiAgICAgICAgY29udGV4dEF1ZGlvLm1vZGFsID0gYXVkaW9fZGlhbG9nO1xuICAgICAgICBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUgPSBhdWRpb19kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9hdWRpb19maWxlcycpO1xuICAgICAgICBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlID0gYXVkaW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1pbnB1dC11cmwnKTtcbiAgICAgICAgY29udGV4dEF1ZGlvLmZvY3VzRWxlbWVudCA9IGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSB8fCBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlO1xuICAgICAgICBjb250ZXh0QXVkaW8ucHJldmlldyA9IGF1ZGlvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtbGluay1wcmV2aWV3Jyk7XG5cbiAgICAgICAgLyoqIGNvbnRyb2xsZXIgKi9cbiAgICAgICAgbGV0IGF1ZGlvX2NvbnRyb2xsZXIgPSB0aGlzLnNldENvbnRyb2xsZXIoY29yZSk7XG4gICAgICAgIGNvbnRleHRBdWRpby5jb250cm9sbGVyID0gYXVkaW9fY29udHJvbGxlcjtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBhdWRpb19kaWFsb2cucXVlcnlTZWxlY3RvcignZm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuc3VibWl0LmJpbmQoY29yZSkpO1xuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlKSBhdWRpb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVtb3ZlU2VsZWN0ZWRGaWxlcy5iaW5kKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSwgY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZSwgY29udGV4dEF1ZGlvLnByZXZpZXcpKTtcbiAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSAmJiBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlKSBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fZmlsZUlucHV0Q2hhbmdlLmJpbmQoY29udGV4dEF1ZGlvKSk7XG4gICAgICAgIGF1ZGlvX2NvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfY29udHJvbGxlci5iaW5kKGNvcmUpKTtcbiAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUpIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLl9vbkxpbmtQcmV2aWV3LmJpbmQoY29udGV4dEF1ZGlvLnByZXZpZXcsIGNvbnRleHRBdWRpbywgY29yZS5vcHRpb25zLmxpbmtQcm90b2NvbCkpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZChhdWRpb19kaWFsb2cpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgY29udHJvbGxlciAqL1xuICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQoYXVkaW9fY29udHJvbGxlcik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICBhdWRpb19kaWFsb2cgPSBudWxsLCBhdWRpb19jb250cm9sbGVyID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqIEhUTUwgLSBkaWFsb2cgKi9cbiAgICBzZXREaWFsb2c6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGNvcmUub3B0aW9ucztcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQnO1xuICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgbGV0IGh0bWwgPSAnJyArXG4gICAgICAgICAgICAnPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctaGVhZGVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1jbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LmNsb3NlICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jYW5jZWwgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLW1vZGFsLXRpdGxlXCI+JyArIGxhbmcuZGlhbG9nQm94LmF1ZGlvQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctYm9keVwiPic7XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmF1ZGlvRmlsZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmF1ZGlvQm94LmZpbGUgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIF9zZV9hdWRpb19maWxlc1wiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiJyArIG9wdGlvbi5hdWRpb0FjY2VwdCArICdcIicgKyAob3B0aW9uLmF1ZGlvTXVsdGlwbGVGaWxlID8gJyBtdWx0aXBsZT1cIm11bHRpcGxlXCInIDogJycpICsgJy8+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJmaWxlc1JlbW92ZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBzZS1maWxlLXJlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnXCI+JyArIGNvcmUuaWNvbnMuY2FuY2VsICsgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5hdWRpb1VybElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmF1ZGlvQm94LnVybCArICc8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIHNlLWlucHV0LXVybFwiIHR5cGU9XCJ0ZXh0XCIgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHByZSBjbGFzcz1cInNlLWxpbmstcHJldmlld1wiPjwvcHJlPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9vdGVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Zvcm0+JztcblxuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICByZXR1cm4gZGlhbG9nO1xuICAgIH0sXG5cbiAgICAvKiogSFRNTCAtIGNvbnRyb2xsZXIgKi9cbiAgICBzZXRDb250cm9sbGVyOiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XG4gICAgICAgIGNvbnN0IGxpbmtfYnRuID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXG4gICAgICAgIGxpbmtfYnRuLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItbGluayc7XG4gICAgICAgIGxpbmtfYnRuLmlubmVySFRNTCA9ICcnICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYXJyb3cgc2UtYXJyb3ctdXBcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwibGluay1jb250ZW50XCI+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInVwZGF0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLXRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmVkaXQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5lZGl0ICsgJzwvc3Bhbj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImRlbGV0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLXRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmRlbGV0ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG5cbiAgICAgICAgcmV0dXJuIGxpbmtfYnRuO1xuICAgIH0sXG5cbiAgICAvLyBEaXNhYmxlIHVybCBpbnB1dCB3aGVuIHVwbG9hZGluZyBmaWxlc1xuICAgIF9maWxlSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1ZGlvSW5wdXRGaWxlLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmF1ZGlvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXcuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXVkaW9VcmxGaWxlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdsaW5lLXRocm91Z2gnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIERpc2FibGUgdXJsIGlucHV0IHdoZW4gdXBsb2FkaW5nIGZpbGVzXG4gICAgX3JlbW92ZVNlbGVjdGVkRmlsZXM6IGZ1bmN0aW9uICh1cmxJbnB1dCwgcHJldmlldykge1xuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgICAgIGlmICh1cmxJbnB1dCkge1xuICAgICAgICAgICAgdXJsSW5wdXQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgcHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIGNyZWF0ZSBuZXcgYXVkaW8gdGFnXG4gICAgX2NyZWF0ZUF1ZGlvVGFnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG9BdWRpbyA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdBVURJTycpO1xuICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uX3NldFRhZ0F0dHJzLmNhbGwodGhpcywgb0F1ZGlvKTtcblxuICAgICAgICBjb25zdCB3ID0gdGhpcy5jb250ZXh0LmF1ZGlvLl9vcmlnaW5fdztcbiAgICAgICAgY29uc3QgaCA9IHRoaXMuY29udGV4dC5hdWRpby5fb3JpZ2luX2g7XG4gICAgICAgIG9BdWRpby5zZXRBdHRyaWJ1dGUoJ29yaWdpbi1zaXplJywgdyArICcsJyArIGgpO1xuICAgICAgICBvQXVkaW8uc3R5bGUuY3NzVGV4dCA9ICh3ID8gKCd3aWR0aDonICsgdyArICc7ICcpIDogJycpICsgKGggPyAoJ2hlaWdodDonICsgaCArICc7JykgOiAnJyk7XG5cbiAgICAgICAgcmV0dXJuIG9BdWRpbztcbiAgICB9LFxuXG4gICAgX3NldFRhZ0F0dHJzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY29udHJvbHMnLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMub3B0aW9ucy5hdWRpb1RhZ0F0dHJzO1xuICAgICAgICBpZiAoIWF0dHJzKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGF0dHJzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5oYXNPd24oYXR0cnMsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25MaW5rUHJldmlldzogZnVuY3Rpb24gKGNvbnRleHQsIHByb3RvY29sLCBlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgICAgICBjb250ZXh0Ll9saW5rVmFsdWUgPSB0aGlzLnRleHRDb250ZW50ID0gIXZhbHVlID8gJycgOiAocHJvdG9jb2wgJiYgdmFsdWUuaW5kZXhPZignOi8vJykgPT09IC0xICYmIHZhbHVlLmluZGV4T2YoJyMnKSAhPT0gMCkgPyBwcm90b2NvbCArIHZhbHVlIDogdmFsdWUuaW5kZXhPZignOi8vJykgPT09IC0xID8gJy8nICsgdmFsdWUgOiB2YWx1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAqL1xuICAgIGZpbGVUYWdzOiBbJ2F1ZGlvJ10sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgY29yZSwgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBmcm9tIGNvcmUuc2VsZWN0Q29tcG9uZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxuICAgICAqL1xuICAgIHNlbGVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nIFxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IHRoaXMuY29udGV4dC5hdWRpby5fZWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzQ29tcG9uZW50KSB8fCBlbGVtZW50O1xuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpICogMTtcbiAgICAgICAgY29uc3QgZm9jdXNFbCA9IChjb250YWluZXIucHJldmlvdXNFbGVtZW50U2libGluZyB8fCBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nKTtcblxuICAgICAgICBjb25zdCBlbXB0eURpdiA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250YWluZXIpO1xuICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uaW5pdC5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XG5cbiAgICAgICAgaWYgKGVtcHR5RGl2ICE9PSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnKSB0aGlzLnV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZW1wdHlEaXYsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOyB9LCBudWxsKTtcblxuICAgICAgICAvLyBmb2N1c1xuICAgICAgICB0aGlzLmZvY3VzRWRnZShmb2N1c0VsKTtcblxuICAgICAgICAvLyBmaWxlTWFuYWdlciBldmVudFxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuZGVsZXRlSW5mby5jYWxsKHRoaXMsICdhdWRpbycsIGRhdGFJbmRleCwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCk7XG5cbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxuICAgICAqL1xuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLmNoZWNrSW5mby5jYWxsKHRoaXMsICdhdWRpbycsIFsnYXVkaW8nXSwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCwgdGhpcy5wbHVnaW5zLmF1ZGlvLnVwZGF0ZUNvdmVyLmJpbmQodGhpcyksIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXG4gICAgICovXG4gICAgcmVzZXRGaWxlSW5mbzogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIucmVzZXRJbmZvLmNhbGwodGhpcywgJ2F1ZGlvJywgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uICh1cGRhdGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xuXG4gICAgICAgIGlmICghdXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uaW5pdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMuYXVkaW9NdWx0aXBsZUZpbGUpIGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dEF1ZGlvLl9lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRleHRBdWRpby5fbGlua1ZhbHVlID0gY29udGV4dEF1ZGlvLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlLnZhbHVlID0gY29udGV4dEF1ZGlvLl9lbGVtZW50LnNyYztcbiAgICAgICAgICAgIGlmIChjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUgJiYgdGhpcy5vcHRpb25zLmF1ZGlvTXVsdGlwbGVGaWxlKSBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUucmVtb3ZlQXR0cmlidXRlKCdtdWx0aXBsZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMuYXVkaW9NdWx0aXBsZUZpbGUpIGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ211bHRpcGxlJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcbiAgICAgKi9cbiAgICBvcGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdhdWRpbycsICdhdWRpbycgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcbiAgICB9LFxuXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZS5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5zdWJtaXRBY3Rpb24uY2FsbCh0aGlzLCBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUuZmlsZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlICYmIGNvbnRleHRBdWRpby5fbGlua1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnNldHVwVXJsLmNhbGwodGhpcywgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmF1ZGlvLnN1Ym1pdC5mYWlsXSBjYXVzZSA6IFwiJyArIGVycm9yLm1lc3NhZ2UgKyAnXCInKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgc3VibWl0QWN0aW9uOiBmdW5jdGlvbiAoZmlsZUxpc3QpIHtcbiAgICAgICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGxldCBmaWxlU2l6ZSA9IDA7XG4gICAgICAgIGxldCBmaWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgvYXVkaW8vaS50ZXN0KGZpbGVMaXN0W2ldLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlTGlzdFtpXSk7XG4gICAgICAgICAgICAgICAgZmlsZVNpemUgKz0gZmlsZUxpc3RbaV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbWl0U2l6ZSA9IHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdDtcbiAgICAgICAgaWYgKGxpbWl0U2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGxldCBpbmZvU2l6ZSA9IDA7XG4gICAgICAgICAgICBjb25zdCBhdWRpb3NJbmZvID0gdGhpcy5jb250ZXh0LmF1ZGlvLl9pbmZvTGlzdDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhdWRpb3NJbmZvLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW5mb1NpemUgKz0gYXVkaW9zSW5mb1tpXS5zaXplICogMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKChmaWxlU2l6ZSArIGluZm9TaXplKSA+IGxpbWl0U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gJ1tTVU5FRElUT1IuYXVkaW9VcGxvYWQuZmFpbF0gU2l6ZSBvZiB1cGxvYWRhYmxlIHRvdGFsIGF1ZGlvczogJyArIChsaW1pdFNpemUvMTAwMCkgKyAnS0InO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZEVycm9yICE9PSAnZnVuY3Rpb24nIHx8IHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRFcnJvcihlcnIsIHsgJ2xpbWl0U2l6ZSc6IGxpbWl0U2l6ZSwgJ2N1cnJlbnRTaXplJzogaW5mb1NpemUsICd1cGxvYWRTaXplJzogZmlsZVNpemUgfSwgdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XG4gICAgICAgIGNvbnRleHRBdWRpby5fdXBsb2FkRmlsZUxlbmd0aCA9IGZpbGVzLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICAgICAgaXNVcGRhdGU6IHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwsXG4gICAgICAgICAgICBlbGVtZW50OiBjb250ZXh0QXVkaW8uX2VsZW1lbnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRCZWZvcmUoZmlsZXMsIGluZm8sIHRoaXMsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgdGhpcy5fdy5BcnJheS5pc0FycmF5KGRhdGEucmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8ucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8udXBsb2FkLmNhbGwodGhpcywgaW5mbywgZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5sZW5ndGggPiAwKSBmaWxlcyA9IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby51cGxvYWQuY2FsbCh0aGlzLCBpbmZvLCBmaWxlcyk7XG4gICAgfSxcblxuICAgIGVycm9yOiBmdW5jdGlvbiAobWVzc2FnZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkRXJyb3IgIT09ICdmdW5jdGlvbicgfHwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZEVycm9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB0aGlzKSkge1xuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnBsdWdpbi5hdWRpby5leGNlcHRpb25dIHJlc3BvbnNlOiAnICsgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgZmlsZXMpIHtcbiAgICAgICAgaWYgKCFmaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZpbGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmVycm9yLmNhbGwodGhpcywgZmlsZXMsIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXVkaW9VcGxvYWRVcmwgPSB0aGlzLm9wdGlvbnMuYXVkaW9VcGxvYWRVcmw7XG4gICAgICAgIGNvbnN0IGZpbGVzTGVuID0gdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA/IDEgOiBmaWxlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gY3JlYXRlIGZvcm1EYXRhXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXNMZW47IGkrKykge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlLScgKyBpLCBmaWxlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXJ2ZXIgdXBsb2FkXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci51cGxvYWQuY2FsbCh0aGlzLCBhdWRpb1VwbG9hZFVybCwgdGhpcy5vcHRpb25zLmF1ZGlvVXBsb2FkSGVhZGVyLCBmb3JtRGF0YSwgdGhpcy5wbHVnaW5zLmF1ZGlvLmNhbGxCYWNrX3VwbG9hZC5iaW5kKHRoaXMsIGluZm8pLCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkRXJyb3IpO1xuICAgIH0sXG5cbiAgICBjYWxsQmFja191cGxvYWQ6IGZ1bmN0aW9uIChpbmZvLCB4bWxIdHRwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMuYXVkaW9VcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5hdWRpb1VwbG9hZEhhbmRsZXIoeG1sSHR0cCwgaW5mbywgdGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5lcnJvci5jYWxsKHRoaXMsIHJlc3BvbnNlLmVycm9yTWVzc2FnZSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8ucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCBmaWxlTGlzdCA9IHJlc3BvbnNlLnJlc3VsdDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlLCBvQXVkaW87IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGluZm8uaXNVcGRhdGUpIG9BdWRpbyA9IGluZm8uZWxlbWVudDtcbiAgICAgICAgICAgIGVsc2Ugb0F1ZGlvID0gdGhpcy5wbHVnaW5zLmF1ZGlvLl9jcmVhdGVBdWRpb1RhZy5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICBmaWxlID0geyBuYW1lOiBmaWxlTGlzdFtpXS5uYW1lLCBzaXplOiBmaWxlTGlzdFtpXS5zaXplIH07XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uY3JlYXRlX2F1ZGlvLmNhbGwodGhpcywgb0F1ZGlvLCBmaWxlTGlzdFtpXS51cmwsIGZpbGUsIGluZm8uaXNVcGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICB9LFxuXG4gICAgc2V0dXBVcmw6IGZ1bmN0aW9uIChzcmMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzcmMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uY3JlYXRlX2F1ZGlvLmNhbGwodGhpcywgdGhpcy5wbHVnaW5zLmF1ZGlvLl9jcmVhdGVBdWRpb1RhZy5jYWxsKHRoaXMpLCBzcmMsIG51bGwsIHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuYXVkaW8uYXVkaW8uZmFpbF0gY2F1c2UgOiBcIicgKyBlcnJvci5tZXNzYWdlICsgJ1wiJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZV9hdWRpbzogZnVuY3Rpb24gKGVsZW1lbnQsIHNyYywgZmlsZSwgaXNVcGRhdGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xuICAgICAgICBcbiAgICAgICAgLy8gY3JlYXRlIG5ldyB0YWdcbiAgICAgICAgaWYgKCFpc1VwZGF0ZSkge1xuICAgICAgICAgICAgZWxlbWVudC5zcmMgPSBzcmM7XG4gICAgICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvdmVyLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb250YWluZXIuY2FsbCh0aGlzLCBjb3ZlciwgJycpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluc2VydENvbXBvbmVudChjb250YWluZXIsIGZhbHNlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubWVkaWFBdXRvU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuYXBwZW5kRm9ybWF0VGFnKGNvbnRhaW5lciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShsaW5lLCAwLCBsaW5lLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyB1cGRhdGVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLl9lbGVtZW50KSBlbGVtZW50ID0gY29udGV4dEF1ZGlvLl9lbGVtZW50O1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zcmMgIT09IHNyYykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gc3JjO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGVsZW1lbnQsICdhdWRpbycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChlbGVtZW50LCAnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICdhdWRpbycsIGVsZW1lbnQsIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWQsIGZpbGUsIGZhbHNlKTtcbiAgICAgICAgaWYgKGlzVXBkYXRlKSB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZUNvdmVyOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XG4gICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5fc2V0VGFnQXR0cnMuY2FsbCh0aGlzLCBlbGVtZW50KTtcbiAgICAgICAgXG4gICAgICAgIC8vIGZpbmQgY29tcG9uZW50IGVsZW1lbnRcbiAgICAgICAgY29uc3QgZXhpc3RFbGVtZW50ID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpIHx8IFxuICAgICAgICAgICAgdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc1d5c2l3eWdEaXYoY3VycmVudC5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzLnV0aWwpKTtcblxuICAgICAgICAvLyBjbG9uZSBlbGVtZW50XG4gICAgICAgIGNvbnN0IHByZXZFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgY29udGV4dEF1ZGlvLl9lbGVtZW50ID0gZWxlbWVudCA9IGVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb250YWluZXIuY2FsbCh0aGlzLCBjb3ZlciwgJ3NlLWF1ZGlvLWNvbnRhaW5lcicpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmlzRm9ybWF0RWxlbWVudChleGlzdEVsZW1lbnQpICYmIGV4aXN0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHByZXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAvLyBjbGVhbiBmb3JtYXQgdGFnXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUVtcHR5Tm9kZShleGlzdEVsZW1lbnQsIG51bGwpO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSBleGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy51dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGV4aXN0RWxlbWVudC5pbm5lckhUTUwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbU1VORURJVE9SLmF1ZGlvLmVycm9yXSBNYXliZSB0aGUgYXVkaW8gdGFnIGlzIG5lc3RlZC4nLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICdhdWRpbycsIGVsZW1lbnQsIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWQsIG51bGwsIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlTWFuYWdlciwgcmVzaXppbmdcbiAgICAgKi9cbiAgICBvbk1vZGlmeU1vZGU6IGZ1bmN0aW9uIChzZWxlY3Rpb25UYWcpIHtcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRDb250cm9sbGVyUG9zaXRpb24oY29udGV4dEF1ZGlvLmNvbnRyb2xsZXIsIHNlbGVjdGlvblRhZywgJ2JvdHRvbScsIHtsZWZ0OiAwLCB0b3A6IDB9KTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09uKGNvbnRleHRBdWRpby5jb250cm9sbGVyLCBzZWxlY3Rpb25UYWcsIHRoaXMucGx1Z2lucy5hdWRpby5vbkNvbnRyb2xsZXJPZmYuYmluZCh0aGlzLCBzZWxlY3Rpb25UYWcpLCAnYXVkaW8nKTtcblxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2VsZWN0aW9uVGFnLCAnYWN0aXZlJyk7XG4gICAgICAgIGNvbnRleHRBdWRpby5fZWxlbWVudCA9IHNlbGVjdGlvblRhZztcbiAgICAgICAgY29udGV4dEF1ZGlvLl9jb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGlvblRhZywgJ0ZJR1VSRScpO1xuICAgICAgICBjb250ZXh0QXVkaW8uX2NvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGlvblRhZywgdGhpcy51dGlsLmlzQ29tcG9uZW50KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlTWFuYWdlciwgcmVzaXppbmdcbiAgICAgKi9cbiAgICBvcGVuTW9kaWZ5OiBmdW5jdGlvbiAobm90T3Blbikge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LmF1ZGlvLmF1ZGlvVXJsRmlsZSkge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xuICAgICAgICAgICAgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSBjb250ZXh0QXVkaW8uX2VsZW1lbnQuc3JjO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbm90T3BlbikgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2F1ZGlvJywgdHJ1ZSk7XG4gICAgfSxcblxuICAgIG9uQ2xpY2tfY29udHJvbGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICgvdXBkYXRlLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8ub3Blbk1vZGlmeS5jYWxsKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLyoqIGRlbGV0ZSAqL1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmRlc3Ryb3kuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYXVkaW8uX2VsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xuICAgIH0sXG5cbiAgICBvbkNvbnRyb2xsZXJPZmY6IGZ1bmN0aW9uIChzZWxlY3Rpb25UYWcpIHtcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGlvblRhZywgJ2FjdGl2ZScpO1xuICAgICAgICB0aGlzLmNvbnRleHQuYXVkaW8uY29udHJvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpIHJldHVybjtcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xuXG4gICAgICAgIGlmIChjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUpIGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZS52YWx1ZSA9ICcnO1xuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZSkgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSAnJztcbiAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSAmJiBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlKSB7XG4gICAgICAgICAgICBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGNvbnRleHRBdWRpby5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0QXVkaW8uX2VsZW1lbnQgPSBudWxsO1xuICAgIH1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgZGlhbG9nIGZyb20gJy4uL21vZHVsZXMvZGlhbG9nJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdtYXRoJyxcbiAgICBkaXNwbGF5OiAnZGlhbG9nJyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtkaWFsb2ddKTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xuICAgICAgICBjb250ZXh0Lm1hdGggPSB7XG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxuICAgICAgICAgICAgcHJldmlld0VsZW1lbnQ6IG51bGwsXG4gICAgICAgICAgICBmb250U2l6ZUVsZW1lbnQ6IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Rm9udFNpemU6ICcnLFxuICAgICAgICAgICAgX21hdGhFeHA6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICAvKiogbWF0aCBkaWFsb2cgKi9cbiAgICAgICAgbGV0IG1hdGhfZGlhbG9nID0gdGhpcy5zZXREaWFsb2coY29yZSk7XG4gICAgICAgIGNvbnRleHQubWF0aC5tb2RhbCA9IG1hdGhfZGlhbG9nO1xuICAgICAgICBjb250ZXh0Lm1hdGguZm9jdXNFbGVtZW50ID0gbWF0aF9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLW1hdGgtZXhwJyk7XG4gICAgICAgIGNvbnRleHQubWF0aC5wcmV2aWV3RWxlbWVudCA9IG1hdGhfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1tYXRoLXByZXZpZXcnKTtcbiAgICAgICAgY29udGV4dC5tYXRoLmZvbnRTaXplRWxlbWVudCA9IG1hdGhfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1tYXRoLXNpemUnKTtcbiAgICAgICAgY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX3JlbmRlck1hdGhFeHAuYmluZChjb3JlLCBjb250ZXh0Lm1hdGgpLCBmYWxzZSk7XG4gICAgICAgIGNvbnRleHQubWF0aC5mb2N1c0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fcmVuZGVyTWF0aEV4cC5iaW5kKGNvcmUsIGNvbnRleHQubWF0aCksIGZhbHNlKTtcbiAgICAgICAgY29udGV4dC5tYXRoLmZvbnRTaXplRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkgeyB0aGlzLmZvbnRTaXplID0gZS50YXJnZXQudmFsdWU7IH0uYmluZChjb250ZXh0Lm1hdGgucHJldmlld0VsZW1lbnQuc3R5bGUpLCBmYWxzZSk7XG5cbiAgICAgICAgLyoqIG1hdGggY29udHJvbGxlciAqL1xuICAgICAgICBsZXQgbWF0aF9jb250cm9sbGVyID0gdGhpcy5zZXRDb250cm9sbGVyX01hdGhCdXR0b24oY29yZSk7XG4gICAgICAgIGNvbnRleHQubWF0aC5tYXRoQ29udHJvbGxlciA9IG1hdGhfY29udHJvbGxlcjtcbiAgICAgICAgY29udGV4dC5tYXRoLl9tYXRoRXhwID0gbnVsbDtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBtYXRoX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSwgZmFsc2UpO1xuICAgICAgICBtYXRoX2NvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfbWF0aENvbnRyb2xsZXIuYmluZChjb3JlKSk7XG4gICAgICAgIGNvbnRleHQubWF0aC5wcmV2aWV3RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IGNvbnRleHQubWF0aC5kZWZhdWx0Rm9udFNpemU7XG5cbiAgICAgICAgLyoqIGFwcGVuZCBodG1sICovXG4gICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFwcGVuZENoaWxkKG1hdGhfZGlhbG9nKTtcbiAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKG1hdGhfY29udHJvbGxlcik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICBtYXRoX2RpYWxvZyA9IG51bGwsIG1hdGhfY29udHJvbGxlciA9IG51bGw7XG4gICAgfSxcblxuICAgIC8qKiBkaWFsb2cgKi9cbiAgICBzZXREaWFsb2c6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBjb3JlLm9wdGlvbnMubWF0aEZvbnRTaXplO1xuICAgICAgICBsZXQgZGVmYXVsdEZvbnRTaXplID0gZm9udFNpemVbMF0udmFsdWU7XG5cbiAgICAgICAgZGlhbG9nLmNsYXNzTmFtZSA9ICdzZS1kaWFsb2ctY29udGVudCc7XG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBsZXQgaHRtbCA9ICcnICtcbiAgICAgICAgJzxmb3JtPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctaGVhZGVyXCI+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuY2FuY2VsICtcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtbW9kYWwtdGl0bGVcIj4nICsgbGFuZy5kaWFsb2dCb3gubWF0aEJveC50aXRsZSArICc8L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5tYXRoQm94LmlucHV0TGFiZWwgKyAnICg8YSBocmVmPVwiaHR0cHM6Ly9rYXRleC5vcmcvZG9jcy9zdXBwb3J0ZWQuaHRtbFwiIHRhcmdldD1cIl9ibGFua1wiPkthVGVYPC9hPik8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAnPHRleHRhcmVhIGNsYXNzPVwic2UtaW5wdXQtZm9ybSBzZS1tYXRoLWV4cFwiIHR5cGU9XCJ0ZXh0XCI+PC90ZXh0YXJlYT4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5tYXRoQm94LmZvbnRTaXplTGFiZWwgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzZWxlY3QgY2xhc3M9XCJzZS1pbnB1dC1zZWxlY3Qgc2UtbWF0aC1zaXplXCI+JztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvbnRTaXplLmxlbmd0aCwgZjsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gZm9udFNpemVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5kZWZhdWx0KSBkZWZhdWx0Rm9udFNpemUgPSBmLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBmLnZhbHVlICsgJ1wiJyArIChmLmRlZmF1bHQgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+JyArIGYudGV4dCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+JyArXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gubWF0aEJveC5wcmV2aWV3TGFiZWwgKyAnPC9sYWJlbD4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxwIGNsYXNzPVwic2UtbWF0aC1wcmV2aWV3XCI+PC9wPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvb3RlclwiPicgK1xuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAnPC9mb3JtPic7XG5cbiAgICAgICAgY29yZS5jb250ZXh0Lm1hdGguZGVmYXVsdEZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplO1xuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcbiAgICB9LFxuXG4gICAgLyoqIG1vZGlmeSBjb250cm9sbGVyIGJ1dHRvbiAqL1xuICAgIHNldENvbnRyb2xsZXJfTWF0aEJ1dHRvbjogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgbWF0aF9idG4gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG5cbiAgICAgICAgbWF0aF9idG4uY2xhc3NOYW1lID0gJ3NlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci1saW5rJztcbiAgICAgICAgbWF0aF9idG4uaW5uZXJIVE1MID0gJycgK1xuICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWFycm93IHNlLWFycm93LXVwXCI+PC9kaXY+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwibGluay1jb250ZW50XCI+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJ1cGRhdGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmVkaXQgK1xuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmVkaXQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImRlbGV0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuZGVsZXRlICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgJyc7XG5cbiAgICAgICAgcmV0dXJuIG1hdGhfYnRuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xuICAgICAqL1xuICAgIG9wZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ21hdGgnLCAnbWF0aCcgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmUgLSBtYW5hZ2VkVGFnc0luZm9cbiAgICAgKi9cbiAgICBtYW5hZ2VkVGFnczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2F0ZXgnLFxuICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJykgfHwgIXRoaXMub3B0aW9ucy5rYXRleCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuX2QuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodGhpcy5wbHVnaW5zLm1hdGguX3JlbmRlcmVyLmNhbGwodGhpcywgdGhpcy51dGlsLkhUTUxEZWNvZGVyKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWV4cCcpKSkpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJy5rYXRleCcpLmlubmVySFRNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgX3JlbmRlcmVyOiBmdW5jdGlvbiAoZXhwKSB7XG4gICAgICAgIGNvbnN0IGthdGV4ID0gdGhpcy5vcHRpb25zLmthdGV4O1xuICAgICAgICByZXR1cm4ga2F0ZXguc3JjLnJlbmRlclRvU3RyaW5nKGV4cCwga2F0ZXgub3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9yZW5kZXJNYXRoRXhwOiBmdW5jdGlvbiAoY29udGV4dE1hdGgsIGUpIHtcbiAgICAgICAgY29udGV4dE1hdGgucHJldmlld0VsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wbHVnaW5zLm1hdGguX3JlbmRlcmVyLmNhbGwodGhpcywgZS50YXJnZXQudmFsdWUpO1xuICAgIH0sXG5cbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3Qgc3VibWl0QWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudC52YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRNYXRoID0gdGhpcy5jb250ZXh0Lm1hdGg7XG4gICAgICAgICAgICBjb25zdCBtYXRoRXhwID0gY29udGV4dE1hdGguZm9jdXNFbGVtZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qga2F0ZXhFbCA9IGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rYXRleCcpO1xuXG4gICAgICAgICAgICBpZiAoIWthdGV4RWwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGthdGV4RWwuY2xhc3NOYW1lID0gJ19fc2VfX2thdGV4ICcgKyBrYXRleEVsLmNsYXNzTmFtZTtcbiAgICAgICAgICAgIGthdGV4RWwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XG4gICAgICAgICAgICBrYXRleEVsLnNldEF0dHJpYnV0ZSgnZGF0YS1leHAnLCB0aGlzLnV0aWwuSFRNTEVuY29kZXIobWF0aEV4cCkpO1xuICAgICAgICAgICAga2F0ZXhFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZm9udC1zaXplJywgY29udGV4dE1hdGguZm9udFNpemVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIGthdGV4RWwuc3R5bGUuZm9udFNpemUgPSBjb250ZXh0TWF0aC5mb250U2l6ZUVsZW1lbnQudmFsdWU7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRm9ybWF0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXQgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChzZWxlY3RlZEZvcm1hdHNbMF0ubm9kZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBvRm9ybWF0LmFwcGVuZENoaWxkKGthdGV4RWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5zZXJ0Tm9kZShvRm9ybWF0LCBudWxsLCB0cnVlKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnNlcnROb2RlKGthdGV4RWwsIG51bGwsIHRydWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZW1wdHkgPSB0aGlzLnV0aWwuY3JlYXRlVGV4dE5vZGUodGhpcy51dGlsLnplcm9XaWR0aFNwYWNlKTtcbiAgICAgICAgICAgICAgICBrYXRleEVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVtcHR5LCBrYXRleEVsLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGthdGV4RWwsIDAsIGthdGV4RWwsIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbnRleHRNYXRoLl9tYXRoRXhwLCAnLmthdGV4Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoa2F0ZXhFbCwgY29udGFpbmVyRWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uoa2F0ZXhFbCwgMCwga2F0ZXhFbCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHRNYXRoLmZvY3VzRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgY29udGV4dE1hdGguZm9udFNpemVFbGVtZW50LnZhbHVlID0gJzFlbSc7XG4gICAgICAgICAgICBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxZW0nO1xuICAgICAgICAgICAgY29udGV4dE1hdGgucHJldmlld0VsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LmJpbmQodGhpcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzdWJtaXRBY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXG4gICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLmNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0Lm1hdGgubWF0aENvbnRyb2xsZXIpID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZXhwJykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXJBcnJheS5pbmRleE9mKHRoaXMuY29udGV4dC5tYXRoLm1hdGhDb250cm9sbGVyKSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGVsZW1lbnQsIDAsIGVsZW1lbnQsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5tYXRoLmNhbGxfY29udHJvbGxlci5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIG9uOiBmdW5jdGlvbiAodXBkYXRlKSB7XG4gICAgICAgIGlmICghdXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMubWF0aC5pbml0LmNhbGwodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0TWF0aCA9IHRoaXMuY29udGV4dC5tYXRoO1xuICAgICAgICAgICAgaWYgKGNvbnRleHRNYXRoLl9tYXRoRXhwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwID0gdGhpcy51dGlsLkhUTUxEZWNvZGVyKGNvbnRleHRNYXRoLl9tYXRoRXhwLmdldEF0dHJpYnV0ZSgnZGF0YS1leHAnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBjb250ZXh0TWF0aC5fbWF0aEV4cC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZm9udC1zaXplJykgfHwgJzFlbSc7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGV4dE1hdGguZm9jdXNFbGVtZW50LnZhbHVlID0gZXhwO1xuICAgICAgICAgICAgICAgIGNvbnRleHRNYXRoLmZvbnRTaXplRWxlbWVudC52YWx1ZSA9IGZvbnRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGx1Z2lucy5tYXRoLl9yZW5kZXJlci5jYWxsKHRoaXMsIGV4cCk7XG4gICAgICAgICAgICAgICAgY29udGV4dE1hdGgucHJldmlld0VsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjYWxsX2NvbnRyb2xsZXI6IGZ1bmN0aW9uIChtYXRoVGFnKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5tYXRoLl9tYXRoRXhwID0gbWF0aFRhZztcbiAgICAgICAgY29uc3QgbWF0aEJ0biA9IHRoaXMuY29udGV4dC5tYXRoLm1hdGhDb250cm9sbGVyO1xuXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbGxlclBvc2l0aW9uKG1hdGhCdG4sIG1hdGhUYWcsICdib3R0b20nLCB7bGVmdDogMCwgdG9wOiAwfSk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPbihtYXRoQnRuLCBtYXRoVGFnLCAnbWF0aCcpO1xuICAgIH0sXG5cbiAgICBvbkNsaWNrX21hdGhDb250cm9sbGVyOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpIHx8IGUudGFyZ2V0LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICgvdXBkYXRlLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubWF0aC5mb2N1c0VsZW1lbnQudmFsdWUgPSB0aGlzLnV0aWwuSFRNTERlY29kZXIodGhpcy5jb250ZXh0Lm1hdGguX21hdGhFeHAuZ2V0QXR0cmlidXRlKCdkYXRhLWV4cCcpKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdtYXRoJywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiogZGVsZXRlICovXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbSh0aGlzLmNvbnRleHQubWF0aC5fbWF0aEV4cCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubWF0aC5fbWF0aEV4cCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG5cbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcbiAgICB9LFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb250ZXh0TWF0aCA9IHRoaXMuY29udGV4dC5tYXRoO1xuICAgICAgICBjb250ZXh0TWF0aC5tYXRoQ29udHJvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBjb250ZXh0TWF0aC5fbWF0aEV4cCA9IG51bGw7XG4gICAgICAgIGNvbnRleHRNYXRoLmZvY3VzRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBjb21tYW5kXG5pbXBvcnQgYmxvY2txdW90ZSBmcm9tICcuL2NvbW1hbmQvYmxvY2txdW90ZSc7XG5cbi8vIHN1Ym1lbnVcbmltcG9ydCBhbGlnbiBmcm9tICcuL3N1Ym1lbnUvYWxpZ24nO1xuaW1wb3J0IGZvbnQgZnJvbSAnLi9zdWJtZW51L2ZvbnQnO1xuaW1wb3J0IGZvbnRTaXplIGZyb20gJy4vc3VibWVudS9mb250U2l6ZSc7XG5pbXBvcnQgZm9udENvbG9yIGZyb20gJy4vc3VibWVudS9mb250Q29sb3InO1xuaW1wb3J0IGhpbGl0ZUNvbG9yIGZyb20gJy4vc3VibWVudS9oaWxpdGVDb2xvcic7XG5pbXBvcnQgaG9yaXpvbnRhbFJ1bGUgZnJvbSAnLi9zdWJtZW51L2hvcml6b250YWxSdWxlJztcbmltcG9ydCBsaXN0IGZyb20gJy4vc3VibWVudS9saXN0JztcbmltcG9ydCB0YWJsZSBmcm9tICcuL3N1Ym1lbnUvdGFibGUnO1xuaW1wb3J0IGZvcm1hdEJsb2NrIGZyb20gJy4vc3VibWVudS9mb3JtYXRCbG9jayc7XG5pbXBvcnQgbGluZUhlaWdodCBmcm9tICcuL3N1Ym1lbnUvbGluZUhlaWdodCc7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnLi9zdWJtZW51L3RlbXBsYXRlJztcbmltcG9ydCBwYXJhZ3JhcGhTdHlsZSBmcm9tICcuL3N1Ym1lbnUvcGFyYWdyYXBoU3R5bGUnO1xuaW1wb3J0IHRleHRTdHlsZSBmcm9tICcuL3N1Ym1lbnUvdGV4dFN0eWxlJztcblxuLy8gZGlhbG9nXG5pbXBvcnQgbGluayBmcm9tICcuL2RpYWxvZy9saW5rJztcbmltcG9ydCBpbWFnZSBmcm9tICcuL2RpYWxvZy9pbWFnZSc7XG5pbXBvcnQgdmlkZW8gZnJvbSAnLi9kaWFsb2cvdmlkZW8nO1xuaW1wb3J0IGF1ZGlvIGZyb20gJy4vZGlhbG9nL2F1ZGlvJztcbmltcG9ydCBtYXRoIGZyb20gJy4vZGlhbG9nL21hdGgnO1xuXG4vLyBmaWxlIGJyb3dzZXJcbmltcG9ydCBpbWFnZUdhbGxlcnkgZnJvbSAnLi9maWxlQnJvd3Nlci9pbWFnZUdhbGxlcnknO1xuXG5leHBvcnQgeyBibG9ja3F1b3RlLCBhbGlnbiwgZm9udCwgZm9udFNpemUsIGZvbnRDb2xvciwgaGlsaXRlQ29sb3IsIGhvcml6b250YWxSdWxlLCBsaXN0LCB0YWJsZSwgZm9ybWF0QmxvY2ssIGxpbmVIZWlnaHQsIHRlbXBsYXRlLCBwYXJhZ3JhcGhTdHlsZSwgdGV4dFN0eWxlLCBsaW5rLCBpbWFnZSwgdmlkZW8sIGF1ZGlvLCBtYXRoLCBpbWFnZUdhbGxlcnkgfTtcbmV4cG9ydCBkZWZhdWx0IHsgYmxvY2txdW90ZSwgYWxpZ24sIGZvbnQsIGZvbnRTaXplLCBmb250Q29sb3IsIGhpbGl0ZUNvbG9yLCBob3Jpem9udGFsUnVsZSwgbGlzdCwgdGFibGUsIGZvcm1hdEJsb2NrLCBsaW5lSGVpZ2h0LCB0ZW1wbGF0ZSwgcGFyYWdyYXBoU3R5bGUsIHRleHRTdHlsZSwgbGluaywgaW1hZ2UsIHZpZGVvLCBhdWRpbywgbWF0aCwgaW1hZ2VHYWxsZXJ5IH07XG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdibG9ja3F1b3RlJyxcbiAgICBkaXNwbGF5OiAnY29tbWFuZCcsXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xuICAgICAgICBjb250ZXh0LmJsb2NrcXVvdGUgPSB7XG4gICAgICAgICAgICB0YXJnZXRCdXR0b246IHRhcmdldEVsZW1lbnQsXG4gICAgICAgICAgICB0YWc6IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdCTE9DS1FVT1RFJylcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRoaXMuY29udGV4dC5ibG9ja3F1b3RlLnRhcmdldEJ1dHRvbiwgJ2FjdGl2ZScpO1xuICAgICAgICB9IGVsc2UgaWYgKC9ibG9ja3F1b3RlL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRoaXMuY29udGV4dC5ibG9ja3F1b3RlLnRhcmdldEJ1dHRvbiwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrcXVvdGUgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgJ2Jsb2NrcXVvdGUnKTtcblxuICAgICAgICBpZiAoY3VycmVudEJsb2NrcXVvdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnRCbG9ja3F1b3RlLCBudWxsLCBudWxsLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBseVJhbmdlRm9ybWF0RWxlbWVudCh0aGlzLmNvbnRleHQuYmxvY2txdW90ZS50YWcuY2xvbmVOb2RlKGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICB9XG59OyIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ2FsaWduJyxcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuYWxpZ24gPSB7XG4gICAgICAgICAgICB0YXJnZXRCdXR0b246IHRhcmdldEVsZW1lbnQsXG4gICAgICAgICAgICBfYWxpZ25MaXN0OiBudWxsLFxuICAgICAgICAgICAgY3VycmVudEFsaWduOiAnJyxcbiAgICAgICAgICAgIGRlZmF1bHREaXI6IGNvcmUub3B0aW9ucy5ydGwgPyAncmlnaHQnIDogJ2xlZnQnLCBcbiAgICAgICAgICAgIGljb25zOiB7XG4gICAgICAgICAgICAgICAganVzdGlmeTogaWNvbnMuYWxpZ25fanVzdGlmeSxcbiAgICAgICAgICAgICAgICBsZWZ0OiBpY29ucy5hbGlnbl9sZWZ0LFxuICAgICAgICAgICAgICAgIHJpZ2h0OiBpY29ucy5hbGlnbl9yaWdodCxcbiAgICAgICAgICAgICAgICBjZW50ZXI6IGljb25zLmFsaWduX2NlbnRlclxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcbiAgICAgICAgbGV0IGxpc3RVbCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBsaXN0VWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcbiAgICAgICAgY29udGV4dC5hbGlnbi5fYWxpZ25MaXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcblxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xuICAgIH0sXG5cbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgIGNvbnN0IGxlZnREaXIgPSBjb3JlLmNvbnRleHQuYWxpZ24uZGVmYXVsdERpciA9PT0gJ2xlZnQnO1xuXG4gICAgICAgIGNvbnN0IGxlZnRNZW51ID0gJzxsaT4nICtcbiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLWJ0bi1hbGlnblwiIGRhdGEtY29tbWFuZD1cImp1c3RpZnlsZWZ0XCIgZGF0YS12YWx1ZT1cImxlZnRcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuYWxpZ25MZWZ0ICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLWxpc3QtaWNvblwiPicgKyBpY29ucy5hbGlnbl9sZWZ0ICsgJzwvc3Bhbj4nICsgbGFuZy50b29sYmFyLmFsaWduTGVmdCArXG4gICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICc8L2xpPic7XG5cbiAgICAgICAgY29uc3QgcmlnaHRNZW51ID0gJzxsaT4nICtcbiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLWJ0bi1hbGlnblwiIGRhdGEtY29tbWFuZD1cImp1c3RpZnlyaWdodFwiIGRhdGEtdmFsdWU9XCJyaWdodFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5hbGlnblJpZ2h0ICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLWxpc3QtaWNvblwiPicgKyBpY29ucy5hbGlnbl9yaWdodCArJzwvc3Bhbj4nICsgbGFuZy50b29sYmFyLmFsaWduUmlnaHQgK1xuICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAnPC9saT4nO1xuXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllciBzZS1saXN0LWFsaWduJztcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAobGVmdERpciA/IGxlZnRNZW51IDogcmlnaHRNZW51KSArXG4gICAgICAgICAgICAgICAgICAgICc8bGk+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS1idG4tYWxpZ25cIiBkYXRhLWNvbW1hbmQ9XCJqdXN0aWZ5Y2VudGVyXCIgZGF0YS12YWx1ZT1cImNlbnRlclwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5hbGlnbkNlbnRlciArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1saXN0LWljb25cIj4nICsgaWNvbnMuYWxpZ25fY2VudGVyICsgJzwvc3Bhbj4nICsgbGFuZy50b29sYmFyLmFsaWduQ2VudGVyICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvbGk+JyArXG4gICAgICAgICAgICAgICAgICAgIChsZWZ0RGlyPyByaWdodE1lbnUgOiBsZWZ0TWVudSkgK1xuICAgICAgICAgICAgICAgICAgICAnPGxpPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtYnRuLWFsaWduXCIgZGF0YS1jb21tYW5kPVwianVzdGlmeWZ1bGxcIiBkYXRhLXZhbHVlPVwianVzdGlmeVwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5hbGlnbkp1c3RpZnkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtbGlzdC1pY29uXCI+JyArIGljb25zLmFsaWduX2p1c3RpZnkgKyAnPC9zcGFuPicgKyBsYW5nLnRvb2xiYXIuYWxpZ25KdXN0aWZ5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvbGk+JyArXG4gICAgICAgICAgICAgICAgJzwvdWw+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcblxuICAgICAgICByZXR1cm4gbGlzdERpdjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGFsaWduQ29udGV4dCA9IHRoaXMuY29udGV4dC5hbGlnbjtcbiAgICAgICAgY29uc3QgdGFyZ2V0QnV0dG9uID0gYWxpZ25Db250ZXh0LnRhcmdldEJ1dHRvbjtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0QnV0dG9uLmZpcnN0RWxlbWVudENoaWxkO1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZUVsZW1lbnQodGFyZ2V0LCBhbGlnbkNvbnRleHQuaWNvbnNbYWxpZ25Db250ZXh0LmRlZmF1bHREaXJdKTtcbiAgICAgICAgICAgIHRhcmdldEJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWxpZ24gPSBlbGVtZW50LnN0eWxlLnRleHRBbGlnbjtcbiAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlRWxlbWVudCh0YXJnZXQsIGFsaWduQ29udGV4dC5pY29uc1t0ZXh0QWxpZ25dIHx8IGFsaWduQ29udGV4dC5pY29uc1thbGlnbkNvbnRleHQuZGVmYXVsdERpcl0pO1xuICAgICAgICAgICAgICAgIHRhcmdldEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMnLCB0ZXh0QWxpZ24pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxuICAgICAqL1xuICAgIG9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFsaWduQ29udGV4dCA9IHRoaXMuY29udGV4dC5hbGlnbjtcbiAgICAgICAgY29uc3QgYWxpZ25MaXN0ID0gYWxpZ25Db250ZXh0Ll9hbGlnbkxpc3Q7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbGlnbiA9IGFsaWduQ29udGV4dC50YXJnZXRCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzJykgfHwgYWxpZ25Db250ZXh0LmRlZmF1bHREaXI7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRBbGlnbiAhPT0gYWxpZ25Db250ZXh0LmN1cnJlbnRBbGlnbikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFsaWduTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QWxpZ24gPT09IGFsaWduTGlzdFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoYWxpZ25MaXN0W2ldLCAnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGFsaWduTGlzdFtpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYWxpZ25Db250ZXh0LmN1cnJlbnRBbGlnbiA9IGN1cnJlbnRBbGlnbjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKCF2YWx1ZSAmJiAhL1VML2kudGVzdCh0YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdERpciA9IHRoaXMuY29udGV4dC5hbGlnbi5kZWZhdWx0RGlyO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybXN0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdGhpcy51dGlsLnNldFN0eWxlKHNlbGVjdGVkRm9ybXN0c1tpXSwgJ3RleHRBbGlnbicsICh2YWx1ZSA9PT0gZGVmYXVsdERpciA/ICcnIDogdmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcbiAgICB9XG59O1xuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnZm9udCcsXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcbiAgICAgICAgY29udGV4dC5mb250ID0ge1xuICAgICAgICAgICAgdGFyZ2V0VGV4dDogdGFyZ2V0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudHh0JyksXG4gICAgICAgICAgICB0YXJnZXRUb29sdGlwOiB0YXJnZXRFbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcignLnNlLXRvb2x0aXAtdGV4dCcpLFxuICAgICAgICAgICAgX2ZvbnRMaXN0OiBudWxsLFxuICAgICAgICAgICAgY3VycmVudEZvbnQ6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xuXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXG4gICAgICAgIGxpc3REaXYucXVlcnlTZWxlY3RvcignLnNlLWxpc3QtaW5uZXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja3VwLmJpbmQoY29yZSkpO1xuXG4gICAgICAgIGNvbnRleHQuZm9udC5fZm9udExpc3QgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsIGxpIGJ1dHRvbicpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcblxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgIGxpc3REaXYgPSBudWxsO1xuICAgIH0sXG5cbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG5cbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9udC1mYW1pbHknO1xuXG4gICAgICAgIGxldCBmb250LCB0ZXh0LCBpLCBsZW47XG4gICAgICAgIGxldCBmb250TGlzdCA9ICFvcHRpb24uZm9udCA/XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAnQ29taWMgU2FucyBNUycsXG4gICAgICAgICAgICAgICAgJ0NvdXJpZXIgTmV3JyxcbiAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAnR2VvcmdpYScsXG4gICAgICAgICAgICAgICAgJ3RhaG9tYScsXG4gICAgICAgICAgICAgICAgJ1RyZWJ1Y2hldCBNUycsXG4gICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICBdIDogb3B0aW9uLmZvbnQ7XG5cbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZGVmYXVsdF92YWx1ZSBzZS1idG4tbGlzdFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJ1wiPignICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnKTwvYnV0dG9uPjwvbGk+JztcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm9udExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGZvbnQgPSBmb250TGlzdFtpXTtcbiAgICAgICAgICAgIHRleHQgPSBmb250LnNwbGl0KCcsJylbMF07XG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgZm9udCArICdcIiBkYXRhLXR4dD1cIicgKyB0ZXh0ICsgJ1wiIHRpdGxlPVwiJyArIHRleHQgKyAnXCIgc3R5bGU9XCJmb250LWZhbWlseTonICsgZm9udCArICc7XCI+JyArIHRleHQgKyAnPC9idXR0b24+PC9saT4nO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QgKz0gJzwvdWw+PC9kaXY+JztcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xuXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29udGV4dC5mb250LnRhcmdldFRleHQ7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmNvbnRleHQuZm9udC50YXJnZXRUb29sdGlwO1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZm9udCA9IHRoaXMuaGFzRm9jdXMgPyB0aGlzLnd3Q29tcHV0ZWRTdHlsZS5mb250RmFtaWx5IDogdGhpcy5sYW5nLnRvb2xiYXIuZm9udDtcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodGFyZ2V0LCBmb250KTtcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodG9vbHRpcCwgdGhpcy5oYXNGb2N1cyA/IHRoaXMubGFuZy50b29sYmFyLmZvbnQgKyAnICgnICsgZm9udCArICcpJyA6IGZvbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUgJiYgZWxlbWVudC5zdHlsZS5mb250RmFtaWx5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEZvbnQgPSBlbGVtZW50LnN0eWxlLmZvbnRGYW1pbHkucmVwbGFjZSgvW1wiJ10vZywnJyk7XG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgc2VsZWN0Rm9udCk7XG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRvb2x0aXAsIHRoaXMubGFuZy50b29sYmFyLmZvbnQgKyAnICgnICsgc2VsZWN0Rm9udCArICcpJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZm9udENvbnRleHQgPSB0aGlzLmNvbnRleHQuZm9udDtcbiAgICAgICAgY29uc3QgZm9udExpc3QgPSBmb250Q29udGV4dC5fZm9udExpc3Q7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb250ID0gZm9udENvbnRleHQudGFyZ2V0VGV4dC50ZXh0Q29udGVudDtcblxuICAgICAgICBpZiAoY3VycmVudEZvbnQgIT09IGZvbnRDb250ZXh0LmN1cnJlbnRGb250KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZm9udExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbnQgPT09IGZvbnRMaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhmb250TGlzdFtpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhmb250TGlzdFtpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9udENvbnRleHQuY3VycmVudEZvbnQgPSBjdXJyZW50Rm9udDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICghL15CVVRUT04kL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XG4gICAgICAgICAgICBuZXdOb2RlLnN0eWxlLmZvbnRGYW1pbHkgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShuZXdOb2RlLCBbJ2ZvbnQtZmFtaWx5J10sIG51bGwsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG51bGwsIFsnZm9udC1mYW1pbHknXSwgWydzcGFuJ10sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcbiAgICB9XG59O1xuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnZm9udFNpemUnLFxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuZm9udFNpemUgPSB7XG4gICAgICAgICAgICB0YXJnZXRUZXh0OiB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSxcbiAgICAgICAgICAgIF9zaXplTGlzdDogbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnRTaXplOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcbiAgICAgICAgbGV0IGxpc3RVbCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBsaXN0VWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcbiAgICAgICAgY29udGV4dC5mb250U2l6ZS5fc2l6ZUxpc3QgPSBsaXN0VWwucXVlcnlTZWxlY3RvckFsbCgnbGkgYnV0dG9uJyk7XG5cbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xuXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cbiAgICAgICAgbGlzdERpdiA9IG51bGwsIGxpc3RVbCA9IG51bGw7XG4gICAgfSxcblxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGNvcmUub3B0aW9ucztcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcblxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1mb250LXNpemUnO1xuXG4gICAgICAgIGNvbnN0IHNpemVMaXN0ID0gIW9wdGlvbi5mb250U2l6ZSA/IFs4LCA5LCAxMCwgMTEsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDM2LCA0OCwgNzJdIDogb3B0aW9uLmZvbnRTaXplO1xuXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRlZmF1bHRfdmFsdWUgc2UtYnRuLWxpc3RcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuZGVmYXVsdCArICdcIj4oJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJyk8L2J1dHRvbj48L2xpPic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCB1bml0ID0gb3B0aW9uLmZvbnRTaXplVW5pdCwgbGVuID0gc2l6ZUxpc3QubGVuZ3RoLCBzaXplOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHNpemUgPSBzaXplTGlzdFtpXTtcbiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0XCIgZGF0YS12YWx1ZT1cIicgKyBzaXplICsgdW5pdCArICdcIiB0aXRsZT1cIicgKyBzaXplICsgdW5pdCArICdcIiBzdHlsZT1cImZvbnQtc2l6ZTonICsgc2l6ZSArIHVuaXQgKyAnO1wiPicgKyBzaXplICsgJzwvYnV0dG9uPjwvbGk+JztcbiAgICAgICAgfVxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XG5cbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xuXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0aGlzLmNvbnRleHQuZm9udFNpemUudGFyZ2V0VGV4dCwgdGhpcy5oYXNGb2N1cyA/IHRoaXMud3dDb21wdXRlZFN0eWxlLmZvbnRTaXplIDogdGhpcy5sYW5nLnRvb2xiYXIuZm9udFNpemUpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUgJiYgZWxlbWVudC5zdHlsZS5mb250U2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRoaXMuY29udGV4dC5mb250U2l6ZS50YXJnZXRUZXh0LCBlbGVtZW50LnN0eWxlLmZvbnRTaXplKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBmb250U2l6ZUNvbnRleHQgPSB0aGlzLmNvbnRleHQuZm9udFNpemU7XG4gICAgICAgIGNvbnN0IHNpemVMaXN0ID0gZm9udFNpemVDb250ZXh0Ll9zaXplTGlzdDtcbiAgICAgICAgY29uc3QgY3VycmVudFNpemUgPSBmb250U2l6ZUNvbnRleHQudGFyZ2V0VGV4dC50ZXh0Q29udGVudDtcblxuICAgICAgICBpZiAoY3VycmVudFNpemUgIT09IGZvbnRTaXplQ29udGV4dC5jdXJyZW50U2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNpemVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTaXplID09PSBzaXplTGlzdFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2l6ZUxpc3RbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3Moc2l6ZUxpc3RbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvbnRTaXplQ29udGV4dC5jdXJyZW50U2l6ZSA9IGN1cnJlbnRTaXplO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKCEvXkJVVFRPTiQvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xuICAgICAgICAgICAgbmV3Tm9kZS5zdHlsZS5mb250U2l6ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIFsnZm9udC1zaXplJ10sIG51bGwsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG51bGwsIFsnZm9udC1zaXplJ10sIFsnc3BhbiddLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuICAgIH1cbn07XG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdob3Jpem9udGFsUnVsZScsXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgY29yZS5jb250ZXh0Lmhvcml6b250YWxSdWxlID0ge1xuICAgICAgICAgICAgY3VycmVudEhSOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhvcml6b250YWxSdWxlUGljay5iaW5kKGNvcmUpKTtcblxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcbiAgICB9LFxuXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcblxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1saW5lJztcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGxpPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3QgYnRuX2xpbmVcIiBkYXRhLWNvbW1hbmQ9XCJob3Jpem9udGFsUnVsZVwiIGRhdGEtdmFsdWU9XCJzb2xpZFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5ocl9zb2xpZCArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGhyIHN0eWxlPVwiYm9yZGVyLXdpZHRoOiAxcHggMCAwOyBib3JkZXItc3R5bGU6IHNvbGlkIG5vbmUgbm9uZTsgYm9yZGVyLWNvbG9yOiBibGFjazsgYm9yZGVyLWltYWdlOiBpbml0aWFsOyBoZWlnaHQ6IDFweDtcIiAvPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9saT4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxsaT4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IGJ0bl9saW5lXCIgZGF0YS1jb21tYW5kPVwiaG9yaXpvbnRhbFJ1bGVcIiBkYXRhLXZhbHVlPVwiZG90dGVkXCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmhyX2RvdHRlZCArICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGhyIHN0eWxlPVwiYm9yZGVyLXdpZHRoOiAxcHggMCAwOyBib3JkZXItc3R5bGU6IGRvdHRlZCBub25lIG5vbmU7IGJvcmRlci1jb2xvcjogYmxhY2s7IGJvcmRlci1pbWFnZTogaW5pdGlhbDsgaGVpZ2h0OiAxcHg7XCIgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvbGk+JyArXG4gICAgICAgICAgICAgICAgICAgICc8bGk+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBidG5fbGluZVwiIGRhdGEtY29tbWFuZD1cImhvcml6b250YWxSdWxlXCIgZGF0YS12YWx1ZT1cImRhc2hlZFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5ocl9kYXNoZWQgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxociBzdHlsZT1cImJvcmRlci13aWR0aDogMXB4IDAgMDsgYm9yZGVyLXN0eWxlOiBkYXNoZWQgbm9uZSBub25lOyBib3JkZXItY29sb3I6IGJsYWNrOyBib3JkZXItaW1hZ2U6IGluaXRpYWw7IGhlaWdodDogMXB4O1wiIC8+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2xpPicgK1xuICAgICAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG5cbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XG4gICAgfSxcblxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmhhc0NsYXNzKHRoaXMuY29udGV4dC5ob3Jpem9udGFsUnVsZS5jdXJyZW50SFIsICdvbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKC9IUi9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5ob3Jpem9udGFsUnVsZS5jdXJyZW50SFIgPSBlbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzQ2xhc3MoZWxlbWVudCwgJ29uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoZWxlbWVudCwgJ29uJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09uKCdocicsIHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCwgZWxlbWVudCwgJ29uJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGFwcGVuZEhyOiBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGNvbnN0IG9IciA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdIUicpO1xuICAgICAgICBvSHIuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydENvbXBvbmVudChvSHIsIGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgfSxcblxuICAgIGhvcml6b250YWxSdWxlUGljazogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgXG4gICAgICAgIHdoaWxlICghdmFsdWUgJiYgIS9VTC9pLnRlc3QodGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9Ob2RlID0gdGhpcy5wbHVnaW5zLmhvcml6b250YWxSdWxlLmFwcGVuZEhyLmNhbGwodGhpcywgJ19fc2VfXycgKyB2YWx1ZSk7XG4gICAgICAgIGlmIChvTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShvTm9kZSwgMCwgb05vZGUsIDApO1xuICAgICAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnbGlzdCcsXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcbiAgICAgICAgY29udGV4dC5saXN0ID0ge1xuICAgICAgICAgICAgdGFyZ2V0QnV0dG9uOiB0YXJnZXRFbGVtZW50LFxuICAgICAgICAgICAgX2xpc3Q6IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50TGlzdDogJycsXG4gICAgICAgICAgICBpY29uczoge1xuICAgICAgICAgICAgICAgIGJ1bGxldHM6IGNvcmUuaWNvbnMubGlzdF9idWxsZXRzLFxuICAgICAgICAgICAgICAgIG51bWJlcjogY29yZS5pY29ucy5saXN0X251bWJlclxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcbiAgICAgICAgbGV0IGxpc3RVbCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBsaXN0VWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcbiAgICAgICAgY29udGV4dC5saXN0Ll9saXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcblxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xuICAgIH0sXG5cbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gJycgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLXRvb2x0aXBcIiBkYXRhLWNvbW1hbmQ9XCJPTFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5vcmRlckxpc3QgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmxpc3RfbnVtYmVyICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXG4gICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiVUxcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIudW5vcmRlckxpc3QgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmxpc3RfYnVsbGV0cyArXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPicgK1xuICAgICAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG5cbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XG4gICAgfSxcblxuICAgICAvKipcbiAgICAgKiBAT3ZlcnJpZGUgY29yZVxuICAgICAqL1xuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5jb250ZXh0Lmxpc3QudGFyZ2V0QnV0dG9uO1xuICAgICAgICBjb25zdCBpY29uID0gYnV0dG9uLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1mb2N1cycpO1xuICAgICAgICAgICAgdXRpbC5jaGFuZ2VFbGVtZW50KGljb24sIHRoaXMuY29udGV4dC5saXN0Lmljb25zLm51bWJlcik7XG4gICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGJ1dHRvbiwgJ2FjdGl2ZScpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWwuaXNMaXN0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG4gICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzJywgbm9kZU5hbWUpO1xuICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhidXR0b24sICdhY3RpdmUnKTtcbiAgICAgICAgICAgIGlmICgvVUwvaS50ZXN0KG5vZGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHV0aWwuY2hhbmdlRWxlbWVudChpY29uLCB0aGlzLmNvbnRleHQubGlzdC5pY29ucy5idWxsZXRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5jaGFuZ2VFbGVtZW50KGljb24sIHRoaXMuY29udGV4dC5saXN0Lmljb25zLm51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBsaXN0Q29udGV4dCA9IHRoaXMuY29udGV4dC5saXN0O1xuICAgICAgICBjb25zdCBsaXN0ID0gbGlzdENvbnRleHQuX2xpc3Q7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaXN0ID0gbGlzdENvbnRleHQudGFyZ2V0QnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1mb2N1cycpIHx8ICcnO1xuXG4gICAgICAgIGlmIChjdXJyZW50TGlzdCAhPT0gbGlzdENvbnRleHQuY3VycmVudExpc3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMaXN0ID09PSBsaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGxpc3RbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MobGlzdFtpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGlzdENvbnRleHQuY3VycmVudExpc3QgPSBjdXJyZW50TGlzdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0TGlzdDogZnVuY3Rpb24gKGNvbW1hbmQsIHNlbGVjdGVkQ2VsbHMsIGRldGFjaCkge1xuICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XG4gICAgICAgIGxldCBzZWxlY3RlZEZvcm1hdHMgPSAhc2VsZWN0ZWRDZWxscyA/IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpIDogc2VsZWN0ZWRDZWxscztcblxuICAgICAgICBpZiAoc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbHMpIHJldHVybjtcbiAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHJhbmdlLCBudWxsKTtcbiAgICAgICAgICAgIHNlbGVjdGVkRm9ybWF0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcbiAgICAgICAgdXRpbC5zb3J0QnlEZXB0aChzZWxlY3RlZEZvcm1hdHMsIHRydWUpO1xuXG4gICAgICAgIC8vIG1lcmdlXG4gICAgICAgIGxldCBmaXJzdFNlbCA9IHNlbGVjdGVkRm9ybWF0c1swXTtcbiAgICAgICAgbGV0IGxhc3RTZWwgPSBzZWxlY3RlZEZvcm1hdHNbc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgdG9wRWwgPSAodXRpbC5pc0xpc3RDZWxsKGZpcnN0U2VsKSB8fCB1dGlsLmlzQ29tcG9uZW50KGZpcnN0U2VsKSkgJiYgIWZpcnN0U2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPyBmaXJzdFNlbC5wYXJlbnROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBmaXJzdFNlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICBsZXQgYm90dG9tRWwgPSAodXRpbC5pc0xpc3RDZWxsKGxhc3RTZWwpIHx8IHV0aWwuaXNDb21wb25lbnQobGFzdFNlbCkpICYmICFsYXN0U2VsLm5leHRFbGVtZW50U2libGluZyA/IGxhc3RTZWwucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgOiBsYXN0U2VsLm5leHRFbGVtZW50U2libGluZztcblxuICAgICAgICBjb25zdCBvcmlnaW5SYW5nZSA9IHtcbiAgICAgICAgICAgIHNjOiByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgIHNvOiByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICAgIGVjOiByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgICBlbzogcmFuZ2UuZW5kT2Zmc2V0XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGlzUmVtb3ZlID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0KHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1tpXSwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudCkgJiYgY3VycmVudCAhPT0gc2VsZWN0ZWRGb3JtYXRzW2ldO1xuICAgICAgICAgICAgfS5iaW5kKHV0aWwpKSkpIHtcbiAgICAgICAgICAgICAgICBpc1JlbW92ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmVtb3ZlICYmICghdG9wRWwgfHwgKGZpcnN0U2VsLnRhZ05hbWUgIT09IHRvcEVsLnRhZ05hbWUgfHwgY29tbWFuZCAhPT0gdG9wRWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSkgJiYgKCFib3R0b21FbCB8fCAobGFzdFNlbC50YWdOYW1lICE9PSBib3R0b21FbC50YWdOYW1lIHx8IGNvbW1hbmQgIT09IGJvdHRvbUVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSkpKSB7XG4gICAgICAgICAgICBpZiAoZGV0YWNoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaSAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3JtYXRzW2pdLmNvbnRhaW5zKHNlbGVjdGVkRm9ybWF0c1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvcm1hdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsgbGVuLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtYXQgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmaXJzdFNlbCk7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWwgPSBjdXJyZW50Rm9ybWF0ICYmIGN1cnJlbnRGb3JtYXQudGFnTmFtZSA9PT0gY29tbWFuZDtcbiAgICAgICAgICAgIGxldCByYW5nZUFyciwgdGVtcExpc3Q7XG4gICAgICAgICAgICBjb25zdCBwYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNDb21wb25lbnQoY3VycmVudCk7XG4gICAgICAgICAgICB9LmJpbmQodXRpbCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghY2FuY2VsKSB0ZW1wTGlzdCA9IHV0aWwuY3JlYXRlRWxlbWVudChjb21tYW5kKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGgsIHIsIG87IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIG8gPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sIHBhc3NDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgIGlmICghbyB8fCAhdXRpbC5pc0xpc3QobykpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICByYW5nZUFyciA9IHtyOiByLCBmOiBbdXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1tpXSwgJ0xJJyldfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAociAhPT0gbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFjaCAmJiB1dGlsLmlzTGlzdENlbGwoby5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5saXN0Ll9kZXRhY2hOZXN0ZWQuY2FsbCh0aGlzLCByYW5nZUFyci5mKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VBcnIuZlswXS5wYXJlbnROb2RlLCByYW5nZUFyci5mLCB0ZW1wTGlzdCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gc2VsZWN0ZWRGb3JtYXRzW2ldLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbCkgdGVtcExpc3QgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VBcnIgPSB7cjogciwgZjogW3V0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sICdMSScpXX07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUFyci5mLnB1c2godXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1tpXSwgJ0xJJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChpID09PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXRhY2ggJiYgdXRpbC5pc0xpc3RDZWxsKG8ucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5saXN0Ll9kZXRhY2hOZXN0ZWQuY2FsbCh0aGlzLCByYW5nZUFyci5mKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlQXJyLmZbMF0ucGFyZW50Tm9kZSwgcmFuZ2VBcnIuZiwgdGVtcExpc3QsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcEVsUGFyZW50ID0gdG9wRWwgPyB0b3BFbC5wYXJlbnROb2RlIDogdG9wRWw7XG4gICAgICAgICAgICBjb25zdCBib3R0b21FbFBhcmVudCA9IGJvdHRvbUVsID8gYm90dG9tRWwucGFyZW50Tm9kZSA6IGJvdHRvbUVsO1xuICAgICAgICAgICAgdG9wRWwgPSB0b3BFbFBhcmVudCAmJiAhdXRpbC5pc1d5c2l3eWdEaXYodG9wRWxQYXJlbnQpICYmIHRvcEVsUGFyZW50Lm5vZGVOYW1lID09PSBjb21tYW5kID8gdG9wRWxQYXJlbnQgOiB0b3BFbDtcbiAgICAgICAgICAgIGJvdHRvbUVsID0gYm90dG9tRWxQYXJlbnQgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KGJvdHRvbUVsUGFyZW50KSAmJiBib3R0b21FbFBhcmVudC5ub2RlTmFtZSA9PT0gY29tbWFuZCA/IGJvdHRvbUVsUGFyZW50IDogYm90dG9tRWw7XG5cbiAgICAgICAgICAgIGNvbnN0IG1lcmdlVG9wID0gdG9wRWwgJiYgdG9wRWwudGFnTmFtZSA9PT0gY29tbWFuZDtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlQm90dG9tID0gYm90dG9tRWwgJiYgYm90dG9tRWwudGFnTmFtZSA9PT0gY29tbWFuZDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBtZXJnZVRvcCA/IHRvcEVsIDogdXRpbC5jcmVhdGVFbGVtZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgbGV0IGZpcnN0TGlzdCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbGFzdExpc3QgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHRvcE51bWJlciA9IG51bGw7XG4gICAgICAgICAgICBsZXQgYm90dG9tTnVtYmVyID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uIChjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdChjdXJyZW50KTtcbiAgICAgICAgICAgIH0uYmluZCh1dGlsKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGgsIG5ld0NlbGwsIGZUYWcsIGlzQ2VsbCwgbmV4dCwgb3JpZ2luUGFyZW50LCBuZXh0UGFyZW50LCBwYXJlbnRUYWcsIHNpYmxpbmdUYWcsIHJhbmdlVGFnOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmVGFnID0gc2VsZWN0ZWRGb3JtYXRzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChmVGFnLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwICYmICF1dGlsLl9pc0lnbm9yZU5vZGVDaGFuZ2UoZlRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGZUYWcpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dCA9IHNlbGVjdGVkRm9ybWF0c1tpICsgMV07XG4gICAgICAgICAgICAgICAgb3JpZ2luUGFyZW50ID0gZlRhZy5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIG5leHRQYXJlbnQgPSBuZXh0ID8gbmV4dC5wYXJlbnROb2RlIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpc0NlbGwgPSB1dGlsLmlzTGlzdENlbGwoZlRhZyk7XG4gICAgICAgICAgICAgICAgcmFuZ2VUYWcgPSB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KG9yaWdpblBhcmVudCkgPyBvcmlnaW5QYXJlbnQgOiBudWxsO1xuICAgICAgICAgICAgICAgIHBhcmVudFRhZyA9IGlzQ2VsbCAmJiAhdXRpbC5pc1d5c2l3eWdEaXYob3JpZ2luUGFyZW50KSA/IG9yaWdpblBhcmVudC5wYXJlbnROb2RlIDogb3JpZ2luUGFyZW50O1xuICAgICAgICAgICAgICAgIHNpYmxpbmdUYWcgPSBpc0NlbGwgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KG9yaWdpblBhcmVudCkgPyAoIW5leHQgfHwgdXRpbC5pc0xpc3RDZWxsKHBhcmVudFRhZykpID8gb3JpZ2luUGFyZW50IDogb3JpZ2luUGFyZW50Lm5leHRTaWJsaW5nIDogZlRhZy5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgIG5ld0NlbGwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0xJJyk7XG4gICAgICAgICAgICAgICAgdXRpbC5jb3B5Rm9ybWF0QXR0cmlidXRlcyhuZXdDZWxsLCBmVGFnKTtcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChmVGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0hSID0gL15IUiQvaS50ZXN0KGZUYWcubm9kZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSFIpIG5ld0NlbGwuaW5uZXJIVE1MID0gJzxicj4nO1xuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmlubmVySFRNTCArPSBmVGFnLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSFIpIG5ld0NlbGwuaW5uZXJIVE1MICs9ICc8YnI+JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmQ2hpbGRyZW4gPSBmVGFnLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChmQ2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuYXBwZW5kQ2hpbGQoZkNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZENoaWxkKG5ld0NlbGwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0KSBsYXN0TGlzdCA9IGxpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0IHx8IHBhcmVudFRhZyAhPT0gbmV4dFBhcmVudCB8fCB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHNpYmxpbmdUYWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RMaXN0KSBmaXJzdExpc3QgPSBsaXN0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFtZXJnZVRvcCB8fCAhbmV4dCB8fCBwYXJlbnRUYWcgIT09IG5leHRQYXJlbnQpICYmICEobmV4dCAmJiB1dGlsLmlzTGlzdChuZXh0UGFyZW50KSAmJiBuZXh0UGFyZW50ID09PSBvcmlnaW5QYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5wYXJlbnROb2RlICE9PSBwYXJlbnRUYWcpIHBhcmVudFRhZy5pbnNlcnRCZWZvcmUobGlzdCwgc2libGluZ1RhZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZlRhZyk7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmdlVG9wICYmIHRvcE51bWJlciA9PT0gbnVsbCkgdG9wTnVtYmVyID0gbGlzdC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmICh1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChuZXh0UGFyZW50LCBwYXNzQ29tcG9uZW50KSAhPT0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQob3JpZ2luUGFyZW50LCBwYXNzQ29tcG9uZW50KSB8fCAodXRpbC5pc0xpc3QobmV4dFBhcmVudCkgJiYgdXRpbC5pc0xpc3Qob3JpZ2luUGFyZW50KSAmJiB1dGlsLmdldEVsZW1lbnREZXB0aChuZXh0UGFyZW50KSAhPT0gdXRpbC5nZXRFbGVtZW50RGVwdGgob3JpZ2luUGFyZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlVGFnICYmIHJhbmdlVGFnLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdXRpbC5yZW1vdmVJdGVtKHJhbmdlVGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRvcE51bWJlcikge1xuICAgICAgICAgICAgICAgIGZpcnN0TGlzdCA9IGZpcnN0TGlzdC5jaGlsZHJlblt0b3BOdW1iZXJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWVyZ2VCb3R0b20pIHtcbiAgICAgICAgICAgICAgICBib3R0b21OdW1iZXIgPSBsaXN0LmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbGlzdC5pbm5lckhUTUwgKz0gYm90dG9tRWwuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGxhc3RMaXN0ID0gbGlzdC5jaGlsZHJlbltib3R0b21OdW1iZXJdO1xuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShib3R0b21FbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBvcmlnaW5SYW5nZTtcbiAgICB9LFxuXG4gICAgX2RldGFjaE5lc3RlZDogZnVuY3Rpb24gKGNlbGxzKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gY2VsbHNbMF07XG4gICAgICAgIGNvbnN0IGxhc3QgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGxhc3QubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICBjb25zdCBvcmlnaW5MaXN0ID0gZmlyc3QucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3Qgc2libGluZyA9IG9yaWdpbkxpc3QucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBvcmlnaW5MaXN0LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGxzLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2VsbHNbY10sIHNpYmxpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQgJiYgb3JpZ2luTGlzdC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdMaXN0ID0gb3JpZ2luTGlzdC5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcmlnaW5MaXN0LmNoaWxkTm9kZXM7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudXRpbC5nZXRQb3NpdGlvbkluZGV4KG5leHQpO1xuICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuW2luZGV4XSkge1xuICAgICAgICAgICAgICAgIG5ld0xpc3QuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3QuYXBwZW5kQ2hpbGQobmV3TGlzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JpZ2luTGlzdC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHRoaXMudXRpbC5yZW1vdmVJdGVtKG9yaWdpbkxpc3QpO1xuICAgICAgICB0aGlzLnV0aWwubWVyZ2VTYW1lVGFncyhwYXJlbnROb2RlKTtcblxuICAgICAgICBjb25zdCBlZGdlID0gdGhpcy51dGlsLmdldEVkZ2VDaGlsZE5vZGVzKGZpcnN0LCBsYXN0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2M6IGZpcnN0LnBhcmVudE5vZGUsXG4gICAgICAgICAgICBzYzogZWRnZS5zYyxcbiAgICAgICAgICAgIGVjOiBlZGdlLmVjXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGVkaXRJbnNpZGVMaXN0OiBmdW5jdGlvbiAocmVtb3ZlLCBzZWxlY3RlZENlbGxzKSB7XG4gICAgICAgIHNlbGVjdGVkQ2VsbHMgPSAhc2VsZWN0ZWRDZWxscyA/IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHRoaXMuaXNMaXN0Q2VsbChlbCk7IH0uYmluZCh0aGlzLnV0aWwpKSA6IHNlbGVjdGVkQ2VsbHM7XG4gICAgICAgIGNvbnN0IGNlbGxzTGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGg7XG4gICAgICAgIGlmIChjZWxsc0xlbiA9PT0gMCB8fCAoIXJlbW92ZSAmJiAoIXRoaXMudXRpbC5pc0xpc3RDZWxsKHNlbGVjdGVkQ2VsbHNbMF0ucHJldmlvdXNFbGVtZW50U2libGluZykgJiYgIXRoaXMudXRpbC5pc0xpc3RDZWxsKHNlbGVjdGVkQ2VsbHNbY2VsbHNMZW4gLSAxXS5uZXh0RWxlbWVudFNpYmxpbmcpKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2M6IHNlbGVjdGVkQ2VsbHNbMF0sXG4gICAgICAgICAgICAgICAgc286IDAsXG4gICAgICAgICAgICAgICAgZWM6IHNlbGVjdGVkQ2VsbHNbY2VsbHNMZW4gLSAxXSxcbiAgICAgICAgICAgICAgICBlbzogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcmlnaW5MaXN0ID0gc2VsZWN0ZWRDZWxsc1swXS5wYXJlbnROb2RlO1xuICAgICAgICBsZXQgbGFzdENlbGwgPSBzZWxlY3RlZENlbGxzW2NlbGxzTGVuIC0gMV07XG4gICAgICAgIGxldCByYW5nZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgaWYgKG9yaWdpbkxpc3QgIT09IGxhc3RDZWxsLnBhcmVudE5vZGUgJiYgdGhpcy51dGlsLmlzTGlzdChsYXN0Q2VsbC5wYXJlbnROb2RlLnBhcmVudE5vZGUpICYmIGxhc3RDZWxsLm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgICAgIGxhc3RDZWxsID0gbGFzdENlbGwubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGxzLnB1c2gobGFzdENlbGwpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Q2VsbCA9IGxhc3RDZWxsLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZSA9IHRoaXMucGx1Z2lucy5saXN0LmVkaXRMaXN0LmNhbGwodGhpcywgb3JpZ2luTGlzdC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLCBzZWxlY3RlZENlbGxzLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpbm5lckxpc3QgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChvcmlnaW5MaXN0Lm5vZGVOYW1lKTtcbiAgICAgICAgICAgIGxldCBwcmV2ID0gc2VsZWN0ZWRDZWxsc1swXS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBsYXN0Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICBjb25zdCBub2RlUGF0aCA9IHsgczogbnVsbCwgZTogbnVsbCwgc2w6IG9yaWdpbkxpc3QsIGVsOiBvcmlnaW5MaXN0IH07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjZWxsc0xlbiwgYzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYyA9IHNlbGVjdGVkQ2VsbHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGMucGFyZW50Tm9kZSAhPT0gb3JpZ2luTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMubGlzdC5faW5zaWVkTGlzdC5jYWxsKHRoaXMsIG9yaWdpbkxpc3QsIGlubmVyTGlzdCwgcHJldiwgbmV4dCwgbm9kZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5MaXN0ID0gYy5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckxpc3QgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChvcmlnaW5MaXN0Lm5vZGVOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcHJldiA9IGMucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICBuZXh0ID0gYy5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaW5uZXJMaXN0LmFwcGVuZENoaWxkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMubGlzdC5faW5zaWVkTGlzdC5jYWxsKHRoaXMsIG9yaWdpbkxpc3QsIGlubmVyTGlzdCwgcHJldiwgbmV4dCwgbm9kZVBhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBzYyA9IHRoaXMudXRpbC5nZXROb2RlRnJvbVBhdGgobm9kZVBhdGgucywgbm9kZVBhdGguc2wpO1xuICAgICAgICAgICAgY29uc3QgZWMgPSB0aGlzLnV0aWwuZ2V0Tm9kZUZyb21QYXRoKG5vZGVQYXRoLmUsIG5vZGVQYXRoLmVsKTtcbiAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHNjOiBzYyxcbiAgICAgICAgICAgICAgICBzbzogMCxcbiAgICAgICAgICAgICAgICBlYzogZWMsXG4gICAgICAgICAgICAgICAgZW86IGVjLnRleHRDb250ZW50Lmxlbmd0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9LFxuXG4gICAgX2luc2llZExpc3Q6IGZ1bmN0aW9uIChvcmlnaW5MaXN0LCBpbm5lckxpc3QsIHByZXYsIG5leHQsIG5vZGVQYXRoKSB7XG4gICAgICAgIGxldCBpbnNlcnRQcmV2ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHByZXYgJiYgaW5uZXJMaXN0LnRhZ05hbWUgPT09IHByZXYudGFnTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBpbm5lckxpc3QuY2hpbGRyZW47XG4gICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICBwcmV2LmFwcGVuZENoaWxkKGNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5uZXJMaXN0ID0gcHJldjtcbiAgICAgICAgICAgIGluc2VydFByZXYgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQgJiYgaW5uZXJMaXN0LnRhZ05hbWUgPT09IG5leHQudGFnTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBuZXh0LmNoaWxkcmVuO1xuICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuWzBdKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJMaXN0LmFwcGVuZENoaWxkKGNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgbmV4dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5leHQpO1xuICAgICAgICAgICAgbmV4dCA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWluc2VydFByZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuaXNMaXN0Q2VsbChwcmV2KSkge1xuICAgICAgICAgICAgICAgIG9yaWdpbkxpc3QgPSBwcmV2O1xuICAgICAgICAgICAgICAgIG5leHQgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcmlnaW5MaXN0Lmluc2VydEJlZm9yZShpbm5lckxpc3QsIG5leHQpO1xuXG4gICAgICAgICAgICBpZiAoIW5vZGVQYXRoLnMpIHtcbiAgICAgICAgICAgICAgICBub2RlUGF0aC5zID0gdGhpcy51dGlsLmdldE5vZGVQYXRoKGlubmVyTGlzdC5maXJzdEVsZW1lbnRDaGlsZC5maXJzdENoaWxkLCBvcmlnaW5MaXN0LCBudWxsKTtcbiAgICAgICAgICAgICAgICBub2RlUGF0aC5zbCA9IG9yaWdpbkxpc3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNsUGF0aCA9IG9yaWdpbkxpc3QuY29udGFpbnMobm9kZVBhdGguc2wpID8gdGhpcy51dGlsLmdldE5vZGVQYXRoKG5vZGVQYXRoLnNsLCBvcmlnaW5MaXN0KSA6IG51bGw7XG4gICAgICAgICAgICBub2RlUGF0aC5lID0gdGhpcy51dGlsLmdldE5vZGVQYXRoKGlubmVyTGlzdC5sYXN0RWxlbWVudENoaWxkLmZpcnN0Q2hpbGQsIG9yaWdpbkxpc3QsIG51bGwpO1xuICAgICAgICAgICAgbm9kZVBhdGguZWwgPSBvcmlnaW5MaXN0O1xuXG4gICAgICAgICAgICB0aGlzLnV0aWwubWVyZ2VTYW1lVGFncyhvcmlnaW5MaXN0LCBbbm9kZVBhdGgucywgbm9kZVBhdGguZSwgc2xQYXRoXSwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy51dGlsLm1lcmdlTmVzdGVkVGFncyhvcmlnaW5MaXN0KTtcbiAgICAgICAgICAgIGlmIChzbFBhdGgpIG5vZGVQYXRoLnNsID0gdGhpcy51dGlsLmdldE5vZGVGcm9tUGF0aChzbFBhdGgsIG9yaWdpbkxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlubmVyTGlzdDtcbiAgICB9LFxuXG4gICAgcGlja3VwOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICBsZXQgY29tbWFuZCA9ICcnO1xuXG4gICAgICAgIHdoaWxlICghY29tbWFuZCAmJiAhL15VTCQvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xuICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucGx1Z2lucy5saXN0LmVkaXRMaXN0LmNhbGwodGhpcywgY29tbWFuZCwgbnVsbCwgZmFsc2UpO1xuICAgICAgICBpZiAocmFuZ2UpIHRoaXMuc2V0UmFuZ2UocmFuZ2Uuc2MsIHJhbmdlLnNvLCByYW5nZS5lYywgcmFuZ2UuZW8pO1xuXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xuICAgIH1cbn07XG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3RhYmxlJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGxldCBjb250ZXh0VGFibGUgPSBjb250ZXh0LnRhYmxlID0ge1xyXG4gICAgICAgICAgICBfZWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX3RkRWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX3RyRWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX3RyRWxlbWVudHM6IG51bGwsXHJcbiAgICAgICAgICAgIF90YWJsZVhZOiBbXSxcclxuICAgICAgICAgICAgX21heFdpZHRoOiB0cnVlLFxyXG4gICAgICAgICAgICBfZml4ZWRDb2x1bW46IGZhbHNlLFxyXG4gICAgICAgICAgICBfcnRsOiBjb3JlLm9wdGlvbnMucnRsLFxyXG4gICAgICAgICAgICBjZWxsQ29udHJvbGxlclRvcDogY29yZS5vcHRpb25zLnRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiA9PT0gJ3RvcCcsXHJcbiAgICAgICAgICAgIHJlc2l6ZVRleHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGhlYWRlckJ1dHRvbjogbnVsbCxcclxuICAgICAgICAgICAgbWVyZ2VCdXR0b246IG51bGwsXHJcbiAgICAgICAgICAgIHNwbGl0QnV0dG9uOiBudWxsLFxyXG4gICAgICAgICAgICBzcGxpdE1lbnU6IG51bGwsXHJcbiAgICAgICAgICAgIG1heFRleHQ6IGNvcmUubGFuZy5jb250cm9sbGVyLm1heFNpemUsXHJcbiAgICAgICAgICAgIG1pblRleHQ6IGNvcmUubGFuZy5jb250cm9sbGVyLm1pblNpemUsXHJcbiAgICAgICAgICAgIF9waHlzaWNhbF9jZWxsQ250OiAwLFxyXG4gICAgICAgICAgICBfbG9naWNhbF9jZWxsQ250OiAwLFxyXG4gICAgICAgICAgICBfcm93Q250OiAwLFxyXG4gICAgICAgICAgICBfcm93SW5kZXg6IDAsXHJcbiAgICAgICAgICAgIF9waHlzaWNhbF9jZWxsSW5kZXg6IDAsXHJcbiAgICAgICAgICAgIF9sb2dpY2FsX2NlbGxJbmRleDogMCxcclxuICAgICAgICAgICAgX2N1cnJlbnRfY29sU3BhbjogMCxcclxuICAgICAgICAgICAgX2N1cnJlbnRfcm93U3BhbjogMCxcclxuICAgICAgICAgICAgaWNvbnM6IHtcclxuICAgICAgICAgICAgICAgIGV4cGFuc2lvbjogY29yZS5pY29ucy5leHBhbnNpb24sXHJcbiAgICAgICAgICAgICAgICByZWR1Y3Rpb246IGNvcmUuaWNvbnMucmVkdWN0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuICAgICAgICBsZXQgdGFibGVQaWNrZXIgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1jb250cm9sbGVyLXRhYmxlLXBpY2tlcicpO1xyXG5cclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVIaWdobGlnaHQgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS10YWJsZS1zaXplLWhpZ2hsaWdodGVkJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlVW5IaWdobGlnaHQgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS10YWJsZS1zaXplLXVuaGlnaGxpZ2h0ZWQnKTtcclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVEaXNwbGF5ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuc2UtdGFibGUtc2l6ZS1kaXNwbGF5Jyk7XHJcbiAgICAgICAgaWYgKGNvcmUub3B0aW9ucy5ydGwpIGNvbnRleHRUYWJsZS50YWJsZUhpZ2hsaWdodC5zdHlsZS5sZWZ0ID0gKDEwICogMTggLSAxMykgKyAncHgnO1xyXG5cclxuICAgICAgICAvKiogc2V0IHRhYmxlIGNvbnRyb2xsZXIgKi9cclxuICAgICAgICBsZXQgdGFibGVDb250cm9sbGVyID0gdGhpcy5zZXRDb250cm9sbGVyX3RhYmxlKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS50YWJsZUNvbnRyb2xsZXIgPSB0YWJsZUNvbnRyb2xsZXI7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnJlc2l6ZUJ1dHRvbiA9IHRhYmxlQ29udHJvbGxlci5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYmxlX3Jlc2l6ZScpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5yZXNpemVUZXh0ID0gdGFibGVDb250cm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfcmVzaXplID4gc3BhbiA+IHNwYW4nKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24gPSB0YWJsZUNvbnRyb2xsZXIucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9maXhlZF9jb2x1bW4nKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuaGVhZGVyQnV0dG9uID0gdGFibGVDb250cm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfaGVhZGVyJyk7XHJcblxyXG4gICAgICAgIC8qKiBzZXQgcmVzaXppbmcgKi9cclxuICAgICAgICBsZXQgcmVzaXplRGl2ID0gdGhpcy5zZXRDb250cm9sbGVyX3RhYmxlRWRpdG9yKGNvcmUsIGNvbnRleHRUYWJsZS5jZWxsQ29udHJvbGxlclRvcCk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnJlc2l6ZURpdiA9IHJlc2l6ZURpdjtcclxuICAgICAgICBjb250ZXh0VGFibGUuc3BsaXRNZW51ID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1idG4tZ3JvdXAtc3ViJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLm1lcmdlQnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfbWVyZ2VfYnV0dG9uJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnNwbGl0QnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfc3BsaXRfYnV0dG9uJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0Fib3ZlQnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfaW5zZXJ0X3Jvd19hJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0JlbG93QnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfaW5zZXJ0X3Jvd19iJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICB0YWJsZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlX3RhYmxlUGlja2VyLmJpbmQoY29yZSwgY29udGV4dFRhYmxlKSk7XHJcbiAgICAgICAgdGFibGVQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmFwcGVuZFRhYmxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIHJlc2l6ZURpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja190YWJsZUNvbnRyb2xsZXIuYmluZChjb3JlKSk7XHJcbiAgICAgICAgdGFibGVDb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX3RhYmxlQ29udHJvbGxlci5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgY29udHJvbGxlciAqL1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZChyZXNpemVEaXYpO1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZCh0YWJsZUNvbnRyb2xsZXIpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGwsIHRhYmxlUGlja2VyID0gbnVsbCwgcmVzaXplRGl2ID0gbnVsbCwgdGFibGVDb250cm9sbGVyID0gbnVsbCwgY29udGV4dFRhYmxlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2Utc2VsZWN0b3ItdGFibGUnO1xyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXRhYmxlLXNpemVcIj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtdGFibGUtc2l6ZS1waWNrZXIgc2UtY29udHJvbGxlci10YWJsZS1waWNrZXJcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtdGFibGUtc2l6ZS1oaWdobGlnaHRlZFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS10YWJsZS1zaXplLXVuaGlnaGxpZ2h0ZWRcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXRhYmxlLXNpemUtZGlzcGxheVwiPjEgeCAxPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldENvbnRyb2xsZXJfdGFibGU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgdGFibGVSZXNpemUgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIHRhYmxlUmVzaXplLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItdGFibGUnO1xyXG4gICAgICAgIHRhYmxlUmVzaXplLmlubmVySFRNTCA9ICcnICtcclxuICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyZXNpemVcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9yZXNpemVcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZXhwYW5zaW9uICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5tYXhTaXplICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJsYXlvdXRcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9maXhlZF9jb2x1bW5cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZml4ZWRfY29sdW1uX3dpZHRoICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5maXhlZENvbHVtbldpZHRoICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJoZWFkZXJcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMudGFibGVfaGVhZGVyICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci50YWJsZUhlYWRlciArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwicmVtb3ZlXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZVJlc2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbGxlcl90YWJsZUVkaXRvcjogZnVuY3Rpb24gKGNvcmUsIGNlbGxDb250cm9sbGVyVG9wKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgdGFibGVSZXNpemUgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIHRhYmxlUmVzaXplLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItdGFibGUtY2VsbCc7XHJcbiAgICAgICAgdGFibGVSZXNpemUuaW5uZXJIVE1MID0gKGNlbGxDb250cm9sbGVyVG9wID8gJycgOiAnPGRpdiBjbGFzcz1cInNlLWFycm93IHNlLWFycm93LXVwXCI+PC9kaXY+JykgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJyb3dcIiBkYXRhLW9wdGlvbj1cInVwXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2VfdGFibGVfaW5zZXJ0X3Jvd19hXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuaW5zZXJ0X3Jvd19hYm92ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5pbnNlcnRSb3dBYm92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJyb3dcIiBkYXRhLW9wdGlvbj1cImRvd25cIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9pbnNlcnRfcm93X2JcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5pbnNlcnRfcm93X2JlbG93ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmluc2VydFJvd0JlbG93ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZGVsZXRlXCIgZGF0YS12YWx1ZT1cInJvd1wiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGVfcm93ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmRlbGV0ZVJvdyArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cIm1lcmdlXCIgY2xhc3M9XCJfc2VfdGFibGVfbWVyZ2VfYnV0dG9uIHNlLWJ0biBzZS10b29sdGlwXCIgZGlzYWJsZWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMubWVyZ2VfY2VsbCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5tZXJnZUNlbGxzICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXBcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAwO1wiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJjZWxsXCIgZGF0YS1vcHRpb249XCJsZWZ0XCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLmluc2VydF9jb2x1bW5fbGVmdCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5pbnNlcnRDb2x1bW5CZWZvcmUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJpbnNlcnRcIiBkYXRhLXZhbHVlPVwiY2VsbFwiIGRhdGEtb3B0aW9uPVwicmlnaHRcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuaW5zZXJ0X2NvbHVtbl9yaWdodCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5pbnNlcnRDb2x1bW5BZnRlciArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImRlbGV0ZVwiIGRhdGEtdmFsdWU9XCJjZWxsXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLmRlbGV0ZV9jb2x1bW4gK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZGVsZXRlQ29sdW1uICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwib25zcGxpdFwiIGNsYXNzPVwiX3NlX3RhYmxlX3NwbGl0X2J1dHRvbiBzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLnNwbGl0X2NlbGwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuc3BsaXRDZWxscyArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXAtc3ViIHN1bi1lZGl0b3ItY29tbW9uIHNlLWxpc3QtbGF5ZXIgc2UtdGFibGUtc3BsaXRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtY29tbWFuZD1cInNwbGl0XCIgZGF0YS12YWx1ZT1cInZlcnRpY2FsXCIgc3R5bGU9XCJsaW5lLWhlaWdodDozMnB4O1wiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5WZXJ0aWNhbFNwbGl0ICsgJ1wiPicgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nLmNvbnRyb2xsZXIuVmVydGljYWxTcGxpdCArICc8L2xpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsaSBjbGFzcz1cInNlLWJ0bi1saXN0XCIgZGF0YS1jb21tYW5kPVwic3BsaXRcIiBkYXRhLXZhbHVlPVwiaG9yaXpvbnRhbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6MzJweDtcIiB0aXRsZT1cIicgKyBsYW5nLmNvbnRyb2xsZXIuSG9yaXpvbnRhbFNwbGl0ICsgJ1wiPicgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nLmNvbnRyb2xsZXIuSG9yaXpvbnRhbFNwbGl0ICsgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L3VsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZVJlc2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgYXBwZW5kVGFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBvVGFibGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnVEFCTEUnKTtcclxuICAgICAgICBjb25zdCBjcmVhdGVDZWxscyA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscztcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuY29udGV4dC50YWJsZS5fdGFibGVYWVswXTtcclxuICAgICAgICBsZXQgeSA9IHRoaXMuY29udGV4dC50YWJsZS5fdGFibGVYWVsxXTtcclxuICAgICAgICBsZXQgdGFibGVIVE1MID0gJzx0Ym9keT4nO1xyXG4gICAgICAgIHdoaWxlICh5ID4gMCkge1xyXG4gICAgICAgICAgICB0YWJsZUhUTUwgKz0gJzx0cj4nICsgY3JlYXRlQ2VsbHMuY2FsbCh0aGlzLCAndGQnLCB4KSArICc8L3RyPic7XHJcbiAgICAgICAgICAgIC0teTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGFibGVIVE1MICs9ICc8L3Rib2R5Pic7XHJcbiAgICAgICAgb1RhYmxlLmlubmVySFRNTCA9IHRhYmxlSFRNTDtcclxuXHJcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuaW5zZXJ0Q29tcG9uZW50KG9UYWJsZSwgZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFRkID0gb1RhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RkIGRpdicpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKGZpcnN0VGQsIDAsIGZpcnN0VGQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUucmVzZXRfdGFibGVfcGlja2VyLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVDZWxsczogZnVuY3Rpb24gKG5vZGVOYW1lLCBjbnQsIHJldHVybkVsZW1lbnQpIHtcclxuICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmICghcmV0dXJuRWxlbWVudCkge1xyXG4gICAgICAgICAgICBsZXQgY2VsbHNIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIHdoaWxlIChjbnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxsc0hUTUwgKz0gJzwnICtub2RlTmFtZSArICc+PGRpdj48YnI+PC9kaXY+PC8nICsgbm9kZU5hbWUgKyAnPic7XHJcbiAgICAgICAgICAgICAgICBjbnQtLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2VsbHNIVE1MO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7XHJcbiAgICAgICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJzxkaXY+PGJyPjwvZGl2Pic7XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgb25Nb3VzZU1vdmVfdGFibGVQaWNrZXI6IGZ1bmN0aW9uIChjb250ZXh0VGFibGUsIGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IHRoaXMuX3cuTWF0aC5jZWlsKGUub2Zmc2V0WCAvIDE4KTtcclxuICAgICAgICBsZXQgeSA9IHRoaXMuX3cuTWF0aC5jZWlsKGUub2Zmc2V0WSAvIDE4KTtcclxuICAgICAgICB4ID0geCA8IDEgPyAxIDogeDtcclxuICAgICAgICB5ID0geSA8IDEgPyAxIDogeTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dFRhYmxlLl9ydGwpIHtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLmxlZnQgPSAoeCAqIDE4IC0gMTMpICsgJ3B4JztcclxuICAgICAgICAgICAgeCA9IDExIC0geDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLndpZHRoID0geCArICdlbSc7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLmhlaWdodCA9IHkgKyAnZW0nO1xyXG5cclxuICAgICAgICAvLyBsZXQgeF91ID0geCA8IDUgPyA1IDogKHggPiA5ID8gMTAgOiB4ICsgMSk7XHJcbiAgICAgICAgLy8gbGV0IHlfdSA9IHkgPCA1ID8gNSA6ICh5ID4gOSA/IDEwIDogeSArIDEpO1xyXG4gICAgICAgIC8vIGNvbnRleHRUYWJsZS50YWJsZVVuSGlnaGxpZ2h0LnN0eWxlLndpZHRoID0geF91ICsgJ2VtJztcclxuICAgICAgICAvLyBjb250ZXh0VGFibGUudGFibGVVbkhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSB5X3UgKyAnZW0nO1xyXG5cclxuICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KGNvbnRleHRUYWJsZS50YWJsZURpc3BsYXksIHggKyAnIHggJyArIHkpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fdGFibGVYWSA9IFt4LCB5XTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzZXRfdGFibGVfcGlja2VyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQudGFibGUudGFibGVIaWdobGlnaHQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gdGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlO1xyXG4gICAgICAgIGNvbnN0IHVuSGlnaGxpZ2h0ID0gdGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlVW5IaWdobGlnaHQuc3R5bGU7XHJcblxyXG4gICAgICAgIGhpZ2hsaWdodC53aWR0aCA9ICcxZW0nO1xyXG4gICAgICAgIGhpZ2hsaWdodC5oZWlnaHQgPSAnMWVtJztcclxuICAgICAgICB1bkhpZ2hsaWdodC53aWR0aCA9ICcxMGVtJztcclxuICAgICAgICB1bkhpZ2hsaWdodC5oZWlnaHQgPSAnMTBlbSc7XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlRGlzcGxheSwgJzEgeCAxJyk7XHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9yZW1vdmVFdmVudHMuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGVkQ2VsbHNbaV0sICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl90b2dnbGVFZGl0b3IuY2FsbCh0aGlzLCB0cnVlKTtcclxuXHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9lbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3RkRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl90ckVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cyA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl90YWJsZVhZID0gW107XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9tYXhXaWR0aCA9IHRydWU7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9maXhlZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbENudCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxDbnQgPSAwO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fcm93Q250ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3Jvd0luZGV4ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3BoeXNpY2FsX2NlbGxJbmRleCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9jdXJyZW50X2NvbFNwYW4gPSAwO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fY3VycmVudF9yb3dTcGFuID0gMDtcclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NoaWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbHMgPSBudWxsO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlID0gbnVsbDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fcmVmID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbE5hbWUgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogdGFibGUgZWRpdCBjb250cm9sbGVyICovXHJcbiAgICBjYWxsX2NvbnRyb2xsZXJfdGFibGVFZGl0OiBmdW5jdGlvbiAodGRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQgJiYgIXRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGRFbGVtZW50LCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQgfHwgdGhpcy5wbHVnaW5zLnRhYmxlLl9zZWxlY3RlZFRhYmxlIHx8IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRkRWxlbWVudCwgJ1RBQkxFJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9tYXhXaWR0aCA9IHRoaXMudXRpbC5oYXNDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1zaXplLTEwMCcpIHx8IHRhYmxlRWxlbWVudC5zdHlsZS53aWR0aCA9PT0gJzEwMCUnIHx8ICghdGFibGVFbGVtZW50LnN0eWxlLndpZHRoICYmICF0aGlzLnV0aWwuaGFzQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS1hdXRvJykpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fZml4ZWRDb2x1bW4gPSB0aGlzLnV0aWwuaGFzQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtbGF5b3V0LWZpeGVkJykgfHwgdGFibGVFbGVtZW50LnN0eWxlLnRhYmxlTGF5b3V0ID09PSAnZml4ZWQnO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldFRhYmxlU3R5bGUuY2FsbCh0aGlzLCBjb250ZXh0VGFibGUuX21heFdpZHRoID8gJ3dpZHRofGNvbHVtbicgOiAnd2lkdGgnKTtcclxuICAgICAgICBcclxuICAgICAgICB0YWJsZVBsdWdpbi5zZXRQb3NpdGlvbkNvbnRyb2xsZXJUb3AuY2FsbCh0aGlzLCB0YWJsZUVsZW1lbnQpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIHRkRWxlbWVudCwgdGFibGVQbHVnaW4uX3NoaWZ0KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXRhYmxlUGx1Z2luLl9zaGlmdCkgdGhpcy5jb250cm9sbGVyc09uKGNvbnRleHRUYWJsZS5yZXNpemVEaXYsIGNvbnRleHRUYWJsZS50YWJsZUNvbnRyb2xsZXIsIHRhYmxlUGx1Z2luLmluaXQuYmluZCh0aGlzKSwgdGRFbGVtZW50LCAndGFibGUnKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0UG9zaXRpb25Db250cm9sbGVyVG9wOiBmdW5jdGlvbiAodGFibGVFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sbGVyUG9zaXRpb24odGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlQ29udHJvbGxlciwgdGFibGVFbGVtZW50LCAndG9wJywge2xlZnQ6IDAsIHRvcDogMH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQb3NpdGlvbkNvbnRyb2xsZXJEaXY6IGZ1bmN0aW9uICh0ZEVsZW1lbnQsIHJlc2V0KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHJlc2l6ZURpdiA9IGNvbnRleHRUYWJsZS5yZXNpemVEaXY7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnRhYmxlLnNldENlbGxJbmZvLmNhbGwodGhpcywgdGRFbGVtZW50LCByZXNldCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvbnRleHRUYWJsZS5jZWxsQ29udHJvbGxlclRvcCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihyZXNpemVEaXYsIGNvbnRleHRUYWJsZS5fZWxlbWVudCwgJ3RvcCcsIHtsZWZ0OiBjb250ZXh0VGFibGUudGFibGVDb250cm9sbGVyLm9mZnNldFdpZHRoLCB0b3A6IDB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihyZXNpemVEaXYsIHRkRWxlbWVudCwgJ2JvdHRvbScsIHtsZWZ0OiAwLCB0b3A6IDB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldENlbGxJbmZvOiBmdW5jdGlvbiAodGRFbGVtZW50LCByZXNldCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB0YWJsZSA9IGNvbnRleHRUYWJsZS5fZWxlbWVudCA9IHRoaXMucGx1Z2lucy50YWJsZS5fc2VsZWN0ZWRUYWJsZSB8fCB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0ZEVsZW1lbnQsICdUQUJMRScpO1xyXG5cclxuICAgICAgICBpZiAoL1RIRUFEL2kudGVzdCh0YWJsZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHRUYWJsZS5oZWFkZXJCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dFRhYmxlLmhlYWRlckJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc2V0IHx8IGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbENudCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dFRhYmxlLl90ZEVsZW1lbnQgIT09IHRkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLl90ZEVsZW1lbnQgPSB0ZEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX3RyRWxlbWVudCA9IHRkRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByb3dzID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnRzID0gdGFibGUucm93cztcclxuICAgICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gdGRFbGVtZW50LmNlbGxJbmRleDtcclxuXHJcbiAgICAgICAgICAgIGxldCBjZWxsQ250ID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNlbGxzID0gcm93c1swXS5jZWxscywgbGVuID0gcm93c1swXS5jZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2VsbENudCArPSBjZWxsc1tpXS5jb2xTcGFuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyByb3cgY250LCByb3cgaW5kZXhcclxuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBjb250ZXh0VGFibGUuX3Jvd0luZGV4ID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnQucm93SW5kZXg7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fcm93Q250ID0gcm93cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAvLyBjZWxsIGNudCwgcGh5c2ljYWwgY2VsbCBpbmRleFxyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuX3BoeXNpY2FsX2NlbGxDbnQgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudC5jZWxscy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsQ250ID0gY2VsbENudDtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLl9waHlzaWNhbF9jZWxsSW5kZXggPSBjZWxsSW5kZXg7XHJcblxyXG4gICAgICAgICAgICAvLyBzcGFuXHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fY3VycmVudF9jb2xTcGFuID0gY29udGV4dFRhYmxlLl90ZEVsZW1lbnQuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fY3VycmVudF9yb3dTcGFuIC0gY29udGV4dFRhYmxlLl90ckVsZW1lbnQuY2VsbHNbY2VsbEluZGV4XS5yb3dTcGFuIC0gMTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZpbmQgbG9nY2FsIGNlbGwgaW5kZXhcclxuICAgICAgICAgICAgbGV0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgbGV0IHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbHMsIGNvbFNwYW47IGkgPD0gcm93SW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgY29sU3BhbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGxzLmxlbmd0aCwgY2VsbCwgY3MsIHJzLCBsb2djYWxJbmRleDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICBjcyA9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcnMgPSBjZWxsLnJvd1NwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ID0gYyArIGNvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMCwgYXJyOyByIDwgc3BhbkluZGV4Lmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJvdyA+IGkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2NhbEluZGV4ID49IGFyci5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBjTGVuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBsb2djYWwgY2VsbCBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSByb3dJbmRleCAmJiBjID09PSBjZWxsSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleCA9IGxvZ2NhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBsb2djYWxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzOiBjcyArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByczogcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGNzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNwYW5JbmRleCA9IHNwYW5JbmRleC5jb25jYXQocm93U3BhbkFycikuc29ydChmdW5jdGlvbiAoYSwgYikge3JldHVybiBhLmluZGV4IC0gYi5pbmRleDt9KTtcclxuICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcm93U3BhbkFyciA9IG51bGw7XHJcbiAgICAgICAgICAgIHNwYW5JbmRleCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0VGFibGU6IGZ1bmN0aW9uICh0eXBlLCBvcHRpb24pIHtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFibGUgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaXNSb3cgPSB0eXBlID09PSAncm93JztcclxuXHJcbiAgICAgICAgaWYgKGlzUm93KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQXR0ciA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmICgvXlRIRUFEJC9pLnRlc3QodGFibGVBdHRyLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gJ3VwJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRhYmxlQXR0ci5uZXh0RWxlbWVudFNpYmxpbmcgfHwgIS9eVEJPRFkkL2kudGVzdCh0YWJsZUF0dHIubmV4dEVsZW1lbnRTaWJsaW5nLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmlubmVySFRNTCArPSAnPHRib2R5Pjx0cj4nICsgdGFibGVQbHVnaW4uY3JlYXRlQ2VsbHMuY2FsbCh0aGlzLCAndGQnLCBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbENudCwgZmFsc2UpICsgJzwvdHI+PC90Ym9keT4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbXVsdGlcclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX3JlZikge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbkNlbGwgPSBjb250ZXh0VGFibGUuX3RkRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGxzO1xyXG4gICAgICAgICAgICAvLyBtdWx0aSAtIHJvd1xyXG4gICAgICAgICAgICBpZiAoaXNSb3cpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSByb3dcclxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyA9IHNlbGVjdGVkQ2VsbHNbMF0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDZWxscyA9IFtzZWxlY3RlZENlbGxzWzBdXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoLCBjZWxsOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IHNlbGVjdGVkQ2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgIT09IGNlbGwucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2VsbHMucHVzaChjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGNlbGwucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlbW92ZUNlbGxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldENlbGxJbmZvLmNhbGwodGhpcywgcmVtb3ZlQ2VsbHNbaV0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5lZGl0Um93LmNhbGwodGhpcywgb3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBlZGl0IHJvd1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldENlbGxJbmZvLmNhbGwodGhpcywgb3B0aW9uID09PSAndXAnID8gc2VsZWN0ZWRDZWxsc1swXSA6IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uZWRpdFJvdy5jYWxsKHRoaXMsIG9wdGlvbiwgcG9zaXRpb25DZWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbXVsdGkgLSBjZWxsXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHNlbGVjdGVkQ2VsbHNbMF0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjZWxsXHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNlbGxzID0gW3NlbGVjdGVkQ2VsbHNbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxLCBsZW4gPSBzZWxlY3RlZENlbGxzLmxlbmd0aCwgY2VsbDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBzZWxlY3RlZENlbGxzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RSb3cgPT09IGNlbGwucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2VsbHMucHVzaChjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVtb3ZlQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0Q2VsbEluZm8uY2FsbCh0aGlzLCByZW1vdmVDZWxsc1tpXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLmVkaXRDZWxsLmNhbGwodGhpcywgb3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBlZGl0IGNlbGxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmlnaHRDZWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFJvdyAhPT0gc2VsZWN0ZWRDZWxsc1tpICsgMV0ucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRDZWxsID0gc2VsZWN0ZWRDZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRDZWxsSW5mby5jYWxsKHRoaXMsIG9wdGlvbiA9PT0gJ2xlZnQnID8gc2VsZWN0ZWRDZWxsc1swXSA6IHJpZ2h0Q2VsbCB8fCBzZWxlY3RlZENlbGxzWzBdLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5lZGl0Q2VsbC5jYWxsKHRoaXMsIG9wdGlvbiwgcG9zaXRpb25DZWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRpb24pIHRhYmxlUGx1Z2luLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9IC8vIG9uZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbltpc1JvdyA/ICdlZGl0Um93JyA6ICdlZGl0Q2VsbCddLmNhbGwodGhpcywgb3B0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFmdGVyIHJlbW92ZVxyXG4gICAgICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGFibGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGFibGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB0aGlzLnV0aWwucmVtb3ZlSXRlbSh0YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0Um93OiBmdW5jdGlvbiAob3B0aW9uLCBwb3NpdGlvblJlc2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCByZW1vdmUgPSAhb3B0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCB1cCA9IG9wdGlvbiA9PT0gJ3VwJztcclxuICAgICAgICBjb25zdCBvcmlnaW5Sb3dJbmRleCA9IGNvbnRleHRUYWJsZS5fcm93SW5kZXg7XHJcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByZW1vdmUgfHwgdXAgPyBvcmlnaW5Sb3dJbmRleCA6IG9yaWdpblJvd0luZGV4ICsgY29udGV4dFRhYmxlLl9jdXJyZW50X3Jvd1NwYW4gKyAxO1xyXG4gICAgICAgIGNvbnN0IHNpZ24gPSByZW1vdmUgPyAtMSA6IDE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgcm93cyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cztcclxuICAgICAgICBsZXQgY2VsbENudCA9IGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsQ250O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb3JpZ2luUm93SW5kZXggKyAocmVtb3ZlID8gLTEgOiAwKSwgY2VsbDsgaSA8PSBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjZWxsID0gcm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgaWYgKGNlbGwubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGwubGVuZ3RoLCBycywgY3M7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHJzID0gY2VsbFtjXS5yb3dTcGFuO1xyXG4gICAgICAgICAgICAgICAgY3MgPSBjZWxsW2NdLmNvbFNwYW47XHJcbiAgICAgICAgICAgICAgICBpZiAocnMgPCAyICYmIGNzIDwgMikgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJzICsgaSA+IHJvd0luZGV4ICYmIHJvd0luZGV4ID4gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxbY10ucm93U3BhbiA9IHJzICsgc2lnbjtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsQ250IC09IGNzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSByb3dzW29yaWdpblJvd0luZGV4ICsgMV07XHJcbiAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuQ2VsbHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBjZWxscyA9IHJvd3Nbb3JpZ2luUm93SW5kZXhdLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGxvZ2NhbEluZGV4OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsID0gY2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBpICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGNlbGwuY29sU3BhbiAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLnJvd1NwYW4gPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucm93U3BhbiAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuQ2VsbHMucHVzaCh7Y2VsbDogY2VsbC5jbG9uZU5vZGUoZmFsc2UpLCBpbmRleDogbG9nY2FsSW5kZXh9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNwYW5DZWxscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwYW5DZWxsID0gc3BhbkNlbGxzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSBuZXh0LmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBsb2djYWxJbmRleDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBpICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA+PSBzcGFuQ2VsbC5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tLCBjb2xTcGFuLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IHNwYW5DZWxsLmNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lmluc2VydEJlZm9yZShzcGFuQ2VsbC5jZWxsLCBjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5DZWxsID0gc3BhbkNlbGxzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwYW5DZWxsKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5DZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kQ2hpbGQoc3BhbkNlbGwuY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzcGFuQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kQ2hpbGQoc3BhbkNlbGxzW2ldLmNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuX2VsZW1lbnQuZGVsZXRlUm93KHJvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQuaW5zZXJ0Um93KHJvd0luZGV4KTtcclxuICAgICAgICAgICAgbmV3Um93LmlubmVySFRNTCA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsICd0ZCcsIGNlbGxDbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5zZXRQb3NpdGlvbkNvbnRyb2xsZXJEaXYuY2FsbCh0aGlzLCBwb3NpdGlvblJlc2V0RWxlbWVudCB8fCBjb250ZXh0VGFibGUuX3RkRWxlbWVudCwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZWRpdENlbGw6IGZ1bmN0aW9uIChvcHRpb24sIHBvc2l0aW9uUmVzZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gIW9wdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgbGVmdCA9IG9wdGlvbiA9PT0gJ2xlZnQnO1xyXG4gICAgICAgIGNvbnN0IGNvbFNwYW4gPSBjb250ZXh0VGFibGUuX2N1cnJlbnRfY29sU3BhbjtcclxuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByZW1vdmUgfHwgbGVmdCA/IGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsSW5kZXggOiBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbEluZGV4ICsgY29sU3BhbiArIDE7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHM7XHJcbiAgICAgICAgbGV0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICBsZXQgc3BhbkluZGV4ID0gW107XHJcbiAgICAgICAgbGV0IHBhc3NDZWxsID0gMDtcclxuICAgICAgICBjb25zdCByZW1vdmVDZWxsID0gW107XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlU3BhbkFyciA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29udGV4dFRhYmxlLl9yb3dDbnQsIHJvdywgaW5zZXJ0SW5kZXgsIGNlbGxzLCBuZXdDZWxsLCBhcHBseVNwYW4sIGNlbGxDb2xTcGFuOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgcm93ID0gcm93c1tpXTtcclxuICAgICAgICAgICAgaW5zZXJ0SW5kZXggPSBjZWxsSW5kZXg7XHJcbiAgICAgICAgICAgIGFwcGx5U3BhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjZWxscyA9IHJvdy5jZWxscztcclxuICAgICAgICAgICAgY2VsbENvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNlbGwsIGNMZW4gPSBjZWxscy5sZW5ndGgsIHJzLCBjcywgcmVtb3ZlSW5kZXg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgIGlmICghY2VsbCkgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgcnMgPSBjZWxsLnJvd1NwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgY3MgPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj0gaW5zZXJ0SW5kZXgpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjcyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3NDZWxsIDwgMSAmJiBjcyArIGMgPj0gaW5zZXJ0SW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sU3BhbiArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc0NlbGwgPSBycyArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggLT0gY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFwcGx5U3Bhbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMCwgYXJyOyByIDwgc3BhbkluZGV4Lmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCAtPSBhcnIuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseVNwYW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5kZXggPSBjICsgY2VsbENvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2VsbCA9ICFjZWxsc1tjICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IHNwYW5JbmRleFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucm93ID4gaSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZUluZGV4ID49IGFyci5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDb2xTcGFuICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRleCA9IGMgKyBjZWxsQ29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByczogcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjczogY3MgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHJlbW92ZUluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAtMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVJbmRleCA+PSBpbnNlcnRJbmRleCAmJiByZW1vdmVJbmRleCArIGNzIDw9IGluc2VydEluZGV4ICsgY29sU3Bhbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDZWxsLnB1c2goY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZW1vdmVJbmRleCA8PSBpbnNlcnRJbmRleCArIGNvbFNwYW4gJiYgcmVtb3ZlSW5kZXggKyBjcyA+PSBpbnNlcnRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNvbFNwYW4gLT0gdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KGNlbGxJbmRleCwgY2VsbEluZGV4ICsgY29sU3BhbiwgcmVtb3ZlSW5kZXgsIHJlbW92ZUluZGV4ICsgY3MpOyBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJzID4gMCAmJiAocmVtb3ZlSW5kZXggPCBpbnNlcnRJbmRleCB8fCByZW1vdmVJbmRleCArIGNzID4gaW5zZXJ0SW5kZXggKyBjb2xTcGFuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbDogY2VsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByczogaSArIHJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbENvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNwYW5JbmRleCA9IHNwYW5JbmRleC5jb25jYXQocm93U3BhbkFycikuc29ydChmdW5jdGlvbiAoYSwgYikge3JldHVybiBhLmluZGV4IC0gYi5pbmRleDt9KTtcclxuICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXNzQ2VsbCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzQ2VsbCAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRJbmRleCAhPT0gbnVsbCAmJiBjZWxscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbCA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsIGNlbGxzWzBdLm5vZGVOYW1lLCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsID0gcm93Lmluc2VydEJlZm9yZShuZXdDZWxsLCBjZWxsc1tpbnNlcnRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIGxldCByZW1vdmVGaXJzdCwgcmVtb3ZlRW5kO1xyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMCwgckxlbiA9IHJlbW92ZUNlbGwubGVuZ3RoLCByb3c7IHIgPCByTGVuOyByKyspIHtcclxuICAgICAgICAgICAgICAgIHJvdyA9IHJlbW92ZUNlbGxbcl0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVDZWxsW3JdKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb3cuY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1vdmVGaXJzdCkgcmVtb3ZlRmlyc3QgPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbmQgPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocm93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSByZW1vdmVTcGFuQXJyLmxlbmd0aCwgcm93U3BhbkNlbGw7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHJvd1NwYW5DZWxsID0gcmVtb3ZlU3BhbkFycltjXTtcclxuICAgICAgICAgICAgICAgIHJvd1NwYW5DZWxsLmNlbGwucm93U3BhbiA9IHV0aWwuZ2V0T3ZlcmxhcFJhbmdlQXRJbmRleChyZW1vdmVGaXJzdCwgcmVtb3ZlRW5kLCByb3dTcGFuQ2VsbC5pLCByb3dTcGFuQ2VsbC5ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgcG9zaXRpb25SZXNldEVsZW1lbnQgfHwgY29udGV4dFRhYmxlLl90ZEVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2Nsb3NlU3BsaXRNZW51OiBudWxsLFxyXG4gICAgb3BlblNwbGl0TWVudTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0aGlzLmNvbnRleHQudGFibGUuc3BsaXRCdXR0b24sICdvbicpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC50YWJsZS5zcGxpdE1lbnUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtdGFibGUnO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuX2Nsb3NlU3BsaXRNZW51ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGhpcy5jb250ZXh0LnRhYmxlLnNwbGl0QnV0dG9uLCAnb24nKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnRhYmxlLnNwbGl0TWVudS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdjbGljaycsIHRoaXMucGx1Z2lucy50YWJsZS5fY2xvc2VTcGxpdE1lbnUpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuX2Nsb3NlU3BsaXRNZW51ID0gbnVsbDtcclxuICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLnRhYmxlLl9jbG9zZVNwbGl0TWVudSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNwbGl0Q2VsbHM6IGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsID0gZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q2VsbCA9IGNvbnRleHRUYWJsZS5fdGRFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHM7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFJvdyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleDtcclxuICAgICAgICBjb25zdCByb3dJbmRleCA9IGNvbnRleHRUYWJsZS5fcm93SW5kZXg7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsIGN1cnJlbnRDZWxsLm5vZGVOYW1lLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gdmVydGljYWxcclxuICAgICAgICBpZiAodmVydGljYWwpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbFNwYW4gPSBjdXJyZW50Q2VsbC5jb2xTcGFuO1xyXG4gICAgICAgICAgICBuZXdDZWxsLnJvd1NwYW4gPSBjdXJyZW50Q2VsbC5yb3dTcGFuO1xyXG5cclxuICAgICAgICAgICAgLy8gY29sc3BhbiA+IDFcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2xTcGFuID4gMSkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2VsbC5jb2xTcGFuID0gdGhpcy5fdy5NYXRoLmZsb29yKGN1cnJlbnRDb2xTcGFuLzIpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudENlbGwuY29sU3BhbiA9IGN1cnJlbnRDb2xTcGFuIC0gbmV3Q2VsbC5jb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFJvdy5pbnNlcnRCZWZvcmUobmV3Q2VsbCwgY3VycmVudENlbGwubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gY29sc3BhbiAtIDFcclxuICAgICAgICAgICAgICAgIGxldCByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BhbkluZGV4ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbnRleHRUYWJsZS5fcm93Q250LCBjZWxscywgY29sU3BhbjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBjcywgcnMsIGxvZ2NhbEluZGV4OyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ID0gYyArIGNvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BhbkluZGV4Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5yb3cgPiBpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPj0gYXJyLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2djYWxJbmRleCArPSBhcnIuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IGNMZW4gLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPD0gaW5kZXggJiYgcnMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBsb2djYWxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjczogY3MgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgIT09IGN1cnJlbnRDZWxsICYmIGxvZ2NhbEluZGV4IDw9IGluZGV4ICYmIGxvZ2NhbEluZGV4ICsgY3MgPj0gaW5kZXggKyBjdXJyZW50Q29sU3BhbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sU3BhbiArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA+IGluZGV4KSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXggPSBzcGFuSW5kZXguY29uY2F0KHJvd1NwYW5BcnIpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtyZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3cuaW5zZXJ0QmVmb3JlKG5ld0NlbGwsIGN1cnJlbnRDZWxsLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgeyAvLyBob3Jpem9udGFsXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3dTcGFuID0gY3VycmVudENlbGwucm93U3BhbjtcclxuICAgICAgICAgICAgbmV3Q2VsbC5jb2xTcGFuID0gY3VycmVudENlbGwuY29sU3BhbjtcclxuXHJcbiAgICAgICAgICAgIC8vIHJvd3NwYW4gPiAxXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93U3BhbiA+IDEpIHtcclxuICAgICAgICAgICAgICAgIG5ld0NlbGwucm93U3BhbiA9IHRoaXMuX3cuTWF0aC5mbG9vcihjdXJyZW50Um93U3Bhbi8yKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Jvd1NwYW4gPSBjdXJyZW50Um93U3BhbiAtIG5ld0NlbGwucm93U3BhbjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Um93SW5kZXggPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgY3VycmVudFJvdykgKyBuZXdSb3dTcGFuO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxscywgY29sU3BhbjsgaSA8IG5leHRSb3dJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBjcywgbG9nY2FsSW5kZXg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBjICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2NhbEluZGV4ID49IGluZGV4KSBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBjZWxsLnJvd1NwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3MgPiAwICYmIGNzICsgaSA+PSBuZXh0Um93SW5kZXggJiYgbG9nY2FsSW5kZXggPCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbG9nY2FsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3M6IGNlbGwuY29sU3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gcm93c1tuZXh0Um93SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENlbGxzID0gbmV4dFJvdy5jZWxscztcclxuICAgICAgICAgICAgICAgIGxldCBycyA9IHJvd1NwYW5BcnIuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IG5leHRDZWxscy5sZW5ndGgsIGNvbFNwYW4gPSAwLCBjZWxsLCBjcywgbG9nY2FsSW5kZXgsIGluc2VydEluZGV4OyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBjICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsID0gbmV4dENlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNzID0gY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCA9IGxvZ2NhbEluZGV4ICsgY3MgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMgJiYgaW5zZXJ0SW5kZXggPj0gcnMuaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBycy5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggKz0gcnMuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gcm93U3BhbkFyci5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0SW5kZXggPj0gaW5kZXggfHwgYyA9PT0gY0xlbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5pbnNlcnRCZWZvcmUobmV3Q2VsbCwgY2VsbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VycmVudENlbGwucm93U3BhbiA9IG5ld1Jvd1NwYW47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHJvd3NwYW4gLSAxXHJcbiAgICAgICAgICAgICAgICBuZXdDZWxsLnJvd1NwYW4gPSBjdXJyZW50Q2VsbC5yb3dTcGFuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gdXRpbC5jcmVhdGVFbGVtZW50KCdUUicpO1xyXG4gICAgICAgICAgICAgICAgbmV3Um93LmFwcGVuZENoaWxkKG5ld0NlbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxsczsgaSA8IHJvd0luZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGxzLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSArIGNlbGxzW2NdLnJvd1NwYW4gLSAxID49IHJvd0luZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsc1tjXS5yb3dTcGFuICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGh5c2ljYWxJbmRleCA9IGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBjdXJyZW50Um93LmNlbGxzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IHBoeXNpY2FsSW5kZXgpIGNvbnRpbnVlOyAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjZWxsc1tjXS5yb3dTcGFuICs9IDE7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld1JvdywgY3VycmVudFJvdy5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShjdXJyZW50Q2VsbCk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnRhYmxlLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIGN1cnJlbnRDZWxsLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgbWVyZ2VDZWxsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG5cclxuICAgICAgICBjb25zdCByZWYgPSB0YWJsZVBsdWdpbi5fcmVmO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxscztcclxuICAgICAgICBjb25zdCBtZXJnZUNlbGwgPSBzZWxlY3RlZENlbGxzWzBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBlbXB0eVJvd0ZpcnN0ID0gbnVsbDtcclxuICAgICAgICBsZXQgZW1wdHlSb3dMYXN0ID0gbnVsbDtcclxuICAgICAgICBsZXQgY3MgPSAocmVmLmNlIC0gcmVmLmNzKSArIDE7XHJcbiAgICAgICAgbGV0IHJzID0gKHJlZi5yZSAtIHJlZi5ycykgKyAxO1xyXG4gICAgICAgIGxldCBtZXJnZUhUTUwgPSAnJztcclxuICAgICAgICBsZXQgcm93ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoLCBjZWxsLCBjaDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNlbGwgPSBzZWxlY3RlZENlbGxzW2ldO1xyXG4gICAgICAgICAgICBpZiAocm93ICE9PSBjZWxsLnBhcmVudE5vZGUpIHJvdyA9IGNlbGwucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGNoID0gY2VsbC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjaC5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChjaFtjXSkgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY2hbY10udGV4dENvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNoW2NdKTtcclxuICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXJnZUhUTUwgKz0gY2VsbC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjZWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyb3cuY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5Um93Rmlyc3QpIGVtcHR5Um93Rmlyc3QgPSByb3c7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGVtcHR5Um93TGFzdCA9IHJvdztcclxuICAgICAgICAgICAgICAgIHJzIC09IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbXB0eVJvd0ZpcnN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4Rmlyc3QgPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgZW1wdHlSb3dGaXJzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4TGFzdCA9IHV0aWwuZ2V0QXJyYXlJbmRleChyb3dzLCBlbXB0eVJvd0xhc3QgfHwgZW1wdHlSb3dGaXJzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJvd3MgPSBbXTtcclxuICAgIFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbHM7IGkgPD0gcm93SW5kZXhMYXN0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNlbGxzID0gcm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgICAgIGlmIChjZWxscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSb3dzLnB1c2gocm93c1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCByczsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzID4gMCAmJiBpICsgcnMgPj0gcm93SW5kZXhGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnJvd1NwYW4gLT0gdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJvd0luZGV4Rmlyc3QsIHJvd0luZGV4TGFzdCwgaSwgaSArIHJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZW1vdmVSb3dzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmVtb3ZlUm93c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1lcmdlQ2VsbC5pbm5lckhUTUwgKz0gbWVyZ2VIVE1MO1xyXG4gICAgICAgIG1lcmdlQ2VsbC5jb2xTcGFuID0gY3M7XHJcbiAgICAgICAgbWVyZ2VDZWxsLnJvd1NwYW4gPSBycztcclxuXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldEFjdGl2ZUJ1dHRvbi5jYWxsKHRoaXMsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5jYWxsX2NvbnRyb2xsZXJfdGFibGVFZGl0LmNhbGwodGhpcywgbWVyZ2VDZWxsKTtcclxuXHJcbiAgICAgICAgdXRpbC5hZGRDbGFzcyhtZXJnZUNlbGwsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgdGhpcy5mb2N1c0VkZ2UobWVyZ2VDZWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgdG9nZ2xlSGVhZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcclxuICAgICAgICBjb25zdCBoZWFkZXJCdXR0b24gPSB0aGlzLmNvbnRleHQudGFibGUuaGVhZGVyQnV0dG9uO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHV0aWwuaGFzQ2xhc3MoaGVhZGVyQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmNvbnRleHQudGFibGUuX2VsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICghYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnVEhFQUQnKTtcclxuICAgICAgICAgICAgaGVhZGVyLmlubmVySFRNTCA9ICc8dHI+JyArIHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsICd0aCcsIHRoaXMuY29udGV4dC50YWJsZS5fbG9naWNhbF9jZWxsQ250LCBmYWxzZSkgKyAnPC90cj4nO1xyXG4gICAgICAgICAgICB0YWJsZS5pbnNlcnRCZWZvcmUoaGVhZGVyLCB0YWJsZS5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXRpbC50b2dnbGVDbGFzcyhoZWFkZXJCdXR0b24sICdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgaWYgKC9USC9pLnRlc3QodGhpcy5jb250ZXh0LnRhYmxlLl90ZEVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnRhYmxlLl90ZEVsZW1lbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRhYmxlU3R5bGU6IGZ1bmN0aW9uIChzdHlsZXMpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0gY29udGV4dFRhYmxlLl9lbGVtZW50O1xyXG4gICAgICAgIGxldCBpY29uLCBzcGFuLCBzaXplSWNvbiwgdGV4dDtcclxuXHJcbiAgICAgICAgaWYgKHN0eWxlcy5pbmRleE9mKCd3aWR0aCcpID4gLTEpIHtcclxuICAgICAgICAgICAgaWNvbiA9ICBjb250ZXh0VGFibGUucmVzaXplQnV0dG9uLmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICBzcGFuID0gY29udGV4dFRhYmxlLnJlc2l6ZVRleHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHRUYWJsZS5fbWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHNpemVJY29uID0gY29udGV4dFRhYmxlLmljb25zLmV4cGFuc2lvbjtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBjb250ZXh0VGFibGUubWF4VGV4dDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRUYWJsZS5jb2x1bW5GaXhlZEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLXNpemUtMTAwJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS1hdXRvJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzaXplSWNvbiA9IGNvbnRleHRUYWJsZS5pY29ucy5yZWR1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY29udGV4dFRhYmxlLm1pblRleHQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS1hdXRvJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS0xMDAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZUVsZW1lbnQoaWNvbiwgc2l6ZUljb24pO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHNwYW4sIHRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0eWxlcy5pbmRleE9mKCdjb2x1bW4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGV4dFRhYmxlLl9maXhlZENvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLWxheW91dC1maXhlZCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLWxheW91dC1hdXRvJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dFRhYmxlLmNvbHVtbkZpeGVkQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtbGF5b3V0LWF1dG8nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1sYXlvdXQtZml4ZWQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEFjdGl2ZUJ1dHRvbjogZnVuY3Rpb24gKGZpeGVkQ2VsbCwgc2VsZWN0ZWRDZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG5cclxuICAgICAgICBpZiAoL15USCQvaS50ZXN0KGZpeGVkQ2VsbC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0Fib3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0JlbG93QnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QWJvdmVCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QmVsb3dCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwgfHwgZml4ZWRDZWxsID09PSBzZWxlY3RlZENlbGwpIHtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLnNwbGl0QnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLm1lcmdlQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuc3BsaXRCdXR0b24uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUubWVyZ2VCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gbXVsdGkgc2VsZWN0ZVxyXG4gICAgX2JpbmRPblNlbGVjdDogbnVsbCxcclxuICAgIF9iaW5kT2ZmU2VsZWN0OiBudWxsLFxyXG4gICAgX2JpbmRPZmZTaGlmdDogbnVsbCxcclxuICAgIF9zZWxlY3RlZENlbGxzOiBudWxsLFxyXG4gICAgX3NoaWZ0OiBmYWxzZSxcclxuICAgIF9maXhlZENlbGw6IG51bGwsXHJcbiAgICBfZml4ZWRDZWxsTmFtZTogbnVsbCxcclxuICAgIF9zZWxlY3RlZENlbGw6IG51bGwsXHJcbiAgICBfc2VsZWN0ZWRUYWJsZTogbnVsbCxcclxuICAgIF9yZWY6IG51bGwsXHJcbiAgICBfdG9nZ2xlRWRpdG9yOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBlbmFibGVkKTtcclxuICAgICAgICBpZiAoZW5hYmxlZCkgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsICdzZS1kaXNhYmxlZCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy51dGlsLmFkZENsYXNzKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsICdzZS1kaXNhYmxlZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfb2ZmQ2VsbE11bHRpU2VsZWN0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIGlmICghdGFibGVQbHVnaW4uX3NoaWZ0KSB7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9yZW1vdmVFdmVudHMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX3RvZ2dsZUVkaXRvci5jYWxsKHRoaXMsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFibGVQbHVnaW4uX2luaXRCaW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRhYmxlUGx1Z2luLl9pbml0QmluZCk7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9pbml0QmluZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRhYmxlUGx1Z2luLl9maXhlZENlbGwgfHwgIXRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGFibGVQbHVnaW4uc2V0QWN0aXZlQnV0dG9uLmNhbGwodGhpcywgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCwgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCk7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uY2FsbF9jb250cm9sbGVyX3RhYmxlRWRpdC5jYWxsKHRoaXMsIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgfHwgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCk7XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGxzID0gdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUucXVlcnlTZWxlY3RvckFsbCgnLnNlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCAmJiB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsKSB0aGlzLmZvY3VzRWRnZSh0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCF0YWJsZVBsdWdpbi5fc2hpZnQpIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgPSBudWxsO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsTmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfb25DZWxsTXVsdGlTZWxlY3Q6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5fYW50aUJsdXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGUudGFyZ2V0LCB0aGlzLnV0aWwuaXNDZWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9zaGlmdCkge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsKSB0YWJsZVBsdWdpbi5fdG9nZ2xlRWRpdG9yLmNhbGwodGhpcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgdGFibGVQbHVnaW4uX3RvZ2dsZUVkaXRvci5jYWxsKHRoaXMsIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0YWJsZVBsdWdpbi5fcmVmKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IHRhYmxlUGx1Z2luLl9maXhlZENlbGwpIHJldHVybjtcclxuICAgICAgICAgICAgZWxzZSB0YWJsZVBsdWdpbi5fdG9nZ2xlRWRpdG9yLmNhbGwodGhpcywgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0ID09PSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsIHx8IHRhYmxlUGx1Z2luLl9maXhlZENlbGxOYW1lICE9PSB0YXJnZXQubm9kZU5hbWUgfHwgXHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlICE9PSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YXJnZXQsICdUQUJMRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgPSB0YXJnZXQ7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NldE11bHRpQ2VsbHMuY2FsbCh0aGlzLCB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsLCB0YXJnZXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TXVsdGlDZWxsczogZnVuY3Rpb24gKHN0YXJ0Q2VsbCwgZW5kQ2VsbCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5yb3dzO1xyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZENlbGxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3Moc2VsZWN0ZWRDZWxsc1tpXSwgJ3NlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGFydENlbGwgPT09IGVuZENlbGwpIHtcclxuICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhzdGFydENlbGwsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgIGlmICghdGFibGVQbHVnaW4uX3NoaWZ0KSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZmluZFNlbGVjdGVkQ2VsbCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgIGxldCByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgY29uc3QgcmVmID0gdGFibGVQbHVnaW4uX3JlZiA9IHtfaTogMCwgY3M6IG51bGwsIGNlOiBudWxsLCByczogbnVsbCwgcmU6IG51bGx9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcm93cy5sZW5ndGgsIGNlbGxzLCBjb2xTcGFuOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICBjb2xTcGFuID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBsb2djYWxJbmRleCwgY3MsIHJzOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxsID0gY2VsbHNbY107XHJcbiAgICAgICAgICAgICAgICBjcyA9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICBsb2djYWxJbmRleCA9IGMgKyBjb2xTcGFuO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyID0gc3BhbkluZGV4W3JdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJvdyA+IGkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPj0gYXJyLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJvdyA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBjTGVuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaW5kU2VsZWN0ZWRDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgPT09IHN0YXJ0Q2VsbCB8fCBjZWxsID09PSBlbmRDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jcyA9IHJlZi5jcyAhPT0gbnVsbCAmJiByZWYuY3MgPCBsb2djYWxJbmRleCA/IHJlZi5jcyA6IGxvZ2NhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY2UgPSByZWYuY2UgIT09IG51bGwgJiYgcmVmLmNlID4gbG9nY2FsSW5kZXggKyBjcyA/IHJlZi5jZSA6IGxvZ2NhbEluZGV4ICsgY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5ycyA9IHJlZi5ycyAhPT0gbnVsbCAmJiByZWYucnMgPCBpID8gcmVmLnJzIDogaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnJlID0gcmVmLnJlICE9PSBudWxsICYmIHJlZi5yZSA+IGkgKyBycyA/IHJlZi5yZSA6IGkgKyBycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLl9pICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYuX2kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluZFNlbGVjdGVkQ2VsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXggPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJlZi5jcywgcmVmLmNlLCBsb2djYWxJbmRleCwgbG9nY2FsSW5kZXggKyBjcykgJiYgdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJlZi5ycywgcmVmLnJlLCBpLCBpICsgcnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q3MgPSByZWYuY3MgPCBsb2djYWxJbmRleCA/IHJlZi5jcyA6IGxvZ2NhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlID0gcmVmLmNlID4gbG9nY2FsSW5kZXggKyBjcyA/IHJlZi5jZSA6IGxvZ2NhbEluZGV4ICsgY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UnMgPSByZWYucnMgPCBpID8gcmVmLnJzIDogaTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSZSA9IHJlZi5yZSA+IGkgKyBycyA/IHJlZi5yZSA6IGkgKyBycztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5jcyAhPT0gbmV3Q3MgfHwgcmVmLmNlICE9PSBuZXdDZSB8fCByZWYucnMgIT09IG5ld1JzIHx8IHJlZi5yZSAhPT0gbmV3UmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNzID0gbmV3Q3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jZSA9IG5ld0NlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucnMgPSBuZXdScztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnJlID0gbmV3UmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjZWxsLCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChycyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbG9nY2FsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzOiBjcyArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAtMVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3BhbkluZGV4ID0gc3BhbkluZGV4LmNvbmNhdChyb3dTcGFuQXJyKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7cmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O30pO1xyXG4gICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5faW5pdEJpbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGFibGVQbHVnaW4uX2luaXRCaW5kKTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2luaXRCaW5kID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QpO1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0KTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPblNlbGVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRhYmxlUGx1Z2luLl9iaW5kT2ZmU2VsZWN0KTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9iaW5kT2ZmU2hpZnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0YWJsZVBsdWdpbi5fYmluZE9mZlNoaWZ0KTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfaW5pdEJpbmQ6IG51bGwsXHJcbiAgICBvblRhYmxlQ2VsbE11bHRpU2VsZWN0OiBmdW5jdGlvbiAodGRFbGVtZW50LCBzaGlmdCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG5cclxuICAgICAgICB0YWJsZVBsdWdpbi5fcmVtb3ZlRXZlbnRzLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICB0YWJsZVBsdWdpbi5fc2hpZnQgPSBzaGlmdDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsID0gdGRFbGVtZW50O1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9maXhlZENlbGxOYW1lID0gdGRFbGVtZW50Lm5vZGVOYW1lO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGRFbGVtZW50LCAnVEFCTEUnKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGVkQ2VsbHNbaV0sICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGRFbGVtZW50LCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QgPSB0YWJsZVBsdWdpbi5fb25DZWxsTXVsdGlTZWxlY3QuYmluZCh0aGlzKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fYmluZE9mZlNlbGVjdCA9IHRhYmxlUGx1Z2luLl9vZmZDZWxsTXVsdGlTZWxlY3QuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKCFzaGlmdCkge1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0LCBmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPbih0aGlzLmNvbnRleHQudGFibGUucmVzaXplRGl2LCB0aGlzLmNvbnRleHQudGFibGUudGFibGVDb250cm9sbGVyLCB0aGlzLnBsdWdpbnMudGFibGUuaW5pdC5iaW5kKHRoaXMpLCB0ZEVsZW1lbnQsICd0YWJsZScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0YWJsZVBsdWdpbi5fcmVmKSB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3dkLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QsIGZhbHNlKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5faW5pdEJpbmQgPSB0YWJsZVBsdWdpbi5pbml0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fd2QuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGFibGVQbHVnaW4uX2luaXRCaW5kLCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tfdGFibGVDb250cm9sbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSA/IGUudGFyZ2V0IDogZS50YXJnZXQucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3B0aW9uJyk7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0YWJsZVBsdWdpbi5fY2xvc2VTcGxpdE1lbnUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2Nsb3NlU3BsaXRNZW51KCk7XHJcbiAgICAgICAgICAgIGlmIChjb21tYW5kID09PSAnb25zcGxpdCcpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29tbWFuZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcclxuICAgICAgICAgICAgY2FzZSAnaW5zZXJ0JzpcclxuICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLmVkaXRUYWJsZS5jYWxsKHRoaXMsIHZhbHVlLCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hlYWRlcic6XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi50b2dnbGVIZWFkZXIuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvbnNwbGl0JzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm9wZW5TcGxpdE1lbnUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzcGxpdCc6XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zcGxpdENlbGxzLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21lcmdlJzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm1lcmdlQ2VsbHMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdyZXNpemUnOlxyXG4gICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLl9tYXhXaWR0aCA9ICFjb250ZXh0VGFibGUuX21heFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0VGFibGVTdHlsZS5jYWxsKHRoaXMsICd3aWR0aCcpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyVG9wLmNhbGwodGhpcywgY29udGV4dFRhYmxlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIGNvbnRleHRUYWJsZS5fdGRFbGVtZW50LCB0YWJsZVBsdWdpbi5fc2hpZnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xheW91dCc6XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX2ZpeGVkQ29sdW1uID0gIWNvbnRleHRUYWJsZS5fZml4ZWRDb2x1bW47XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRUYWJsZVN0eWxlLmNhbGwodGhpcywgJ2NvbHVtbicpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyVG9wLmNhbGwodGhpcywgY29udGV4dFRhYmxlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIGNvbnRleHRUYWJsZS5fdGRFbGVtZW50LCB0YWJsZVBsdWdpbi5fc2hpZnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZSc6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbXB0eURpdiA9IGNvbnRleHRUYWJsZS5fZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGV4dFRhYmxlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZW1wdHlEaXYgIT09IHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpIHRoaXMudXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhlbXB0eURpdiwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7IH0sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnZm9ybWF0QmxvY2snLFxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuZm9ybWF0QmxvY2sgPSB7XG4gICAgICAgICAgICB0YXJnZXRUZXh0OiB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSxcbiAgICAgICAgICAgIHRhcmdldFRvb2x0aXA6IHRhcmdldEVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCcuc2UtdG9vbHRpcC10ZXh0JyksXG4gICAgICAgICAgICBfZm9ybWF0TGlzdDogbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnRGb3JtYXQ6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xuXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXG4gICAgICAgIGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja1VwLmJpbmQoY29yZSkpO1xuICAgICAgICBjb250ZXh0LmZvcm1hdEJsb2NrLl9mb3JtYXRMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcblxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcbiAgICB9LFxuXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xuICAgICAgICBjb25zdCBsYW5nX3Rvb2xiYXIgPSBjb3JlLmxhbmcudG9vbGJhcjtcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9ybWF0JztcblxuICAgICAgICBjb25zdCBkZWZhdWx0Rm9ybWF0cyA9IFsncCcsICdkaXYnLCAnYmxvY2txdW90ZScsICdwcmUnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnXTtcbiAgICAgICAgY29uc3QgZm9ybWF0TGlzdCA9ICFvcHRpb24uZm9ybWF0cyB8fCBvcHRpb24uZm9ybWF0cy5sZW5ndGggPT09IDAgPyBkZWZhdWx0Rm9ybWF0cyA6IG9wdGlvbi5mb3JtYXRzO1xuXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+PHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb3JtYXRMaXN0Lmxlbmd0aCwgZm9ybWF0LCB0YWdOYW1lLCBjb21tYW5kLCBuYW1lLCBoLCBhdHRycywgY2xhc3NOYW1lOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdExpc3RbaV07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJiBkZWZhdWx0Rm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPiAtMSkge1xuICAgICAgICAgICAgICAgIHRhZ05hbWUgPSBmb3JtYXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gdGFnTmFtZSA9PT0gJ2Jsb2NrcXVvdGUnID8gJ3JhbmdlJyA6IHRhZ05hbWUgPT09ICdwcmUnID8gJ2ZyZWUnIDogJ3JlcGxhY2UnO1xuICAgICAgICAgICAgICAgIGggPSAvXmgvLnRlc3QodGFnTmFtZSkgPyB0YWdOYW1lLm1hdGNoKC9cXGQrLylbMF0gOiAnJztcbiAgICAgICAgICAgICAgICBuYW1lID0gbGFuZ190b29sYmFyWyd0YWdfJyArIChoID8gJ2gnIDogdGFnTmFtZSldICsgaDtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnJztcbiAgICAgICAgICAgICAgICBhdHRycyA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YWdOYW1lID0gZm9ybWF0LnRhZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBmb3JtYXQuY29tbWFuZDtcbiAgICAgICAgICAgICAgICBuYW1lID0gZm9ybWF0Lm5hbWUgfHwgdGFnTmFtZTtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBmb3JtYXQuY2xhc3M7XG4gICAgICAgICAgICAgICAgYXR0cnMgPSBjbGFzc05hbWUgPyAnIGNsYXNzPVwiJyArIGNsYXNzTmFtZSArICdcIicgOiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgK1xuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0XCIgZGF0YS1jb21tYW5kPVwiJyArIGNvbW1hbmQgKyAnXCIgZGF0YS12YWx1ZT1cIicgKyB0YWdOYW1lICsgJ1wiIGRhdGEtY2xhc3M9XCInICsgY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiJyArIG5hbWUgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8JyArIHRhZ05hbWUgKyBhdHRycyArICc+JyArIG5hbWUgKyAnPC8nICsgdGFnTmFtZSArICc+JyArXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JztcbiAgICAgICAgfVxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XG5cbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xuXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIGNvcmVcbiAgICAgKi9cbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGxldCBmb3JtYXRUaXRsZSA9IHRoaXMubGFuZy50b29sYmFyLmZvcm1hdHM7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29udGV4dC5mb3JtYXRCbG9jay50YXJnZXRUZXh0O1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0YXJnZXQsIGZvcm1hdFRpdGxlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXRDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZvcm1hdEJsb2NrO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0TGlzdCA9IGZvcm1hdENvbnRleHQuX2Zvcm1hdExpc3Q7XG4gICAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IChlbGVtZW50LmNsYXNzTmFtZS5tYXRjaCgvKFxcc3xeKV9fc2VfX2Zvcm1hdF9fW15cXHNdKy8pIHx8IFsnJ10pWzBdLnRyaW0oKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvcm1hdExpc3QubGVuZ3RoLCBmOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmID0gZm9ybWF0TGlzdFtpXTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZU5hbWUgPT09IGYuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgJiYgY2xhc3NOYW1lID09PSBmLmdldEF0dHJpYnV0ZSgnZGF0YS1jbGFzcycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFRpdGxlID0gZi50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgZm9ybWF0VGl0bGUpO1xuICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScsIG5vZGVOYW1lKTtcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY2xhc3MnLCBjbGFzc05hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0Q29udGV4dCA9IHRoaXMuY29udGV4dC5mb3JtYXRCbG9jaztcbiAgICAgICAgY29uc3QgZm9ybWF0TGlzdCA9IGZvcm1hdENvbnRleHQuX2Zvcm1hdExpc3Q7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGZvcm1hdENvbnRleHQudGFyZ2V0VGV4dDtcbiAgICAgICAgY29uc3QgY3VycmVudEZvcm1hdCA9ICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgfHwgJycpICsgKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xhc3MnKSB8fCAnJyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQgIT09IGZvcm1hdENvbnRleHQuY3VycmVudEZvcm1hdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvcm1hdExpc3QubGVuZ3RoLCBmOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmID0gZm9ybWF0TGlzdFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1hdCA9PT0gZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSArIGYuZ2V0QXR0cmlidXRlKCdkYXRhLWNsYXNzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGYsICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoZiwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0Q29udGV4dC5jdXJyZW50Rm9ybWF0ID0gY3VycmVudEZvcm1hdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwaWNrVXA6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgIGxldCBjb21tYW5kID0gbnVsbCwgdmFsdWUgPSBudWxsLCB0YWcgPSBudWxsLCBjbGFzc05hbWUgPSAnJztcbiAgICAgICAgXG4gICAgICAgIHdoaWxlICghY29tbWFuZCAmJiAhL1VML2kudGVzdCh0YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jbGFzcycpO1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB0YWcgPSB0YXJnZXQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgLy8gYmxvY2txdW90ZVxuICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2VFbGVtZW50ID0gdGFnLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJlZSwgcmVwbGFjZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzKGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0UmFuZ2VfYWRkTGluZShyYW5nZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybXN0cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldDtcblxuICAgICAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcbiAgICAgICAgICAgIGxldCBmaXJzdCA9IHNlbGVjdGVkRm9ybXN0c1swXTtcbiAgICAgICAgICAgIGxldCBsYXN0ID0gc2VsZWN0ZWRGb3Jtc3RzW3NlbGVjdGVkRm9ybXN0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgocmFuZ2Uuc3RhcnRDb250YWluZXIsIGZpcnN0LCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RQYXRoID0gdXRpbC5nZXROb2RlUGF0aChyYW5nZS5lbmRDb250YWluZXIsIGxhc3QsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgbGlzdFxuICAgICAgICAgICAgY29uc3Qgcmxpc3QgPSB0aGlzLmRldGFjaExpc3Qoc2VsZWN0ZWRGb3Jtc3RzLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAocmxpc3Quc2MpIGZpcnN0ID0gcmxpc3Quc2M7XG4gICAgICAgICAgICBpZiAocmxpc3QuZWMpIGxhc3QgPSBybGlzdC5lYztcblxuICAgICAgICAgICAgLy8gY2hhbmdlIGZvcm1hdCB0YWdcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UodXRpbC5nZXROb2RlRnJvbVBhdGgoZmlyc3RQYXRoLCBmaXJzdCksIHN0YXJ0T2Zmc2V0LCB1dGlsLmdldE5vZGVGcm9tUGF0aChsYXN0UGF0aCwgbGFzdCksIGVuZE9mZnNldCk7XG4gICAgICAgICAgICBjb25zdCBtb2RpZmllZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzKGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gZnJlZSBmb3JtYXRcbiAgICAgICAgICAgIGlmIChjb21tYW5kID09PSAnZnJlZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSBtb2RpZmllZEZvcm1zdHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG1vZGlmaWVkRm9ybXN0c1tsZW5dLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgbGV0IGZyZWVFbGVtZW50ID0gdGFnLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9jdXNFbGVtZW50ID0gZnJlZUVsZW1lbnQ7XG4gICAgXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGxlbiwgZiwgaHRtbCwgYmVmb3JlLCBuZXh0LCBpbm5lciwgaXNDb21wLCBmaXJzdCA9IHRydWU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBtb2RpZmllZEZvcm1zdHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmID09PSAoIW1vZGlmaWVkRm9ybXN0c1tpICsgMV0gPyBudWxsIDogbW9kaWZpZWRGb3Jtc3RzW2kgKyAxXS5wYXJlbnROb2RlKSkgY29udGludWU7XG4gICAgXG4gICAgICAgICAgICAgICAgICAgIGlzQ29tcCA9IHV0aWwuaXNDb21wb25lbnQoZik7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBpc0NvbXAgPyAnJyA6IGYuaW5uZXJIVE1MLnJlcGxhY2UoLyg/IT4pXFxzKyg/PTwpfFxcbi9nLCAnICcpO1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoZiwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnBhcmVudE5vZGUgPT09IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAhPT0gZi5wYXJlbnROb2RlIHx8IGlzQ29tcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmcmVlRWxlbWVudCwgcGFyZW50Tm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJlZUVsZW1lbnQsIGJlZm9yZSA/IGJlZm9yZS5uZXh0U2libGluZyA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBmLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmcmVlRWxlbWVudC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIGZyZWVFbGVtZW50Lm5vZGVOYW1lID09PSBuZXh0Lm5vZGVOYW1lICYmIHV0aWwuaXNTYW1lQXR0cmlidXRlcyhmcmVlRWxlbWVudCwgbmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlRWxlbWVudC5pbm5lckhUTUwgKz0gJzxCUj4nICsgbmV4dC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmVlRWxlbWVudCA9IHRhZy5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAgICAgICAgIGlubmVyID0gZnJlZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICBmcmVlRWxlbWVudC5pbm5lckhUTUwgPSAoKGZpcnN0IHx8ICFodG1sIHx8ICFpbm5lciB8fCAvPGJyPiQvaS50ZXN0KGh0bWwpKSA/IGh0bWwgOiBodG1sICsgJzxCUj4nKSArIGlubmVyO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShmcmVlRWxlbWVudCwgZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gZi5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIGZyZWVFbGVtZW50Lm5vZGVOYW1lID09PSBuZXh0Lm5vZGVOYW1lICYmIHV0aWwuaXNTYW1lQXR0cmlidXRlcyhmcmVlRWxlbWVudCwgbmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlRWxlbWVudC5pbm5lckhUTUwgKz0gJzxCUj4nICsgbmV4dC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gZnJlZUVsZW1lbnQucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgJiYgZnJlZUVsZW1lbnQubm9kZU5hbWUgPT09IHByZXYubm9kZU5hbWUgJiYgdXRpbC5pc1NhbWVBdHRyaWJ1dGVzKGZyZWVFbGVtZW50LCBwcmV2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYuaW5uZXJIVE1MICs9ICc8QlI+JyArIGZyZWVFbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZnJlZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbXApIHV0aWwucmVtb3ZlSXRlbShmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhaHRtbCkgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShmb2N1c0VsZW1lbnQsIDAsIGZvY3VzRWxlbWVudCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXBsYWNlIGZvcm1hdFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG1vZGlmaWVkRm9ybXN0cy5sZW5ndGgsIG5vZGUsIG5ld0Zvcm1hdDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBtb2RpZmllZEZvcm1zdHNbaV07XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCAobm9kZS5jbGFzc05hbWUubWF0Y2goLyhcXHN8XilfX3NlX19mb3JtYXRfX1teXFxzXSsvKSB8fCBbJyddKVswXS50cmltKCkgIT09IGNsYXNzTmFtZSkgJiYgIXV0aWwuaXNDb21wb25lbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdCA9IHRhZy5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5Rm9ybWF0QXR0cmlidXRlcyhuZXdGb3JtYXQsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Rm9ybWF0LmlubmVySFRNTCA9IG5vZGUuaW5uZXJIVE1MO1xuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdGb3JtYXQsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSBmaXJzdCA9IG5ld0Zvcm1hdCB8fCBub2RlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSkgbGFzdCA9IG5ld0Zvcm1hdCB8fCBub2RlO1xuICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGZpcnN0UGF0aCwgZmlyc3QpLCBzdGFydE9mZnNldCwgdXRpbC5nZXROb2RlRnJvbVBhdGgobGFzdFBhdGgsIGxhc3QpLCBlbmRPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcbiAgICB9XG59O1xuIiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTk3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ2xpbmVIZWlnaHQnLFxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQubGluZUhlaWdodCA9IHtcbiAgICAgICAgICAgIF9zaXplTGlzdDogbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnRTaXplOiAtMVxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcbiAgICAgICAgbGV0IGxpc3RVbCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBsaXN0VWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcblxuICAgICAgICBjb250ZXh0LmxpbmVIZWlnaHQuX3NpemVMaXN0ID0gbGlzdFVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpIGJ1dHRvbicpO1xuXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXG4gICAgICAgIGNvcmUuaW5pdE1lbnVUYXJnZXQodGhpcy5uYW1lLCB0YXJnZXRFbGVtZW50LCBsaXN0RGl2KTtcblxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgIGxpc3REaXYgPSBudWxsLCBsaXN0VWwgPSBudWxsO1xuICAgIH0sXG5cbiAgICBzZXRTdWJtZW51OiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XG5cbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyJztcblxuICAgICAgICBjb25zdCBzaXplTGlzdCA9ICFvcHRpb24ubGluZUhlaWdodHMgPyBbXG4gICAgICAgICAgICB7dGV4dDogJzEnLCB2YWx1ZTogMX0sXG4gICAgICAgICAgICB7dGV4dDogJzEuMTUnLCB2YWx1ZTogMS4xNX0sXG4gICAgICAgICAgICB7dGV4dDogJzEuNScsIHZhbHVlOiAxLjV9LFxuICAgICAgICAgICAge3RleHQ6ICcyJywgdmFsdWU6IDJ9XG4gICAgICAgIF0gOiBvcHRpb24ubGluZUhlaWdodHM7XG5cbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZGVmYXVsdF92YWx1ZSBzZS1idG4tbGlzdFwiIHRpdGxlPVwiJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJ1wiPignICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnKTwvYnV0dG9uPjwvbGk+JztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNpemVMaXN0Lmxlbmd0aCwgdGV4dCwgc2l6ZTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBzaXplID0gc2l6ZUxpc3RbaV07XG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgc2l6ZS52YWx1ZSArICdcIiB0aXRsZT1cIicgKyBzaXplLnRleHQgKyAnXCI+JyArIHNpemUudGV4dCArICc8L2J1dHRvbj48L2xpPic7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdCArPSAnPC91bD48L2Rpdj4nO1xuXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcblxuICAgICAgICByZXR1cm4gbGlzdERpdjtcbiAgICB9LFxuXG4gICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbGluZUhlaWdodENvbnRleHQgPSB0aGlzLmNvbnRleHQubGluZUhlaWdodDtcbiAgICAgICAgY29uc3Qgc2l6ZUxpc3QgPSBsaW5lSGVpZ2h0Q29udGV4dC5fc2l6ZUxpc3Q7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMudXRpbC5nZXRGb3JtYXRFbGVtZW50KHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpKTtcbiAgICAgICAgY29uc3QgY3VycmVudFNpemUgPSAhZm9ybWF0ID8gJycgOiBmb3JtYXQuc3R5bGUubGluZUhlaWdodCArICcnO1xuXG4gICAgICAgIGlmIChjdXJyZW50U2l6ZSAhPT0gbGluZUhlaWdodENvbnRleHQuY3VycmVudFNpemUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzaXplTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2l6ZSA9PT0gc2l6ZUxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHNpemVMaXN0W2ldLCAnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNpemVMaXN0W2ldLCAnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaW5lSGVpZ2h0Q29udGV4dC5jdXJyZW50U2l6ZSA9IGN1cnJlbnRTaXplO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKCEvXkJVVFRPTiQvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSB8fCAnJztcbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb3JtYXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBmb3JtYXRzW2ldLnN0eWxlLmxpbmVIZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xuICAgIH1cbn07XG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdwYXJhZ3JhcGhTdHlsZScsXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcbiAgICAgICAgY29udGV4dC5wYXJhZ3JhcGhTdHlsZSA9IHtcbiAgICAgICAgICAgIF9jbGFzc0xpc3Q6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XG5cbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrVXAuYmluZChjb3JlKSk7XG5cbiAgICAgICAgY29udGV4dC5wYXJhZ3JhcGhTdHlsZS5fY2xhc3NMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcblxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcbiAgICB9LFxuXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1mb3JtYXQnO1xuXG4gICAgICAgIGNvbnN0IG1lbnVMYW5nID0gY29yZS5sYW5nLm1lbnU7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0ge1xuICAgICAgICAgICAgc3BhY2VkOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogbWVudUxhbmcuc3BhY2VkLFxuICAgICAgICAgICAgICAgIGNsYXNzOiAnX19zZV9fcC1zcGFjZWQnLFxuICAgICAgICAgICAgICAgIF9jbGFzczogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib3JkZXJlZDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IG1lbnVMYW5nLmJvcmRlcmVkLFxuICAgICAgICAgICAgICAgIGNsYXNzOiAnX19zZV9fcC1ib3JkZXJlZCcsXG4gICAgICAgICAgICAgICAgX2NsYXNzOiAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5lb246IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBtZW51TGFuZy5uZW9uLFxuICAgICAgICAgICAgICAgIGNsYXNzOiAnX19zZV9fcC1uZW9uJyxcbiAgICAgICAgICAgICAgICBfY2xhc3M6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcyA9ICFvcHRpb24ucGFyYWdyYXBoU3R5bGVzIHx8IG9wdGlvbi5wYXJhZ3JhcGhTdHlsZXMubGVuZ3RoID09PSAwID8gWydzcGFjZWQnLCAnYm9yZGVyZWQnLCAnbmVvbiddIDogb3B0aW9uLnBhcmFncmFwaFN0eWxlcztcblxuICAgICAgICBsZXQgbGlzdCA9ICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPjx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGFyYWdyYXBoU3R5bGVzLmxlbmd0aCwgcCwgbmFtZSwgYXR0cnMsIF9jbGFzczsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBwID0gcGFyYWdyYXBoU3R5bGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN0eWxlID0gZGVmYXVsdExpc3RbcC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZmF1bHRTdHlsZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcCA9IGRlZmF1bHRTdHlsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFtZSA9IHAubmFtZTtcbiAgICAgICAgICAgIGF0dHJzID0gcC5jbGFzcyA/ICcgY2xhc3M9XCInICsgcC5jbGFzcyArICdcIicgOiAnJztcbiAgICAgICAgICAgIF9jbGFzcyA9IHAuX2NsYXNzO1xuXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3QnICsgKF9jbGFzcyA/ICcgJyArIF9jbGFzczogJycpICsgJ1wiIGRhdGEtdmFsdWU9XCInICsgcC5jbGFzcyArICdcIiB0aXRsZT1cIicgKyBuYW1lICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdicgKyBhdHRycyArICc+JyArIG5hbWUgKyAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JztcbiAgICAgICAgfVxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XG5cbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xuXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhDb250ZXh0ID0gdGhpcy5jb250ZXh0LnBhcmFncmFwaFN0eWxlO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaXN0ID0gcGFyYWdyYXBoQ29udGV4dC5fY2xhc3NMaXN0O1xuICAgICAgICBjb25zdCBjdXJyZW50Rm9ybWF0ID0gdGhpcy51dGlsLmdldEZvcm1hdEVsZW1lbnQodGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCkpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhZ3JhcGhMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmhhc0NsYXNzKGN1cnJlbnRGb3JtYXQsIHBhcmFncmFwaExpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHBhcmFncmFwaExpc3RbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHBhcmFncmFwaExpc3RbaV0sICdhY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBwaWNrVXA6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgIFxuICAgICAgICB3aGlsZSAoIS9eVUwkL2kudGVzdCh0YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSBicmVhaztcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGxldCBzZWxlY3RlZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkRm9ybXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UmFuZ2VfYWRkTGluZSh0aGlzLmdldFJhbmdlKCksIG51bGwpO1xuICAgICAgICAgICAgc2VsZWN0ZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdlIGZvcm1hdCBjbGFzc1xuICAgICAgICBjb25zdCB0b2dnbGVDbGFzcyA9IHRoaXMudXRpbC5oYXNDbGFzcyh0YXJnZXQsICdhY3RpdmUnKSA/IHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCkgOiB0aGlzLnV0aWwuYWRkQ2xhc3MuYmluZCh0aGlzLnV0aWwpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxlY3RlZEZvcm1zdHNbaV0sIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xuXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xuICAgIH1cbn07XG4iLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICd0ZXh0U3R5bGUnLFxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQudGV4dFN0eWxlID0ge1xuICAgICAgICAgICAgX3N0eWxlTGlzdDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcbiAgICAgICAgbGV0IGxpc3RVbCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKTtcblxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICBsaXN0VWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcblxuICAgICAgICBjb250ZXh0LnRleHRTdHlsZS5fc3R5bGVMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcblxuICAgICAgICAvKiogYXBwZW5kIHRhcmdldCBidXR0b24gbWVudSAqL1xuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XG5cbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICBsaXN0RGl2ID0gbnVsbCwgbGlzdFVsID0gbnVsbDtcbiAgICB9LFxuXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1mb3JtYXQnO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0ge1xuICAgICAgICAgICAgY29kZToge1xuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmUubGFuZy5tZW51LmNvZGUsXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdfX3NlX190LWNvZGUnLFxuICAgICAgICAgICAgICAgIHRhZzogJ2NvZGUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyYW5zbHVjZW50OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogY29yZS5sYW5nLm1lbnUudHJhbnNsdWNlbnQsXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdvcGFjaXR5OiAwLjU7JyxcbiAgICAgICAgICAgICAgICB0YWc6ICdzcGFuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaGFkb3c6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBjb3JlLmxhbmcubWVudS5zaGFkb3csXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdfX3NlX190LXNoYWRvdycsXG4gICAgICAgICAgICAgICAgdGFnOiAnc3BhbicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0eWxlTGlzdCA9ICFvcHRpb24udGV4dFN0eWxlcyA/IGNvcmUuX3cuT2JqZWN0LmtleXMoZGVmYXVsdExpc3QpIDogb3B0aW9uLnRleHRTdHlsZXM7XG5cbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj48dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljXCI+JztcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlTGlzdC5sZW5ndGgsIHQsIHRhZywgbmFtZSwgYXR0cnMsIGNvbW1hbmQsIHZhbHVlLCBfY2xhc3M7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdCA9IHN0eWxlTGlzdFtpXTtcbiAgICAgICAgICAgIGF0dHJzID0gJycsIHZhbHVlID0gJycsIGNvbW1hbmQgPSBbXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IGRlZmF1bHRMaXN0W3QudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgaWYgKCFkZWZhdWx0U3R5bGUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHQgPSBkZWZhdWx0U3R5bGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgPSB0Lm5hbWU7XG4gICAgICAgICAgICB0YWcgPSB0LnRhZyB8fCAnc3Bhbic7XG4gICAgICAgICAgICBfY2xhc3MgPSB0Ll9jbGFzcztcblxuICAgICAgICAgICAgaWYgKHQuc3R5bGUpIHtcbiAgICAgICAgICAgICAgICBhdHRycyArPSAnIHN0eWxlPVwiJyArIHQuc3R5bGUgKyAnXCInO1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IHQuc3R5bGUucmVwbGFjZSgvOlteO10rKDt8JClcXHMqL2csICcsJyk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5wdXNoKCdzdHlsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhdHRycyArPSAnIGNsYXNzPVwiJyArIHQuY2xhc3MgKyAnXCInO1xuICAgICAgICAgICAgICAgIHZhbHVlICs9ICcuJyArIHQuY2xhc3MudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJywuJyk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5wdXNoKCdjbGFzcycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLywkLywgJycpO1xuXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3QnICsgKF9jbGFzcyA/ICcgJyArIF9jbGFzczogJycpICsgJ1wiIGRhdGEtY29tbWFuZD1cIicgKyB0YWcgKyAnXCIgZGF0YS12YWx1ZT1cIicgKyB2YWx1ZSArICdcIiB0aXRsZT1cIicgKyBuYW1lICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAnPCcgKyB0YWcgKyBhdHRycyArICc+JyArIG5hbWUgKyAgJzwvJyArIHRhZyArICc+JyArXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JztcbiAgICAgICAgfVxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XG5cbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xuXG4gICAgICAgIHJldHVybiBsaXN0RGl2O1xuICAgIH0sXG5cbiAgICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xuICAgICAgICBjb25zdCB0ZXh0U3R5bGVDb250ZXh0ID0gdGhpcy5jb250ZXh0LnRleHRTdHlsZTtcbiAgICAgICAgY29uc3Qgc3R5bGVCdXR0b25MaXN0ID0gdGV4dFN0eWxlQ29udGV4dC5fc3R5bGVMaXN0O1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25Ob2RlID0gdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlQnV0dG9uTGlzdC5sZW5ndGgsIGJ0biwgZGF0YSwgYWN0aXZlOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGJ0biA9IHN0eWxlQnV0dG9uTGlzdFtpXTtcbiAgICAgICAgICAgIGRhdGEgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZm9yIChsZXQgdiA9IDAsIG5vZGUsIHZhbHVlOyB2IDwgZGF0YS5sZW5ndGg7IHYrKykge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxlY3Rpb25Ob2RlO1xuICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChub2RlKSAmJiAhdXRpbC5pc0NvbXBvbmVudChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFbdl07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL15cXC4vLnRlc3QodmFsdWUpID8gdXRpbC5oYXNDbGFzcyhub2RlLCB2YWx1ZS5yZXBsYWNlKC9eXFwuLywgJycpKSA6ICEhbm9kZS5zdHlsZVt2YWx1ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhY3RpdmUgPyB1dGlsLmFkZENsYXNzKGJ0biwgJ2FjdGl2ZScpIDogdXRpbC5yZW1vdmVDbGFzcyhidG4sICdhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgbGV0IGNvbW1hbmQgPSBudWxsLCB0YWcgPSBudWxsO1xuICAgICAgICBcbiAgICAgICAgd2hpbGUgKCFjb21tYW5kICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xuICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB0YWcgPSB0YXJnZXQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY2hlY2tTdHlsZXMgPSB0YWcuc3R5bGUuY3NzVGV4dC5yZXBsYWNlKC86LisoO3wkKS9nLCAnLCcpLnNwbGl0KCcsJyk7XG4gICAgICAgIGNoZWNrU3R5bGVzLnBvcCgpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSB0YWcuY2xhc3NMaXN0O1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY2hlY2tTdHlsZXMucHVzaCgnLicgKyBjbGFzc2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuaGFzQ2xhc3ModGFyZ2V0LCAnYWN0aXZlJykgPyBudWxsIDogdGFnLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZU5vZGVzID0gbmV3Tm9kZSA/IG51bGwgOiBbdGFnLm5vZGVOYW1lXTtcbiAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIGNoZWNrU3R5bGVzLCByZW1vdmVOb2RlcywgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XG4gICAgfVxufTtcbiIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgZmlsZUJyb3dzZXIgZnJvbSAnLi4vbW9kdWxlcy9maWxlQnJvd3Nlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnaW1hZ2VHYWxsZXJ5JyxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcbiAgICAgKi9cbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtmaWxlQnJvd3Nlcl0pO1xuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQuaW1hZ2VHYWxsZXJ5ID0ge1xuICAgICAgICAgICAgdGl0bGU6IGNvcmUubGFuZy50b29sYmFyLmltYWdlR2FsbGVyeSwgLy8gQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIEZpbGUgYnJvd3NlciB3aW5kb3cgdGl0bGUuXG4gICAgICAgICAgICB1cmw6IGNvcmUub3B0aW9ucy5pbWFnZUdhbGxlcnlVcmwsIC8vIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXIgLSBGaWxlIHNlcnZlciB1cmwuXG4gICAgICAgICAgICBoZWFkZXI6IGNvcmUub3B0aW9ucy5pbWFnZUdhbGxlcnlIZWFkZXIsIC8vIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXIgLSBGaWxlIHNlcnZlciBodHRwIGhlYWRlci5cbiAgICAgICAgICAgIGxpc3RDbGFzczogJ3NlLWltYWdlLWxpc3QnLCAvLyBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gQ2xhc3MgbmFtZSBvZiBsaXN0IGRpdi5cbiAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZUhhbmRsZXI6IHRoaXMuZHJhd0l0ZW1zLCAvLyBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gRnVuY3Rpb24gdGhhdCBkZWZpbmVzIHRoZSBIVE1MIG9mIGFuIGZpbGUgaXRlbS5cbiAgICAgICAgICAgIHNlbGVjdG9ySGFuZGxlcjogdGhpcy5zZXRJbWFnZS5iaW5kKGNvcmUpLCAvLyBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gRnVuY3Rpb24gdGhhdCBhY3Rpb24gd2hlbiBpdGVtIGNsaWNrLlxuICAgICAgICAgICAgY29sdW1uU2l6ZTogNCAvLyBAT3B0aW9uIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIE51bWJlciBvZiBcImRpdi5zZS1maWxlLWl0ZW0tY29sdW1uXCIgdG8gYmUgY3JlYXRlZCAoZGVmYXVsdDogNClcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIC8qKlxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXJcbiAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhIGZpbGUgYnJvd3Nlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHNlbGVjdG9ySGFuZGxlciBXaGVuIHRoZSBmdW5jdGlvbiBjb21lcyBhcyBhbiBhcmd1bWVudCB2YWx1ZSwgaXQgc3Vic3RpdHV0ZXMgXCJjb250ZXh0LnNlbGVjdG9ySGFuZGxlclwiLlxuICAgICAqL1xuICAgIG9wZW46IGZ1bmN0aW9uIChzZWxlY3RvckhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLm9wZW4uY2FsbCh0aGlzLCAnaW1hZ2VHYWxsZXJ5Jywgc2VsZWN0b3JIYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZWZpbmUgdGhlIEhUTUwgb2YgdGhlIGl0ZW0gdG8gYmUgcHV0IGluIFwiZGl2LnNlLWZpbGUtaXRlbS1jb2x1bW5cIi5cbiAgICAgKiBGb3JtYXQ6IFtcbiAgICAgKiAgICAgIHsgc3JjOiBcImltYWdlIHNyY1wiLCBuYW1lOiBcIm5hbWUoQG9wdGlvbilcIiwgYWx0OiBcImltYWdlIGFsdChAb3B0aW9uKVwiLCB0YWc6IFwidGFnIG5hbWUoQG9wdGlvbilcIiB9XG4gICAgICogXVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIEl0ZW0gb2YgdGhlIHJlc3BvbnNlIGRhdGEncyBhcnJheVxuICAgICAqL1xuICAgIGRyYXdJdGVtczogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgY29uc3Qgc3JjTmFtZSA9IGl0ZW0uc3JjLnNwbGl0KCcvJykucG9wKCk7XG4gICAgICAgIHJldHVybiAgJzxkaXYgY2xhc3M9XCJzZS1maWxlLWl0ZW0taW1nXCI+PGltZyBzcmM9XCInICsgaXRlbS5zcmMgKyAnXCIgYWx0PVwiJyArIChpdGVtLmFsdCB8fCBzcmNOYW1lKSArICdcIiBkYXRhLWNvbW1hbmQ9XCJwaWNrXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1pbWctbmFtZSBzZS1maWxlLW5hbWUtYmFja1wiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtaW1nLW5hbWUgX19zZV9faW1nX25hbWVcIj4nICsgKGl0ZW0ubmFtZSB8fCBzcmNOYW1lKSArICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPC9kaXY+JztcbiAgICB9LFxuXG4gICAgc2V0SW1hZ2U6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5jYWxsUGx1Z2luKCdpbWFnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB7bmFtZTogdGFyZ2V0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcignLl9fc2VfX2ltZ19uYW1lJykudGV4dENvbnRlbnQsIHNpemU6IDB9O1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmltYWdlLl9hbHRUZXh0ID0gdGFyZ2V0LmFsdDtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCB0YXJnZXQuc3JjLCBudWxsLCB0aGlzLmNvbnRleHQuaW1hZ2UuX29yaWdpbl93LCB0aGlzLmNvbnRleHQuaW1hZ2UuX29yaWdpbl9oLCAnbm9uZScsIGZpbGUpO1xuICAgICAgICB9LmJpbmQodGhpcyksIG51bGwpO1xuICAgIH1cbn07IiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMjAgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgIC8vIHJ0bCBpY29uXG4gICBydGw6IHtcbiAgICAgIGl0YWxpYzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTAuNSAxNS44XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48cGF0aCBkPVwiTTAuMywwLjFjMC4zLDAsMC41LDAsMC43LDBjMSwwLjEsMS43LDAuMSwyLjIsMC4xSDRMNy4yLDBsMC4yLDEuMUg3Yy0wLjUsMC0xLDAuMS0xLjUsMC4zdjAuNGwwLjMsMS45TDYsNC40TDYuMyw2IGwwLjEsMC40bDAuMSwwLjVjMC4xLDAuMiwwLjEsMC40LDAuMiwwLjdzMC4xLDAuNiwwLjIsMC45TDcsOS4xbDAuNiwyLjhsMC4zLDEuNGMwLjEsMC40LDAuMiwwLjcsMC40LDFjMC40LDAuMiwwLjgsMC4zLDEuMiwwLjQgbDAuOCwwLjJsMC4yLDAuOWwtMS4xLDBjLTAuOS0wLjEtMS41LTAuMS0xLjgtMC4xaC0yYy0wLjksMC4xLTEuNCwwLjItMS41LDAuMmMtMC4xLDAtMC4yLDAtMC4zLDBIMy40Yy0wLjEsMC0wLjIsMC0wLjIsMCBsLTAuMS0wLjRjMC0wLjItMC4xLTAuNC0wLjEtMC42bDAuNy0wLjFjMC40LDAsMC44LTAuMSwxLjItMC4yYzAtMC4xLDAtMC4yLDAtMC4zbC0wLjEtMC41bC0wLjQtMi40TDQsOS42TDMuNCw2LjQgQzMuMiw1LjcsMyw0LjcsMi43LDMuM2MwLTAuMy0wLjEtMC41LTAuMS0wLjhDMi41LDIuMSwyLjQsMS45LDIuMywxLjZDMiwxLjQsMS42LDEuMywxLjMsMS4yQzAuOSwxLjIsMC41LDEuMSwwLjIsMC45TDAsMC40TDAsMCBMMC4zLDAuMUwwLjMsMC4xelwiLz48L2c+PC9zdmc+JyxcbiAgICAgIGluZGVudDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNyAxMi40XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48Zz48cGF0aCBkPVwiTTE1LjUsMTAuMUwxNS41LDEwLjFjMC4xLDAsMC4zLDAuMSwwLjMsMC4zdjEuN2MwLDAuMSwwLDAuMS0wLjEsMC4yYy0wLjEsMC4xLTAuMSwwLjEtMC4yLDAuMWwtMTUuMiwwIGMtMC4xLDAtMC4xLDAtMC4yLTAuMUMwLDEyLjIsMCwxMi4yLDAsMTIuMWwwLTEuN2MwLTAuMSwwLTAuMSwwLjEtMC4yYzAuMS0wLjEsMC4xLTAuMSwwLjItMC4xQzAuMywxMC4xLDE1LjUsMTAuMSwxNS41LDEwLjF6IE05LjgsNi43YzAuMSwwLDAuMSwwLDAuMiwwLjFDMTAuMSw2LjksMTAuMSw3LDEwLjEsN3YxLjdjMCwwLjEsMCwwLjItMC4xLDAuMkMxMCw5LDkuOSw5LDkuOCw5TDAuMyw5QzAuMiw5LDAuMSw5LDAuMSw4LjkgQzAsOC45LDAsOC44LDAsOC43VjdDMCw3LDAsNi45LDAuMSw2LjhjMC4xLTAuMSwwLjEtMC4xLDAuMi0wLjFDMC4zLDYuNyw5LjgsNi43LDkuOCw2Ljd6IE0wLjMsMy40aDkuNmgwYzAuMSwwLDAuMywwLjEsMC4zLDAuMyB2MS43djBjMCwwLjEtMC4xLDAuMy0wLjMsMC4zSDAuM2MtMC4xLDAtMC4xLDAtMC4yLTAuMUMwLDUuNSwwLDUuNCwwLDUuM1YzLjZjMC0wLjEsMC0wLjEsMC4xLTAuMkMwLjEsMy40LDAuMiwzLjQsMC4zLDMuNCBMMC4zLDMuNHogTTAuMywwbDE1LjIsMGMwLjEsMCwwLjEsMCwwLjIsMC4xYzAuMSwwLjEsMC4xLDAuMSwwLjEsMC4yVjJjMCwwLjEsMCwwLjItMC4xLDAuMmMtMC4xLDAuMS0wLjEsMC4xLTAuMiwwLjFIMC4zIGMtMC4xLDAtMC4xLDAtMC4yLTAuMUMwLDIuMSwwLDIsMCwybDAtMS43YzAtMC4xLDAtMC4xLDAuMS0wLjJDMC4xLDAsMC4yLDAsMC4zLDB6XCIvPjwvZz48cGF0aCBkPVwiTTEzLjEsMy41TDE1LjcsNmMwLjEsMC4xLDAuMSwwLjMsMCwwLjRsLTIuNSwyLjVDMTMuMSw5LDEzLDksMTIuOSw5Yy0wLjEsMC0wLjEsMC0wLjItMC4xYy0wLjEtMC4xLTAuMS0wLjEtMC4xLTAuMlYzLjcgYzAtMC4xLDAtMC4yLDAuMS0wLjJjMC4xLTAuMSwwLjEtMC4xLDAuMi0wLjFDMTMsMy40LDEzLjEsMy40LDEzLjEsMy41elwiLz48L2c+PC9zdmc+JyxcbiAgICAgIG91dGRlbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjcgMTIuNFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGc+PGc+PHBhdGggZD1cIk0xNS41LDEwLjFMMTUuNSwxMC4xYzAuMSwwLDAuMywwLjEsMC4zLDAuM3YxLjdjMCwwLjEsMCwwLjEtMC4xLDAuMmMtMC4xLDAuMS0wLjEsMC4xLTAuMiwwLjFsLTE1LjIsMCBjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCwxMi4yLDAsMTIuMiwwLDEyLjFsMC0xLjdjMC0wLjEsMC0wLjEsMC4xLTAuMmMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMUMwLjMsMTAuMSwxNS41LDEwLjEsMTUuNSwxMC4xeiBNOS44LDYuN2MwLjEsMCwwLjEsMCwwLjIsMC4xQzEwLjEsNi45LDEwLjEsNywxMC4xLDd2MS43YzAsMC4xLDAsMC4yLTAuMSwwLjJDMTAsOSw5LjksOSw5LjgsOUwwLjMsOUMwLjIsOSwwLjEsOSwwLjEsOC45IEMwLDguOSwwLDguOCwwLDguN1Y3QzAsNywwLDYuOSwwLjEsNi44YzAuMS0wLjEsMC4xLTAuMSwwLjItMC4xQzAuMyw2LjcsOS44LDYuNyw5LjgsNi43eiBNMC4zLDMuNGg5LjZoMGMwLjEsMCwwLjMsMC4xLDAuMywwLjMgdjEuN3YwYzAsMC4xLTAuMSwwLjMtMC4zLDAuM0gwLjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCw1LjUsMCw1LjQsMCw1LjNWMy42YzAtMC4xLDAtMC4xLDAuMS0wLjJDMC4xLDMuNCwwLjIsMy40LDAuMywzLjQgTDAuMywzLjR6IE0wLjMsMGwxNS4yLDBjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLjEsMC4xLDAuMSwwLjEsMC4xLDAuMlYyYzAsMC4xLDAsMC4yLTAuMSwwLjJjLTAuMSwwLjEtMC4xLDAuMS0wLjIsMC4xSDAuMyBjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCwyLjEsMCwyLDAsMmwwLTEuN2MwLTAuMSwwLTAuMSwwLjEtMC4yQzAuMSwwLDAuMiwwLDAuMywwelwiLz48L2c+PHBhdGggZD1cIk0xNS41LDMuNGMwLjEsMCwwLjEsMCwwLjIsMC4xYzAuMSwwLjEsMC4xLDAuMSwwLjEsMC4ydjUuMWMwLDAuMSwwLDAuMS0wLjEsMC4yQzE1LjYsOSwxNS41LDksMTUuNSw5IGMtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMi41LTIuNWMtMC4xLTAuMS0wLjEtMC4zLDAtMC40bDIuNS0yLjVDMTUuMywzLjQsMTUuNCwzLjQsMTUuNSwzLjR6XCIvPjwvZz48L3N2Zz4nLFxuICAgICAgbGlzdF9idWxsZXRzOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDEyLjRcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMTIuNCwxMC43YzAsMC45LDAuOCwxLjcsMS43LDEuN2MwLjksMCwxLjctMC44LDEuNy0xLjdDMTUuNyw5LjgsMTUsOSwxNC4xLDljLTAuNCwwLTAuOSwwLjItMS4yLDAuNSBDMTIuNSw5LjgsMTIuNCwxMC4yLDEyLjQsMTAuN0MxMi40LDEwLjcsMTIuNCwxMC43LDEyLjQsMTAuN3ogTTEyLjQsNi4yYzAsMC45LDAuOCwxLjcsMS43LDEuN2MwLjQsMCwwLjktMC4yLDEuMi0wLjUgYzAuMy0wLjMsMC40LTAuNywwLjQtMS4xYzAtMC45LTAuNy0xLjctMS42LTEuN0MxMy4xLDQuNiwxMi40LDUuMywxMi40LDYuMkMxMi40LDYuMiwxMi40LDYuMiwxMi40LDYuMnogTTAsOS44djEuNyBjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMWwxMC43LDBjMCwwLDAsMCwwLDBjMC4xLDAsMC4zLTAuMSwwLjMtMC4zVjkuOGMwLTAuMSwwLTAuMS0wLjEtMC4yIEMxMS4xLDkuNiwxMSw5LjYsMTEsOS42bC0xMC43LDBjLTAuMSwwLTAuMSwwLTAuMiwwLjFDMCw5LjcsMCw5LjgsMCw5LjhMMCw5Ljh6IE0xMi45LDIuOWMwLjMsMC4zLDAuNywwLjUsMS4yLDAuNSBjMC40LDAsMC45LTAuMiwxLjItMC41YzAuNy0wLjcsMC43LTEuNywwLTIuNEMxNC45LDAuMiwxNC41LDAsMTQuMSwwYy0wLjQsMC0wLjksMC4yLTEuMiwwLjVjLTAuMywwLjMtMC41LDAuNy0wLjUsMS4yIEMxMi40LDIuMSwxMi41LDIuNiwxMi45LDIuOXogTTAsNS4zVjdjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMUgxMWMwLjEsMCwwLjEsMCwwLjItMC4xIGMwLjEtMC4xLDAuMS0wLjEsMC4xLTAuMlY1LjNjMCwwLDAsMCwwLDBjMC0wLjEtMC4xLTAuMy0wLjMtMC4zSDAuM2MtMC4xLDAtMC4xLDAtMC4yLDAuMUMwLDUuMiwwLDUuMywwLDUuM0wwLDUuM3ogTTAsMC44djEuNyBjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMWgxMC43YzAuMSwwLDAuMSwwLDAuMi0wLjFjMCwwLDAuMS0wLjEsMC4xLTAuMlYwLjhjMC0wLjEsMC0wLjEtMC4xLTAuMiBjMC0wLjEtMC4xLTAuMS0wLjItMC4xSDAuM2MtMC4xLDAtMC4xLDAtMC4yLDAuMUMwLDAuNywwLDAuOCwwLDAuOEwwLDAuOHpcIi8+PC9nPjwvc3ZnPicsXG4gICAgICBsaXN0X251bWJlcjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNyAxNS43XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48cGF0aCBkPVwiTTAsMTEuNWwwLDEuN2MwLDAuMSwwLDAuMSwwLjEsMC4yYzAuMSwwLjEsMC4xLDAuMSwwLjIsMC4xSDExYzAuMSwwLDAuMiwwLDAuMi0wLjFjMC4xLTAuMSwwLjEtMC4xLDAuMS0wLjJ2LTEuNyBjMC0wLjEsMC0wLjEtMC4xLTAuMmMtMC4xLTAuMS0wLjEtMC4xLTAuMi0wLjFIMC4zYy0wLjEsMC0wLjIsMC0wLjIsMC4xQzAsMTEuNCwwLDExLjQsMCwxMS41TDAsMTEuNXogTTAsOC43YzAsMC4xLDAsMC4xLDAuMSwwLjIgQzAuMSw4LjksMC4yLDksMC4zLDlIMTFjMC4xLDAsMC4yLDAsMC4yLTAuMWMwLjEtMC4xLDAuMS0wLjEsMC4xLTAuMlY3YzAtMC4xLDAtMC4xLTAuMS0wLjJjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xbC0xMC43LDAgYy0wLjEsMC0wLjIsMC0wLjIsMC4xQzAsNi44LDAsNi45LDAsN0MwLDcsMCw4LjcsMCw4Ljd6IE0wLDIuNXYxLjdjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLDAsMC4xLDAuMSwwLjIsMC4xbDEwLjcsMCBjMC4xLDAsMC4yLDAsMC4yLTAuMWMwLjEtMC4xLDAuMS0wLjEsMC4xLTAuMlYyLjRjMC0wLjEsMC0wLjEtMC4xLTAuMmMtMC4xLDAtMC4xLDAtMC4yLDBIMC4zYy0wLjEsMC0wLjEsMC0wLjIsMCBDMCwyLjMsMCwyLjQsMCwyLjVMMCwyLjV6XCIvPjwvZz48cGF0aCBkPVwiTTE1LjYsMTQuMmMwLTAuMy0wLjEtMC42LTAuMy0wLjhjLTAuMi0wLjItMC40LTAuNC0wLjctMC40bDAuOS0xdi0wLjhoLTIuOXYxLjNoMC45di0wLjVoMC45bDAsMGMtMC4xLDAuMS0wLjIsMC4yLTAuMywwLjMgcy0wLjIsMC4zLTAuNCwwLjVsLTAuMywwLjNsMC4yLDAuNWMwLjYsMCwwLjksMC4xLDAuOSwwLjVjMCwwLjEtMC4xLDAuMy0wLjIsMC40Yy0wLjEsMC4xLTAuMywwLjEtMC40LDAuMWMtMC4zLDAtMC43LTAuMS0wLjktMC4zIGwtMC41LDAuOGMwLjQsMC40LDAuOSwwLjYsMS41LDAuNmMwLjQsMCwwLjktMC4xLDEuMi0wLjRDMTUuNSwxNS4xLDE1LjYsMTQuNywxNS42LDE0LjJ6XCIvPjxwYXRoIGQ9XCJNMTUuNiw4LjdoLTAuOXYwLjVoLTEuMWMwLTAuMiwwLjItMC40LDAuNC0wLjVjMC4yLTAuMiwwLjQtMC4zLDAuNy0wLjRjMC4zLTAuMiwwLjUtMC4zLDAuNy0wLjZjMC4yLTAuMiwwLjMtMC41LDAuMy0wLjggYzAtMC40LTAuMi0wLjgtMC41LTFjLTAuNi0wLjQtMS40LTAuNS0yLTAuMWMtMC4zLDAuMi0wLjUsMC40LTAuNiwwLjdMMTMuMyw3YzAuMS0wLjMsMC40LTAuNSwwLjctMC41YzAuMSwwLDAuMywwLDAuMywwLjEgYzAuMSwwLjEsMC4xLDAuMiwwLjEsMC4zYzAsMC4yLTAuMSwwLjMtMC4yLDAuNGMtMC4yLDAuMS0wLjMsMC4zLTAuNSwwLjRjLTAuMiwwLjEtMC40LDAuMy0wLjYsMC40Yy0wLjIsMC4yLTAuNCwwLjQtMC41LDAuNiBjLTAuMSwwLjItMC4yLDAuNS0wLjIsMC44YzAsMC4yLDAsMC4zLDAsMC41aDMuMkwxNS42LDguN0wxNS42LDguN3pcIi8+PHBhdGggZD1cIk0xNS42LDMuNmgtMVYwaC0wLjlsLTEuMiwxLjFsMC42LDAuN2MwLjItMC4xLDAuMy0wLjMsMC40LTAuNWwwLDB2Mi4yaC0wLjl2MC45aDNMMTUuNiwzLjZMMTUuNiwzLjZ6XCIvPjwvc3ZnPicsXG4gICAgICBsaW5rOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDE1LjdcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNNy40LDkuOWwzLjEsMy4xYzAuMywwLjMsMC44LDAuNSwxLjMsMC41YzAuNSwwLDAuOS0wLjIsMS4zLTAuNWMwLDAsMCwwLDAsMGMwLjctMC43LDAuNy0xLjksMC0yLjZMOS45LDcuMyBjMC0wLjEsMC0wLjIsMC0wLjNDOS45LDcsMTAsNywxMC4xLDdsMi4yLTAuMmMwLjEsMCwwLjEsMCwwLjIsMC4xbDIuMSwyLjFjMC40LDAuNCwwLjcsMC44LDAuOSwxLjNjMC4yLDAuNSwwLjMsMSwwLjMsMS41IGMwLDAuNS0wLjEsMS0wLjMsMS41Yy0wLjgsMi0zLjIsMy01LjIsMi4yYy0wLjUtMC4yLTAuOS0wLjUtMS4zLTAuOWwtMi4xLTIuMWMtMC4xLDAtMC4xLTAuMS0wLjEtMC4yTDcsMTAuMUM3LDEwLDcsOS45LDcuMSw5LjkgQzcuMiw5LjgsNy4zLDkuOSw3LjQsOS45eiBNMS4yLDEuMUMxLjYsMC43LDIsMC40LDIuNSwwLjNjMS0wLjQsMi4xLTAuNCwzLjEsMEM2LDAuNCw2LjUsMC43LDYuOCwxLjFMOSwzLjJDOSwzLjMsOS4xLDMuMyw5LDMuNCBMOC44LDUuNmMwLDAuMS0wLjEsMC4yLTAuMiwwLjJjLTAuMSwwLjEtMC4yLDAuMS0wLjMsMEw1LjMsMi43QzUsMi4zLDQuNSwyLjEsNCwyLjFjLTAuNSwwLTAuOSwwLjItMS4zLDAuNWMwLDAsMCwwLDAsMCBDMiwzLjQsMiw0LjUsMi43LDUuMmwzLjEsMy4yYzAuMSwwLjEsMC4xLDAuMiwwLDAuM2MwLDAuMS0wLjEsMC4xLTAuMiwwLjFMMy41LDlDMy40LDksMy40LDksMy4zLDguOUwxLjIsNi44YzAsMCwwLDAsMCwwIEMtMC40LDUuMi0wLjQsMi43LDEuMiwxLjFMMS4yLDEuMXogTTE0LjMsNmgtMi42YzAsMCwwLDAsMCwwYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJjMC0wLjEsMC0wLjIsMC4xLTAuM2wyLjUtMC43IGMwLjEsMCwwLjEsMCwwLjIsMGMwLjEsMCwwLjEsMC4xLDAuMSwwLjJsMC4xLDAuOGMwLDAuMSwwLDAuMS0wLjEsMC4yQzE0LjUsNiwxNC40LDYsMTQuMyw2TDE0LjMsNnogTTEwLjIsNC4xIGMwLDAuMS0wLjEsMC4yLTAuMiwwLjJsMCwwYzAsMCwwLDAsMCwwQzkuOCw0LjIsOS43LDQuMSw5LjgsNEw5LjcsMS40YzAtMC4xLDAtMC4xLDAuMS0wLjJjMC4xLDAsMC4xLDAsMC4yLDBoMC44IGMwLjEsMCwwLjEsMCwwLjIsMC4xYzAsMC4xLDAsMC4xLDAsMC4yTDEwLjIsNC4xTDEwLjIsNC4xeiBNMS41LDkuN2gxLjNoMS4zYzAuMSwwLDAuMiwwLjEsMC4yLDAuMmMwLDAuMSwwLDAuMi0wLjEsMC4zbC0yLjUsMC42IEgxLjZjMCwwLTAuMSwwLTAuMSwwYy0wLjEsMC0wLjEtMC4xLTAuMS0wLjJMMS4yLDkuOWMwLTAuMSwwLTAuMSwwLjEtMC4yYzAtMC4xLDAuMS0wLjEsMC4yLTAuMUwxLjUsOS43eiBNNS42LDExLjYgQzUuNiwxMS42LDUuNiwxMS42LDUuNiwxMS42YzAtMC4xLDAuMS0wLjIsMC4zLTAuMWMwLDAsMCwwLDAsMGMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi42YzAsMC4xLDAsMC4xLTAuMSwwLjIgYzAsMC0wLjEsMC4xLTAuMiwwLjFMNSwxNC41Yy0wLjEsMC0wLjEsMC0wLjItMC4xYzAtMC4xLDAtMC4xLDAtMC4yTDUuNiwxMS42TDUuNiwxMS42elwiLz48L2c+PC9zdmc+JyxcbiAgICAgIHVubGluazogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNyAxNS43XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48Zz48cGF0aCBkPVwiTTE0LjYsMTQuNmMxLjYtMS42LDEuNi00LjEsMC01LjdsMCwwbC0zLjEtMy4xbC0xLjIsMS42bDIuOSwyLjljMC40LDAuNCwwLjYsMC45LDAuNiwxLjVjMCwxLjEtMC45LDIuMS0yLjEsMi4xbDAsMCBjLTAuNiwwLTEuMS0wLjItMS41LTAuNmwtMC40LTAuNGwtMS43LDFsMC44LDAuOEMxMC40LDE2LjIsMTMsMTYuMiwxNC42LDE0LjZMMTQuNiwxNC42TDE0LjYsMTQuNnogTTMuNiw2QzMsNS45LDIuNiw1LjUsMi4zLDUgUzEuOSw0LDIuMSwzLjRDMi4zLDIuOSwyLjYsMi41LDMsMi4yQzMuNSwyLDQuMSwxLjksNC42LDJsMy4zLDEuNGwwLjUtMkw1LjEsMC4xQzQtMC4xLDIuOSwwLDIsMC41QzEuMSwxLjEsMC40LDEuOSwwLjIsMyBDLTAuMSw0LDAsNS4xLDAuNiw2QzEuMSw2LjksMS45LDcuNiwzLDcuOGw1LjQsMmwwLjUtMkw2LjIsNi45TDMuNiw2elwiLz48L2c+PC9zdmc+J1xuICAgfSxcbiAgIC8vIGNvbW1vbiwgbHRyIGljb25cbiAgIHJlZG86ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjU5IDE0LjE4XCI+PGc+PHBhdGggZD1cIk0xMS41OCwxOC40OGE2Ljg0LDYuODQsMCwxLDEsNi44NS02Ljg1czAsLjI2LDAsLjY3YTgsOCwwLDAsMS0uMjIsMS40NGwuOTEtLjU1YS41MS41MSwwLDAsMSwuMzYsMCwuNDUuNDUsMCwwLDEsLjI5LjIyLjQ3LjQ3LDAsMCwxLC4wNi4zNi40NS40NSwwLDAsMS0uMjIuMjlMMTcuNDIsMTUuM2wtLjEyLDBoLS4yNWwtLjEyLS4wNi0uMDktLjA5LS4wNi0uMDcsMC0uMDYtLjg3LTIuMTJhLjQzLjQzLDAsMCwxLDAtLjM3LjQ5LjQ5LDAsMCwxLC4yNy0uMjYuNDEuNDEsMCwwLDEsLjM2LDAsLjUzLjUzLDAsMCwxLC4yNy4yNmwuNDQsMS4wOWE2LjUxLDYuNTEsMCwwLDAsLjI0LTEuMzYsNC41OCw0LjU4LDAsMCwwLDAtLjY0LDUuODMsNS44MywwLDAsMC0xLjczLTQuMTcsNS44OCw1Ljg4LDAsMCwwLTguMzQsMCw1LjksNS45LDAsMCwwLDQuMTcsMTAuMDYuNTEuNTEsMCwwLDEsLjMzLjE1LjQ4LjQ4LDAsMCwxLDAsLjY4LjUzLjUzLDAsMCwxLS4zMy4xMlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDggLTQuNTQpXCIvPjwvZz48L3N2Zz4nLFxuICAgdW5kbzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNTkgMTQuMThcIj48Zz48cGF0aCBkPVwiTTUsMTRhLjQzLjQzLDAsMCwxLS4yMi0uMjkuNDYuNDYsMCwwLDEsLjA2LS4zNi40My40MywwLDAsMSwuMjktLjIyLjU2LjU2LDAsMCwxLC4zNiwwbC45MS41NWE4LjI3LDguMjcsMCwwLDEtLjIyLTEuNDUsNS4wNyw1LjA3LDAsMCwxLDAtLjY3QTYuODUsNi44NSwwLDEsMSwxMywxOC40N2EuNDQuNDQsMCwwLDEtLjMzLS4xMy40OC40OCwwLDAsMSwwLS42OC41MS41MSwwLDAsMSwuMzMtLjE1QTUuODksNS44OSwwLDAsMCwxNy4xNSw3LjQ1YTUuODgsNS44OCwwLDAsMC04LjMzLDAsNS44NCw1Ljg0LDAsMCwwLTEuNzMsNC4xN3MwLC4yNSwwLC42NWE2LjQ5LDYuNDksMCwwLDAsLjI0LDEuMzdsLjQ0LTEuMDlhLjU3LjU3LDAsMCwxLC4yNy0uMjYuNDEuNDEsMCwwLDEsLjM2LDAsLjUzLjUzLDAsMCwxLC4yNy4yNi40My40MywwLDAsMSwwLC4zN0w3LjgyLDE1bDAsLjA5LS4wOS4wOS0uMS4wNy0uMDYsMEg3LjI4bC0uMTMsMC0xLjA5LS42M2MtLjY1LS4zNi0xLS41Ny0xLjEtLjYzWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40OSAtNC41MylcIi8+PC9nPjwvc3ZnPicsXG4gICBib2xkOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMS43NiAxNS43NVwiPjxnPjxwYXRoIGQ9XCJNNi40LDMuNzZWMTkuNWg2Ljc2YTUuNTUsNS41NSwwLDAsMCwyLS4zMiw0LjkzLDQuOTMsMCwwLDAsMS41Mi0xLDQuMjcsNC4yNywwLDAsMCwxLjQ4LTMuMzQsMy44NywzLjg3LDAsMCwwLS42OS0yLjM3LDUuNzQsNS43NCwwLDAsMC0uNzEtLjgzLDMuNDQsMy40NCwwLDAsMC0xLjEtLjY1LDMuNiwzLjYsMCwwLDAsMS41OC0xLjM2LDMuNjYsMy42NiwwLDAsMCwuNTMtMS45MywzLjcsMy43LDAsMCwwLTEuMjEtMi44Nyw0LjY1LDQuNjUsMCwwLDAtMy4yNS0xLjFINi40Wm0yLjQ2LDYuNjVWNS41N2gzLjUyYTQuOTEsNC45MSwwLDAsMSwxLjM2LjE1LDIuMywyLjMsMCwwLDEsLjg1LjQ1LDIuMDYsMi4wNiwwLDAsMSwuNzQsMS43MSwyLjMsMi4zLDAsMCwxLS43OCwxLjkyLDIuNTQsMi41NCwwLDAsMS0uODYuNDYsNC43LDQuNywwLDAsMS0xLjMyLjE1SDguODZabTAsNy4yN1YxMi4xNUgxMi43YTQuNTYsNC41NiwwLDAsMSwxLjM4LjE3LDMuNDMsMy40MywwLDAsMSwuOTUuNDksMi4yOSwyLjI5LDAsMCwxLC45MiwyLDIuNzMsMi43MywwLDAsMS0uODMsMi4xLDIuNjYsMi42NiwwLDAsMS0uODMuNTgsMy4yNSwzLjI1LDAsMCwxLTEuMjYuMkg4Ljg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNi40IC0zLjc1KVwiLz48L2c+PC9zdmc+JyxcbiAgIHVuZGVybGluZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgOS43OCAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTQuNjQsMy43NmgyLjUydjcuNzJhNC41MSw0LjUxLDAsMCwxLS41OSwyLjMxLDMuNzYsMy43NiwwLDAsMS0xLjcxLDEuNTMsNi4xMiw2LjEyLDAsMCwxLTIuNjQuNTMsNSw1LDAsMCwxLTMuNTctMS4xOCw0LjE3LDQuMTcsMCwwLDEtMS4yNy0zLjI0VjMuNzZIOS45djcuM2EzLDMsMCwwLDAsLjU1LDIsMi4zLDIuMywwLDAsMCwxLjgzLjY1LDIuMjYsMi4yNiwwLDAsMCwxLjgtLjY1LDMuMDksMy4wOSwwLDAsMCwuNTUtMlYzLjc2Wm0yLjUyLDEzLjMxVjE5LjVINy4zOVYxNy4wOGg5Ljc3WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNy4zOCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBpdGFsaWM6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDEwLjQ5IDE1Ljc2XCI+PGc+PHBhdGggZD1cIk0xNy4xNiwzLjc5bC4zNywwLS4wNi4zOC0uMTQuNTJBMTAsMTAsMCwwLDEsMTYuMjEsNWE5LjM3LDkuMzcsMCwwLDAtMSwuMzIsNi42OCw2LjY4LDAsMCwwLS4yNS44OWMtLjA2LjMxLS4xMS41OS0uMTQuODUtLjMsMS4zNi0uNTIsMi40MS0uNjgsMy4xNGwtLjYxLDMuMThMMTMuMSwxNWwtLjQzLDIuNC0uMTIuNDZhLjYyLjYyLDAsMCwwLDAsLjI4Yy40NC4xLjg1LjE3LDEuMjMuMjJsLjY4LjExYTQuNTEsNC41MSwwLDAsMS0uMDguNmwtLjA5LjQyYS45Mi45MiwwLDAsMC0uMjMsMGwtLjQzLDBhMS4zNywxLjM3LDAsMCwxLS4yOSwwYy0uMTMsMC0uNjMtLjA4LTEuNDktLjE2bC0yLDBjLS4yOCwwLS44NywwLTEuNzguMTJMNywxOS41bC4xNy0uODguOC0uMkE2LjYxLDYuNjEsMCwwLDAsOS4xOSwxOCwyLjYyLDIuNjIsMCwwLDAsOS42MSwxN2wuMjgtMS40MS41OC0yLjc1LjEyLS42NmMuMDUtLjMuMTEtLjU4LjE3LS44NnMuMTItLjUxLjE3LS42OWwuMTItLjQ4LjEyLS40My4zMS0xLjYuMTUtLjY1LjMxLTEuOTFWNS4xNGEzLjg2LDMuODYsMCwwLDAtMS40OC0uMjlsLS4zOCwwLC4yLTEuMDYsMy4yNC4xNC43NSwwYy40NSwwLDEuMTgsMCwyLjE4LS4wOS4yMywwLC40NiwwLC43MSwwWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNy4wNCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBzdHJpa2U6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE0LjlcIj48Zz48cGF0aCBkPVwiTTEyLjk0LDEzYTQuMjcsNC4yNywwLDAsMSwxLjMyLjU4LDEuNDYsMS40NiwwLDAsMSwuNTUsMS4yLDEuODcsMS44NywwLDAsMS0uODgsMS42NCw0LjE3LDQuMTcsMCwwLDEtMi4zNS41OSw0LjQ0LDQuNDQsMCwwLDEtMi43NC0uNzEsMi43MiwyLjcyLDAsMCwxLTEtMi4xN0g1LjU3YTQuNTYsNC41NiwwLDAsMCwxLjU1LDMuNyw3LDcsMCwwLDAsNC40NywxLjIzLDYsNiwwLDAsMCw0LjA3LTEuMyw0LjI0LDQuMjQsMCwwLDAsMS41Mi0zLjM3LDQsNCwwLDAsMC0uMjYtMS40aC00Wk02LjM3LDEwLjI0QTMuMjcsMy4yNywwLDAsMSw2LDguNjhhNCw0LDAsMCwxLDEuNDgtMy4zLDUuOTIsNS45MiwwLDAsMSwzLjg4LTEuMjEsNS41OCw1LjU4LDAsMCwxLDMuOTEsMS4yNCw0LjM2LDQuMzYsMCwwLDEsMS40NSwzLjE3SDE0LjQ0YTIuMTIsMi4xMiwwLDAsMC0uOTEtMS44MSw0LjQ1LDQuNDUsMCwwLDAtMi40NC0uNTUsMy42OSwzLjY5LDAsMCwwLTIsLjUxQTEuNjQsMS42NCwwLDAsMCw4LjMsOC4yMmExLjMsMS4zLDAsMCwwLC40OCwxLjExLDcsNywwLDAsMCwyLjEuNzhsLjI4LjA2LjI4LjA4SDYuMzdabTEzLjA5LjY4YS43My43MywwLDAsMSwuNDkuMjEuNjYuNjYsMCwwLDEsLjIuNDguNjQuNjQsMCwwLDEtLjIuNDguNzEuNzEsMCwwLDEtLjQ5LjE5SDUuMWEuNjcuNjcsMCwwLDEtLjQ5LS4xOS42Ni42NiwwLDAsMS0uMi0uNDguNjQuNjQsMCwwLDEsLjItLjQ4LjczLjczLDAsMCwxLC40OS0uMjFIMTkuNDZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjE3KVwiLz48L2c+PC9zdmc+JyxcbiAgIHN1YnNjcmlwdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTQuNjFcIj48Zz48cGF0aCBkPVwiTTE1LjM4LDQuMzNIMTIuNzRMMTEuMTksN2MtLjI4LjQ2LS41MS44Ny0uNjksMS4yMUwxMC4wNyw5aDBsLS40NC0uOGMtLjIyLS40LS40NS0uODEtLjcxLTEuMjNMNy4zNCw0LjMzSDQuNjhMOC4yNiwxMCw0LjQsMTYuMDhINy4xbDEuNjktMi44M2MuMzgtLjYzLjcyLTEuMjIsMS0xLjc4bC4yNS0uNDZoMGwuNDkuOTJjLjI0LjQ1LjQ4Ljg5Ljc0LDEuMzJMMTMsMTYuMDhoMi42MUwxMS44NCwxMGwxLjc3LTIuODQsMS43Ny0yLjg1Wm00Ljc3LDEzLjc1SDE3di0uMTVjMC0uNC4wNS0uNjQuMTYtLjcyYTQuNDIsNC40MiwwLDAsMSwxLjE2LS4zMSwzLjMsMy4zLDAsMCwwLDEuNTQtLjU2QTEuODQsMS44NCwwLDAsMCwyMC4xNSwxNWExLjc4LDEuNzgsMCwwLDAtLjQ0LTEuNDFBMi44LDIuOCwwLDAsMCwxOCwxMy4yNWEyLjcxLDIuNzEsMCwwLDAtMS42OS4zNywxLjgzLDEuODMsMCwwLDAtLjQ0LDEuNDN2LjIzSDE3di0uMjNxMC0uNjMuMTgtLjc4YTEuNjIsMS42MiwwLDAsMSwuODgtLjE1LDEuNTksMS41OSwwLDAsMSwuODguMTVxLjE4LjE1LjE4Ljc1dC0uMTguNzVhMy41OCwzLjU4LDAsMCwxLTEuMTguMzMsMy4zMywzLjMzLDAsMCwwLTEuNTIuNTEsMS41NywxLjU3LDAsMCwwLS4zMiwxLjE4djEuMTVoNC4yN3YtLjg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC00LjMzKVwiLz48L2c+PC9zdmc+JyxcbiAgIHN1cGVyc2NyaXB0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NSAxNS40MlwiPjxnPjxwYXRoIGQ9XCJNMTIsMTMuMTRsMy42MS01LjgxSDEyLjk0TDExLjMzLDEwYy0uMjguNDYtLjUxLjg4LS42OSwxLjI1bC0uNDUuODNoMGwtLjQ1LS44NWMtLjIyLS40MS0uNDUtLjgyLS43MS0xLjI0TDcuNCw3LjMzSDQuNjhsMy42Niw1LjgxTDQuNCwxOS4zM0g3LjE0bDEuNzQtMi44N3EuNTgtMSwxLTEuODNsLjI1LS40OGgwbC41MS45NC43NSwxLjM3LDEuNzIsMi44N2gyLjY3bC0xLjkyLTMuMDljLTEuMTItMS44LTEuNzYtMi44My0xLjkyLTMuMVptNC44NC00LjQxaDBsMCwuMTVoMy4yN3YuODZIMTUuNzdWOC41OGExLjY2LDEuNjYsMCwwLDEsLjMzLTEuMjIsMy41MSwzLjUxLDAsMCwxLDEuNTYtLjUxLDMuNjgsMy42OCwwLDAsMCwxLjIxLS4zNGMuMTMtLjEuMTktLjM2LjE5LS43N1MxOSw1LjA3LDE4Ljg3LDVBMS42MywxLjYzLDAsMCwwLDE4LDQuOGExLjU4LDEuNTgsMCwwLDAtLjkxLjE3Yy0uMTMuMTEtLjE5LjM4LS4xOS44VjZIMTUuNzhWNS43NmExLjg3LDEuODcsMCwwLDEsLjQ1LTEuNDdBMi44NCwyLjg0LDAsMCwxLDE4LDMuOTFhMi44LDIuOCwwLDAsMSwxLjcyLjM4LDEuODQsMS44NCwwLDAsMSwuNDUsMS40NCwxLjkxLDEuOTEsMCwwLDEtLjM0LDEuMzUsMy4yNCwzLjI0LDAsMCwxLTEuNTguNTdBMy42OSwzLjY5LDAsMCwwLDE3LDhjLS4xMi4xLS4xNy4zNS0uMTcuNzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTMuOTEpXCIvPjwvZz48L3N2Zz4nLFxuICAgZXJhc2U6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEzLjc2XCI+PGc+PHBhdGggZD1cIk0xMy42OSwxNy4yaDYuNDZ2MS4zMUg4LjU2TDQuNDEsMTQuMzcsMTQsNC43NWw2LjA2LDYuMDZMMTYuODksMTRsLTMuMiwzLjE5Wm0tNC42MSwwaDIuNzdMMTQuMDksMTUsOS44OCwxMC43NSw2LjI1LDE0LjM4bDEuNDEsMS40MWMuODQuODIsMS4zMSwxLjI5LDEuNDIsMS40MVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuNzUpXCIvPjwvZz48L3N2Zz4nLFxuICAgaW5kZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMi4zNlwiPjxnPjxwYXRoIGQ9XCJNMTkuODcsMTUuNTdhLjI3LjI3LDAsMCwxLC4xOS4wOC4yNS4yNSwwLDAsMSwuMDguMTl2MS42OWEuMjcuMjcsMCwwLDEtLjA4LjE5LjI1LjI1LDAsMCwxLS4xOS4wOEg0LjY4YS4yNy4yNywwLDAsMS0uMTktLjA4LjI1LjI1LDAsMCwxLS4wOC0uMTlWMTUuODRhLjI3LjI3LDAsMCwxLC4yNy0uMjdIMTkuODdaTTcuNSwxNC40NWEuMjUuMjUsMCwwLDEtLjItLjA5TDQuNzYsMTEuODRhLjI5LjI5LDAsMCwxLDAtLjRMNy4zLDguOWEuMjkuMjksMCwwLDEsLjQsMCwuMzEuMzEsMCwwLDEsLjA3LjJ2NS4wNmEuMzIuMzIsMCwwLDEtLjA4LjIxLjI2LjI2LDAsMCwxLS4xOS4wOFpNMTkuODcsOC44MmEuMjcuMjcsMCwwLDEsLjE5LjA4LjI1LjI1LDAsMCwxLC4wOC4xOXYxLjY5YS4yNy4yNywwLDAsMS0uMDguMTkuMjUuMjUsMCwwLDEtLjE5LjA4SDEwLjMxYS4yNy4yNywwLDAsMS0uMjctLjI3VjkuMWEuMjcuMjcsMCwwLDEsLjI3LS4yN2g5LjU2Wm0wLDMuMzdhLjI3LjI3LDAsMCwxLC4xOS4wOC4yOC4yOCwwLDAsMSwuMDguMjF2MS42OGEuMzIuMzIsMCwwLDEtLjA4LjIxLjI1LjI1LDAsMCwxLS4xOS4wOEgxMC4zMWEuMjcuMjcsMCwwLDEtLjE5LS4wOC4zLjMsMCwwLDEtLjA4LS4yMVYxMi40OGEuMzIuMzIsMCwwLDEsLjA4LS4yMS4yNC4yNCwwLDAsMSwuMTktLjA4aDkuNTZabS4yLTYuNjZhLjI4LjI4LDAsMCwxLC4wOC4yVjcuNDFhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNS4yNSwwLDAsMS0uMTkuMDhINC42OGEuMjcuMjcsMCwwLDEtLjE5LS4wOC4zLjMsMCwwLDEtLjA4LS4yMVY1LjczYS4zMi4zMiwwLDAsMSwuMDgtLjIxLjI1LjI1LDAsMCwxLC4xOS0uMDhIMTkuODdhLjI4LjI4LDAsMCwxLC4yLjA5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNS40NClcIi8+PC9nPjwvc3ZnPicsXG4gICBvdXRkZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMi4zNlwiPjxnPjxwYXRoIGQ9XCJNNC42OCwxNC40NWEuMjcuMjcsMCwwLDEtLjE5LS4wOC4zLjMsMCwwLDEtLjA4LS4yMVY5LjFhLjI3LjI3LDAsMCwxLC4wOC0uMTkuMjguMjgsMCwwLDEsLjItLjA4LjI1LjI1LDAsMCwxLC4xOS4wN2wyLjU0LDIuNTRhLjI5LjI5LDAsMCwxLDAsLjRMNC44OCwxNC4zNmEuMjQuMjQsMCwwLDEtLjIuMDlabTE1LjE5LDEuMTJhLjI3LjI3LDAsMCwxLC4xOS4wOC4yNS4yNSwwLDAsMSwuMDguMTl2MS42OWEuMjcuMjcsMCwwLDEtLjA4LjE5LjI1LjI1LDAsMCwxLS4xOS4wOEg0LjY4YS4yNy4yNywwLDAsMS0uMTktLjA4LjI1LjI1LDAsMCwxLS4wOC0uMTlWMTUuODRhLjI3LjI3LDAsMCwxLC4yNy0uMjdIMTkuODdabTAtMy4zOGEuMjcuMjcsMCwwLDEsLjE5LjA4LjI4LjI4LDAsMCwxLC4wOC4yMXYxLjY4YS4zMi4zMiwwLDAsMS0uMDguMjEuMjUuMjUsMCwwLDEtLjE5LjA4SDEwLjMxYS4yNy4yNywwLDAsMS0uMTktLjA4LjMuMywwLDAsMS0uMDgtLjIxVjEyLjQ4YS4zMi4zMiwwLDAsMSwuMDgtLjIxLjI0LjI0LDAsMCwxLC4xOS0uMDhoOS41NlptMC0zLjM3YS4yNy4yNywwLDAsMSwuMTkuMDguMjUuMjUsMCwwLDEsLjA4LjE5djEuNjlhLjI3LjI3LDAsMCwxLS4wOC4xOS4yNS4yNSwwLDAsMS0uMTkuMDhIMTAuMzFhLjI3LjI3LDAsMCwxLS4yNy0uMjdWOS4xYS4yNy4yNywwLDAsMSwuMjctLjI3aDkuNTZabS4yLTMuMjlhLjI4LjI4LDAsMCwxLC4wOC4yVjcuNDFhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNS4yNSwwLDAsMS0uMTkuMDhINC42OGEuMjcuMjcsMCwwLDEtLjE5LS4wOC4zLjMsMCwwLDEtLjA4LS4yMVY1LjczYS4zMi4zMiwwLDAsMSwuMDgtLjIxLjI1LjI1LDAsMCwxLC4xOS0uMDhIMTkuODdhLjI4LjI4LDAsMCwxLC4yLjA5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNS40NClcIi8+PC9nPjwvc3ZnPicsXG4gICBleHBhbnNpb246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xMS44LDEzLjA2bC01LjEsNS4xSDkuNTFWMTkuNUg0LjQxVjE0LjRINS43NXYyLjgxTDguMywxNC42NnEyLjI1LTIuMjMsMi41NS0yLjU1Wm04LjM1LTkuM3Y1LjFIMTguODFWNi4wNWwtNS4xLDUuMS0xLTEsNS4xLTUuMUgxNS4wNVYzLjc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICByZWR1Y3Rpb246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xNC45MSwxMGgyLjg3djEuMzhIMTIuNTVWNi4xMmgxLjM4VjlsNS4yNC01LjI0LjQ4LjQ5LjQ5LjQ4Wk02Ljc3LDExLjkySDEydjUuMjNIMTAuNjJWMTQuMjZMNS4zNywxOS41bC0xLTFMOS42MywxMy4zSDYuNzdaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgY29kZV92aWV3OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43MyAxMS44XCI+PGc+PHBhdGggZD1cIk04LjA5LDcuOTRhLjc2Ljc2LDAsMCwxLC41My4yMi43Mi43MiwwLDAsMSwuMjEuNTIuNzYuNzYsMCwwLDEtLjIyLjU0TDYuMTgsMTEuNjNsMi40MywyLjQ0YS42OS42OSwwLDAsMSwuMi41MS42Ni42NiwwLDAsMS0uMjEuNTEuNzUuNzUsMCwwLDEtLjUxLjIyLjYzLjYzLDAsMCwxLS41MS0uMjFoMEw0LjYzLDEyLjE1YS43LjcsMCwwLDEtLjIyLS41My42Ny42NywwLDAsMSwuMjUtLjU1TDcuNTcsOC4xNmEuODIuODIsMCwwLDEsLjUyLS4yMlptMTIuMDUsMy42OWEuNy43LDAsMCwxLS4yMy41MkwxNywxNS4xaDBhLjY2LjY2LDAsMCwxLS41MS4yMS43My43MywwLDAsMS0uNTEtLjIyLjc1Ljc1LDAsMCwxLS4yMi0uNTEuNjMuNjMsMCwwLDEsLjIxLS41MWwyLjQzLTIuNDRMMTUuOTIsOS4yMmEuNzMuNzMsMCwwLDEtLjIyLS41M0EuNzQuNzQsMCwwLDEsMTcsOC4xOGgwbDIuOTEsMi45MWEuNjcuNjcsMCwwLDEsLjI3LjU0Wm0tNS45LTUuOWEuNzMuNzMsMCwwLDEsLjYxLjMyLjcxLjcxLDAsMCwxLC4wNy42OEwxMSwxN2ExLDEsMCwwLDEtLjIyLjMyLjYuNiwwLDAsMS0uMzUuMTYuNzUuNzUsMCwwLDEtLjY5LS4yNi42OS42OSwwLDAsMS0uMTItLjcyTDEzLjU2LDYuMjNhLjc1Ljc1LDAsMCwxLC4yNi0uMzUuNzQuNzQsMCwwLDEsLjQyLS4xNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTUuNzMpXCIvPjwvZz48L3N2Zz4nLFxuICAgcHJldmlldzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjUgMTUuNjZcIj48Zz48cGF0aCBkPVwiTTE2LjE5LDE0LjQzbDIuNDksMi40OWEuNzMuNzMsMCwwLDEsLjIxLjUyLjY3LjY3LDAsMCwxLS4yMi41MS43LjcsMCwwLDEtLjUyLjIyLjY5LjY5LDAsMCwxLS41MS0uMjFsLTIuNDktMi40OGE1LjE3LDUuMTcsMCwwLDEtMS4zNC42OSw0LjY0LDQuNjQsMCwwLDEtMS40OC4yNCw0Ljc4LDQuNzgsMCwxLDEsMC05LjU2LDQuNzksNC43OSwwLDAsMSwxLjg0LjM2LDQuOSw0LjksMCwwLDEsMS41NiwxLDQuNzcsNC43NywwLDAsMSwuNDYsNi4xOFpNMTAsMTRhMy4zLDMuMywwLDAsMCwyLjM0LjkzQTMuMzcsMy4zNywwLDAsMCwxNC43LDE0YTMuMywzLjMsMCwwLDAtMS4wOC01LjQxLDMuNDcsMy40NywwLDAsMC0yLjU2LDBBMywzLDAsMCwwLDEwLDkuMjgsMy4zMSwzLjMxLDAsMCwwLDEwLDE0Wk0xNiw0YTMuODYsMy44NiwwLDAsMSwyLjc3LDEuMTRBMy45LDMuOSwwLDAsMSwyMCw3Ljg1djRhLjc3Ljc3LDAsMCwxLS4yMi41My43LjcsMCwwLDEtLjUyLjIxLjcyLjcyLDAsMCwxLS43NC0uNzR2LTRhMi40NiwyLjQ2LDAsMCwwLS43Mi0xLjczQTIuMzcsMi4zNywwLDAsMCwxNiw1LjQ1SDguNTNBMi40MiwyLjQyLDAsMCwwLDYuMDgsNy44OXY3LjUyYTIuNDEsMi40MSwwLDAsMCwuNzEsMS43MywyLjQ2LDIuNDYsMCwwLDAsMS43NC43Mmg0LjA4YS43My43MywwLDAsMSwwLDEuNDZIOC41M2EzLjg1LDMuODUsMCwwLDEtMi43OC0xLjE0QTMuOTMsMy45MywwLDAsMSw0LjYsMTUuNFY3Ljg3QTMuOTQsMy45NCwwLDAsMSw1Ljc2LDUuMDksMy44OCwzLjg4LDAsMCwxLDguNTQsNEgxNlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDUgLTMuOClcIi8+PC9nPjwvc3ZnPicsXG4gICBwcmludDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTYuMDUgMTYuMDRcIj48Zz48cGF0aCBkPVwiTTE5Ljc2LDE1Ljg0YTEuMjksMS4yOSwwLDAsMCwuMzktLjkyVjguMzVBMi4wNSwyLjA1LDAsMCwwLDE5LjU3LDdhMS45MywxLjkzLDAsMCwwLTEuMzgtLjU3SDYuMzdhMS45NSwxLjk1LDAsMCwwLTIsMnY2LjU2YTEuMjMsMS4yMywwLDAsMCwuMzguOTIsMS4zNSwxLjM1LDAsMCwwLC45My4zOGgyVjE0LjlsLTIsMFY4LjM1YS42Ny42NywwLDAsMSwuMTgtLjQ3LjYyLjYyLDAsMCwxLC40OC0uMTlIMTguMThhLjYuNiwwLDAsMSwuNDYuMTkuNjYuNjYsMCwwLDEsLjE4LjQ3VjE0LjloLTJ2MS4zMmgyQTEuMzUsMS4zNSwwLDAsMCwxOS43NiwxNS44NFpNMTcuNTIsNy42OVY1LjA2YTEuMzEsMS4zMSwwLDAsMC0uMzgtLjkyLDEuMzQsMS4zNCwwLDAsMC0uOTQtLjM4SDguMzRBMS4zLDEuMywwLDAsMCw3LDUuMDZWNy42OUg4LjM0VjUuMDZoNy44N1Y3LjY5aDEuMzFaTTguMzQsMTIuOTNoNy44N2wwLDUuMjZIOC4zNFYxMi45M1ptNy44Nyw1LjI2djBabS42NSwxLjMxYS42LjYsMCwwLDAsLjQ2LS4xOS43Mi43MiwwLDAsMCwuMi0uNDdWMTIuMjlhLjc0Ljc0LDAsMCwwLS4yLS40Ny42LjYsMCwwLDAtLjQ2LS4xOUg3LjY4YS42LjYsMCwwLDAtLjQ2LjE5LjcyLjcyLDAsMCwwLS4yLjQ3djYuNTVhLjc0Ljc0LDAsMCwwLC4yLjQ3LjYuNiwwLDAsMCwuNDYuMTloOS4xOFpNMTYuNjcsOS4yOGEuNy43LDAsMCwwLS45NCwwLC42My42MywwLDAsMC0uMTguNDYuNjcuNjcsMCwwLDAsLjE4LjQ3LjY4LjY4LDAsMCwwLC45NCwwLC42Ni42NiwwLDAsMCwuMTgtLjQ3QS41OC41OCwwLDAsMCwxNi42Nyw5LjI4WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC4yNSAtMy42MSlcIi8+PC9nPjwvc3ZnPicsXG4gICB0ZW1wbGF0ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQuMjcgMTUuNjRcIj48Zz48cGF0aCBkPVwiTTE4LjE4LDE5LjE2YTEsMSwwLDAsMCwxLTFWNS43M2ExLDEsMCwwLDAtMS0xaC0ydjFoMlYxOC4xOUg2LjM3VjUuNzNoMnYtMWgtMkEuOTQuOTQsMCwwLDAsNS42OCw1YTEsMSwwLDAsMC0uMjkuN1YxOC4xOGEuOTQuOTQsMCwwLDAsLjI5LjY5LDEsMSwwLDAsMCwuNjkuMjlIMTguMThaTTkuODIsMTAuMzFoNC45MmEuNDkuNDksMCwwLDAsLjM1LS4xNS40Ny40NywwLDAsMCwuMTUtLjM1LjQ5LjQ5LDAsMCwwLS4xNS0uMzUuNDcuNDcsMCwwLDAtLjM1LS4xNUg5LjgyYS40OS40OSwwLDAsMC0uMzUuMTUuNDcuNDcsMCwwLDAtLjE1LjM1LjQ5LjQ5LDAsMCwwLC4xNS4zNS40Ny40NywwLDAsMCwuMzUuMTVabTUuOSw0LjkySDguODNhLjQ5LjQ5LDAsMCwwLS4zNS4xNS40Ny40NywwLDAsMC0uMTUuMzUuNDkuNDksMCwwLDAsLjE1LjM1LjQ3LjQ3LDAsMCwwLC4zNS4xNWg2Ljg5YS40OS40OSwwLDAsMCwuMzUtLjE1LjQ3LjQ3LDAsMCwwLC4xNS0uMzUuNTEuNTEsMCwwLDAtLjUtLjVaTTcuMzYsMTIuNzdhLjQ5LjQ5LDAsMCwwLC4xNS4zNS40Ny40NywwLDAsMCwuMzUuMTVoOC44NWEuNDkuNDksMCwwLDAsLjM1LS4xNS40Ny40NywwLDAsMCwuMTUtLjM1LjQ5LjQ5LDAsMCwwLS4xNS0uMzUuNDcuNDcsMCwwLDAtLjM1LS4xNUg3Ljg1YS40OS40OSwwLDAsMC0uMzUuMTUuNTIuNTIsMCwwLDAtLjE0LjM1WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNS4xNCAtMy43NylcIi8+PHBhdGggZD1cIk0xNC4yNCw2LjcxYTEsMSwwLDAsMCwxLTEsMSwxLDAsMCwwLTEtMSwxLDEsMCwwLDAtMS0xaC0yYS45NC45NCwwLDAsMC0uNjkuMjgsMSwxLDAsMCwwLS4yOS43QS45NC45NCwwLDAsMCw5LjYyLDVhLjkxLjkxLDAsMCwwLS4yOS42OSwxLDEsMCwwLDAsLjI5LjcsMSwxLDAsMCwwLC42OS4yOWgzLjkzWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNS4xNCAtMy43NylcIi8+PC9nPjwvc3ZnPicsXG4gICBsaW5lX2hlaWdodDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzYgMTMuNTZcIj48Zz48cGF0aCBkPVwiTTQuNCw0Ljg4VjguMjZhMiwyLDAsMCwwLC41LjM5cy4xLDAsLjE4LS4xMmEuNjIuNjIsMCwwLDAsLjE3LS4yOGMuMDYtLjE5LjEzLS40NC4yMS0uNzRzLjE0LS41Mi4xOS0uNjZhLjU4LjU4LDAsMCwxLC4yMS0uMywyLjQxLDIuNDEsMCwwLDEsLjYzLS4yMSwzLjgzLDMuODMsMCwwLDEsLjg4LS4xMiw5LjE1LDkuMTUsMCwwLDEsMS4zMS4wNi4xNi4xNiwwLDAsMSwuMTEsMCwuMjYuMjYsMCwwLDEsLjA2LjE0LDQsNCwwLDAsMSwwLC40OXYybC4wNSwzLjc3YzAsMS40MSwwLDIuNjgtLjA1LDMuODFhMS43OSwxLjc5LDAsMCwxLS4xMS40OSwxMC42OCwxMC42OCwwLDAsMS0xLjQuNDUsMS4xMiwxLjEyLDAsMCwwLS42OS40M3YuMzFsMCwuMjIuNjEsMGMuODUtLjA4LDEuNTQtLjEyLDIuMDYtLjEyYTE5Ljc2LDE5Ljc2LDAsMCwxLDIuMDkuMDgsMTUuMDgsMTUuMDgsMCwwLDAsMS42NC4wOCwxLjQsMS40LDAsMCwwLC4yOSwwLDEuNTgsMS41OCwwLDAsMCwwLS4yNmwtLjA1LS40M2EyLjI2LDIuMjYsMCwwLDAtLjQzLS4xN2wtLjc3LS4yMi0uMTUsMGEyLjU1LDIuNTUsMCwwLDEtLjc4LS4yOCwyLjU2LDIuNTYsMCwwLDEtLjExLS43NWwwLTEuMjksMC0zLjE1VjcuNTNhMTAuNTEsMTAuNTEsMCwwLDEsLjA2LTEuMiwzLjgzLDMuODMsMCwwLDEsLjYsMGwxLjg4LDBhMi4xOCwyLjE4LDAsMCwxLC4zOCwwLC40NS40NSwwLDAsMSwuMjMuMTcuOS45LDAsMCwxLC4wNS4yNWMwLC4xNi4wNi4zNS4xLjU4YTMuMzMsMy4zMywwLDAsMCwuMTQuNTVBNi4zOSw2LjM5LDAsMCwwLDE1LDlhMi45MSwyLjkxLDAsMCwwLC42LS4xNSwyLjc3LDIuNzcsMCwwLDAsMC0uNDZsMC0uNTEsMC0yLjk1LS4yNSwwLS4zOCwwTDE1LDQuOTRhLjcxLjcxLDAsMCwxLS4xOC4xNS40NS40NSwwLDAsMS0uMjUuMDdsLS4yOSwwSDguNzVsLS4xNSwwSDcuNDVhMTcsMTcsMCwwLDEtMS44NiwwTDUuMzYsNWwtLjI1LS4xM1pNMTkuNzUsMTYuMTRoLS42OXYtOWguNjlBLjQuNCwwLDAsMCwyMC4xMyw3Yy4wNi0uMTEsMC0uMjQtLjEtLjM5TDE4LjkyLDUuMTVhLjUyLjUyLDAsMCwwLS44NiwwTDE3LDYuNThjLS4xMi4xNS0uMTYuMjgtLjEuMzlzLjE4LjE2LjM4LjE2aC42OXY5aC0uNjlhLjQuNCwwLDAsMC0uMzguMTZjLS4wNi4xMSwwLC4yNC4xLjM5bDEuMTEsMS40M2EuNTIuNTIsMCwwLDAsLjg2LDBMMjAsMTYuNjljLjEyLS4xNS4xNi0uMjguMS0uMzlhLjQuNCwwLDAsMC0uMzgtLjE2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC00Ljg2KVwiLz48L2c+PC9zdmc+JyxcbiAgIHBhcmFncmFwaF9zdHlsZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTEuODEgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE4LjE4LDMuNzZ2MmgtMlYxOS41aC0yVjUuNzNoLTJWMTkuNWgtMlYxMS42M2EzLjk0LDMuOTQsMCwwLDEsMC03Ljg3aDcuODdaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC02LjM3IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcbiAgIHRleHRfc3R5bGU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDEzLjc2IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xNy42OCw2LjcxYTIuMjIsMi4yMiwwLDAsMCwxLjA2LS4yMi43NC43NCwwLDAsMCwuNDItLjcuNzMuNzMsMCwwLDAtLjA4LS4zMy42Ny42NywwLDAsMC0uMTctLjIyLDEsMSwwLDAsMC0uMzEtLjE1TDE4LjI2LDVsLS40NS0uMDlBMTUuMjcsMTUuMjcsMCwwLDAsMTMuMjYsNVY0Ljc0YzAtLjY2LS42My0xLTEuOTItMS0uMjQsMC0uNDMuMTUtLjU5LjQ2YTQsNCwwLDAsMC0uMzYsMS4xNGgwdjBhMjYuNDUsMjYuNDUsMCwwLDEtMy41LjM1QTIsMiwwLDAsMCw1Ljc3LDZhLjg0Ljg0LDAsMCwwLS4zNy43OSwyLjE0LDIuMTQsMCwwLDAsLjQxLDEuMjksMS4yMywxLjIzLDAsMCwwLDEuMDUuNjMsMTYuNjIsMTYuNjIsMCwwLDAsMy4yOS0uNDVsLS4zNCwzLjM1Yy0uMTYsMS42MS0uMjksMi45LS4zNywzLjg2cy0uMTIsMS42Ni0uMTIsMi4wOWwwLC42NWE1LjE1LDUuMTUsMCwwLDAsLjA1LjYsMS4yOCwxLjI4LDAsMCwwLC4xNi41NC4zNC4zNCwwLDAsMCwuMjguMTgsMS4xNiwxLjE2LDAsMCwwLC43OS0uNDYsMy42NiwzLjY2LDAsMCwwLC42OC0xLDIyLjA4LDIyLjA4LDAsMCwwLDEtNC4zM3EuNDktMy4xLjc4LTYuMTVhMjQuNjksMjQuNjksMCwwLDEsNC42Mi0uODRaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC01LjQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgc2F2ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE4LjUzLDE5LjVsLjItLjA1QTEuNzgsMS43OCwwLDAsMCwyMC4xMywxOGwwLS4wOVY3LjE0YTIsMiwwLDAsMC0uMjgtLjY0QTMuMTgsMy4xOCwwLDAsMCwxOS40Myw2Yy0uNS0uNTItMS0xLTEuNTUtMS41NEEyLjU5LDIuNTksMCwwLDAsMTcuMzcsNGExLjgzLDEuODMsMCwwLDAtLjYxLS4yNUg2bC0uMjEsMGExLjc4LDEuNzgsMCwwLDAtMS40LDEuNDlsMCwuMVYxNy44N2EyLjQ5LDIuNDksMCwwLDAsLjA5LjM3LDEuNzksMS43OSwwLDAsMCwxLjQ0LDEuMjNsLjA5LDBabS02LjI1LS42SDYuOTJhLjYxLjYxLDAsMCwxLS42OC0uNDguNzguNzgsMCwwLDEsMC0uMjJWMTIuM2EuNjIuNjIsMCwwLDEsLjY5LS42OEgxNy42NGEuNjIuNjIsMCwwLDEsLjY5LjY5VjE4LjJhLjY0LjY0LDAsMCwxLS43MS42OUgxMi4yOFpNMTIsOS44MUg4LjE1YS42My42MywwLDAsMS0uNzItLjcxdi00YS42NC42NCwwLDAsMSwuNzItLjcyaDcuNjZhLjY0LjY0LDAsMCwxLC43Mi43MnY0YS42NS42NSwwLDAsMS0uNzQuNzJaTTEzLjUsNVY5LjE4aDEuNzhWNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgYmxvY2txdW90ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNDc1LjA4MiA0NzUuMDgxXCI+PGc+PHBhdGggZD1cIk0xNjQuNDUsMjE5LjI3aC02My45NTRjLTcuNjE0LDAtMTQuMDg3LTIuNjY0LTE5LjQxNy03Ljk5NGMtNS4zMjctNS4zMy03Ljk5NC0xMS44MDEtNy45OTQtMTkuNDE3di05LjEzMmMwLTIwLjE3Nyw3LjEzOS0zNy40MDEsMjEuNDE2LTUxLjY3OGMxNC4yNzYtMTQuMjcyLDMxLjUwMy0yMS40MTEsNTEuNjc4LTIxLjQxMWgxOC4yNzFjNC45NDgsMCw5LjIyOS0xLjgwOSwxMi44NDctNS40MjRjMy42MTYtMy42MTcsNS40MjQtNy44OTgsNS40MjQtMTIuODQ3VjU0LjgxOWMwLTQuOTQ4LTEuODA5LTkuMjMzLTUuNDI0LTEyLjg1Yy0zLjYxNy0zLjYxMi03Ljg5OC01LjQyNC0xMi44NDctNS40MjRoLTE4LjI3MWMtMTkuNzk3LDAtMzguNjg0LDMuODU4LTU2LjY3MywxMS41NjNjLTE3Ljk4Nyw3LjcxLTMzLjU0NSwxOC4xMzItNDYuNjgsMzEuMjY3Yy0xMy4xMzQsMTMuMTI5LTIzLjU1MywyOC42ODgtMzEuMjYyLDQ2LjY3N0MzLjg1NSwxNDQuMDM5LDAsMTYyLjkzMSwwLDE4Mi43MjZ2MjAwLjk5MWMwLDE1LjIzNSw1LjMyNywyOC4xNzEsMTUuOTg2LDM4LjgzNGMxMC42NiwxMC42NTcsMjMuNjA2LDE1Ljk4NSwzOC44MzIsMTUuOTg1aDEwOS42MzljMTUuMjI1LDAsMjguMTY3LTUuMzI4LDM4LjgyOC0xNS45ODVjMTAuNjU3LTEwLjY2MywxNS45ODctMjMuNTk5LDE1Ljk4Ny0zOC44MzRWMjc0LjA4OGMwLTE1LjIzMi01LjMzLTI4LjE2OC0xNS45OTQtMzguODMyQzE5Mi42MjIsMjI0LjYsMTc5LjY3NSwyMTkuMjcsMTY0LjQ1LDIxOS4yN3pcIi8+PHBhdGggZD1cIk00NTkuMTAzLDIzNS4yNTZjLTEwLjY1Ni0xMC42NTYtMjMuNTk5LTE1Ljk4Ni0zOC44MjgtMTUuOTg2aC02My45NTNjLTcuNjEsMC0xNC4wODktMi42NjQtMTkuNDEtNy45OTRjLTUuMzMyLTUuMzMtNy45OTQtMTEuODAxLTcuOTk0LTE5LjQxN3YtOS4xMzJjMC0yMC4xNzcsNy4xMzktMzcuNDAxLDIxLjQwOS01MS42NzhjMTQuMjcxLTE0LjI3MiwzMS40OTctMjEuNDExLDUxLjY4Mi0yMS40MTFoMTguMjY3YzQuOTQ5LDAsOS4yMzMtMS44MDksMTIuODQ4LTUuNDI0YzMuNjEzLTMuNjE3LDUuNDI4LTcuODk4LDUuNDI4LTEyLjg0N1Y1NC44MTljMC00Ljk0OC0xLjgxNC05LjIzMy01LjQyOC0xMi44NWMtMy42MTQtMy42MTItNy44OTgtNS40MjQtMTIuODQ4LTUuNDI0aC0xOC4yNjdjLTE5LjgwOCwwLTM4LjY5MSwzLjg1OC01Ni42ODUsMTEuNTYzYy0xNy45ODQsNy43MS0zMy41MzcsMTguMTMyLTQ2LjY3MiwzMS4yNjdjLTEzLjEzNSwxMy4xMjktMjMuNTU5LDI4LjY4OC0zMS4yNjUsNDYuNjc3Yy03LjcwNywxNy45ODctMTEuNTY3LDM2Ljg3OS0xMS41NjcsNTYuNjc0djIwMC45OTFjMCwxNS4yMzUsNS4zMzIsMjguMTcxLDE1Ljk4OCwzOC44MzRjMTAuNjU3LDEwLjY1NywyMy42LDE1Ljk4NSwzOC44MjgsMTUuOTg1aDEwOS42MzNjMTUuMjI5LDAsMjguMTcxLTUuMzI4LDM4LjgyNy0xNS45ODVjMTAuNjY0LTEwLjY2MywxNS45ODUtMjMuNTk5LDE1Ljk4NS0zOC44MzRWMjc0LjA4OEM0NzUuMDgyLDI1OC44NTUsNDY5Ljc2LDI0NS45Miw0NTkuMTAzLDIzNS4yNTZ6XCIvPjwvZz48L3N2Zz4nLFxuICAgYXJyb3dfZG93bjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzMgOC42N1wiPjxnPjxwYXRoIGQ9XCJNMTguNzksNy41MmEuOC44LDAsMCwxLC41Ni0uMjMuODIuODIsMCwwLDEsLjc5Ljc5LjguOCwwLDAsMS0uMjMuNTZsLTcuMDcsNy4wN2EuNzkuNzksMCwwLDEtLjU3LjI1Ljc3Ljc3LDAsMCwxLS41Ny0uMjVoMEw0LjY0LDguNjVhLjguOCwwLDAsMS0uMjMtLjU3LjgyLjgyLDAsMCwxLC43OS0uNzkuOC44LDAsMCwxLC41Ni4yM0wxMi4yOCwxNGwzLjI2LTMuMjYsMy4yNS0zLjI2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNy4yOSlcIi8+PC9nPjwvc3ZnPicsXG4gICBhbGlnbl9qdXN0aWZ5OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43N1wiPjxnPjxwYXRoIGQ9XCJNNC40MSw0Ljc0djJIMjAuMTV2LTJINC40MVptMCw1LjlIMjAuMTV2LTJINC40MXYyWm0wLDMuOTRIMjAuMTV2LTJINC40MXYyWm0wLDMuOTNoNy44N3YtMkg0LjQxdjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00Ljc0KVwiLz48L2c+PC9zdmc+JyxcbiAgIGFsaWduX2xlZnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEzLjc3XCI+PGc+PHBhdGggZD1cIk00LjQxLDQuNzR2MkgyMC4xNXYtMkg0LjQxWm0xMS44LDMuOTRINC40MXYySDE2LjIydi0yWm0tMTEuOCw1LjlIMTguMTh2LTJINC40MXYyWm0wLDMuOTNoOS44NHYtMkg0LjQxdjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00Ljc0KVwiLz48L2c+PC9zdmc+JyxcbiAgIGFsaWduX3JpZ2h0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43N1wiPjxnPjxwYXRoIGQ9XCJNNC40MSw0Ljc0djJIMjAuMTV2LTJINC40MVptMy45Myw1LjlIMjAuMTV2LTJIOC4zNHYyWm0tMiwzLjk0SDIwLjE0di0ySDYuMzd2MlptMy45NCwzLjkzaDkuODR2LTJIMTAuMzF2MlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuNzQpXCIvPjwvZz48L3N2Zz4nLFxuICAgYWxpZ25fY2VudGVyOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43N1wiPjxnPjxwYXRoIGQ9XCJNNC40MSw0Ljc0djJIMjAuMTV2LTJINC40MVptMiwzLjk0djJIMTguMTh2LTJINi4zN1ptLTEsNS45SDE5LjE2di0ySDUuMzl2MlptMiwzLjkzSDE3LjJ2LTJINy4zNnYyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC43NClcIi8+PC9nPjwvc3ZnPicsXG4gICBmb250X2NvbG9yOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNC42MVwiPjxnPjxwYXRoIGQ9XCJNMTguNSwxNS41NywxNC4yOCw0LjMyaC0zLjRMNi42NSwxNS41N2gzbC44LTIuMjZoNC4yM2wuOCwyLjI2aDNaTTE0LDExLjA3SDExLjE0TDEyLjU0LDcsMTMuMjUsOWMuNDEsMS4xOC42NCwxLjg2LjcsMlpNNC40MSwxNi42OXYyLjI0SDIwLjE1VjE2LjY5SDQuNDFaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjMyKVwiLz48L2c+PC9zdmc+JyxcbiAgIGhpZ2hsaWdodF9jb2xvcjonPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS42NiAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTIuMzIsOS4zMSwxMy4zOCwxM0gxMS4yMWwuNTItMS44M3EuNDYtMS42MS41NC0xLjgzWk00LjQ0LDMuNzZIMjAuMVYxOS41SDQuNDRWMy43NlpNMTQuNzEsMTcuMzJoMi42M0wxMy43LDZIMTAuODlMNy4yNiwxNy4zMkg5Ljg5bC42My0yLjI0aDMuNTVsLjMyLDEuMTJjLjE4LjY1LjI5LDEsLjMyLDEuMTJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQ0IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcbiAgIGxpc3RfYnVsbGV0czogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTIuMzdcIj48Zz48cGF0aCBkPVwiTTcuNzcsMTYuMTJhMS41OSwxLjU5LDAsMCwwLS40OS0xLjE4LDEuNjIsMS42MiwwLDAsMC0xLjE5LS40OSwxLjY4LDEuNjgsMCwxLDAsMCwzLjM2LDEuNjcsMS42NywwLDAsMCwxLjY4LTEuNjlabTAtNC40OEExLjY3LDEuNjcsMCwwLDAsNi4wOSwxMCwxLjY4LDEuNjgsMCwwLDAsNC45LDEyLjgyYTEuNjIsMS42MiwwLDAsMCwxLjE5LjQ5LDEuNjcsMS42NywwLDAsMCwxLjY4LTEuNjdabTEyLjM4LDMuNjRhLjI3LjI3LDAsMCwwLS4wOC0uMTkuMjguMjgsMCwwLDAtLjItLjA5SDkuMTlhLjI4LjI4LDAsMCwwLS4yLjA4LjI5LjI5LDAsMCwwLS4wOC4xOVYxN2EuMjcuMjcsMCwwLDAsLjI4LjI4SDE5Ljg3YS4yNy4yNywwLDAsMCwuMTktLjA4LjI0LjI0LDAsMCwwLC4wOC0uMlYxNS4yOFpNNy43Nyw3LjEzYTEuNjMsMS42MywwLDAsMC0uNDktMS4yLDEuNjEsMS42MSwwLDAsMC0xLjE5LS40OSwxLjYxLDEuNjEsMCwwLDAtMS4xOS40OSwxLjcxLDEuNzEsMCwwLDAsMCwyLjQsMS42MiwxLjYyLDAsMCwwLDEuMTkuNDksMS42MSwxLjYxLDAsMCwwLDEuMTktLjQ5LDEuNjMsMS42MywwLDAsMCwuNDktMS4yWm0xMi4zOCwzLjY2YS4yOC4yOCwwLDAsMC0uMDgtLjIuMjkuMjksMCwwLDAtLjE5LS4wOEg5LjE5YS4yNy4yNywwLDAsMC0uMjguMjh2MS42OWEuMjcuMjcsMCwwLDAsLjA4LjE5LjI0LjI0LDAsMCwwLC4yLjA4SDE5Ljg3YS4yNy4yNywwLDAsMCwuMTktLjA4LjI1LjI1LDAsMCwwLC4wOC0uMTlWMTAuNzlabTAtNC41YS4yNy4yNywwLDAsMC0uMDgtLjE5QS4yNS4yNSwwLDAsMCwxOS44OCw2SDkuMTlBLjI4LjI4LDAsMCwwLDksNi4xYS4yNi4yNiwwLDAsMC0uMDguMTlWOEEuMjcuMjcsMCwwLDAsOSw4LjE3YS4yNC4yNCwwLDAsMCwuMi4wOEgxOS44N2EuMjcuMjcsMCwwLDAsLjE5LS4wOEEuMjUuMjUsMCwwLDAsMjAuMTQsOFY2LjI5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNS40NClcIi8+PC9nPjwvc3ZnPicsXG4gICBsaXN0X251bWJlcjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjkgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTcuNjYsMThhMS4yNCwxLjI0LDAsMCwwLS4yNi0uNzgsMS4xNywxLjE3LDAsMCwwLS43Mi0uNDJsLjg1LTFWMTVINC41OHYxLjM0aC45NHYtLjQ2bC44NSwwaDBjLS4xMS4xMS0uMjIuMjMtLjMyLjM1cy0uMjMuMjctLjM3LjQ3TDUuMzksMTdsLjIzLjUxYy42MS0uMDUuOTIuMTEuOTIuNDlhLjQyLjQyLDAsMCwxLS4xOC4zNy43OS43OSwwLDAsMS0uNDUuMTJBMS40MSwxLjQxLDAsMCwxLDUsMTguMTVsLS41MS43N0EyLjA2LDIuMDYsMCwwLDAsNiwxOS41YTEuOCwxLjgsMCwwLDAsMS4yLS40MUExLjM4LDEuMzgsMCwwLDAsNy42NiwxOFptMC01LjU0SDYuNzVWMTNINS42M0EuNzIuNzIsMCwwLDEsNiwxMi41MWE1LjQ1LDUuNDUsMCwwLDEsLjY2LS40NSwyLjcxLDIuNzEsMCwwLDAsLjY3LS41NywxLjE5LDEuMTksMCwwLDAsLjMxLS44MSwxLjI5LDEuMjksMCwwLDAtLjQ1LTEsMS44NiwxLjg2LDAsMCwwLTItLjExLDEuNTEsMS41MSwwLDAsMC0uNjIuN2wuNzQuNTJBLjg3Ljg3LDAsMCwxLDYsMTAuMjhhLjUxLjUxLDAsMCwxLC4zNS4xMi40Mi40MiwwLDAsMSwuMTMuMzMuNTUuNTUsMCwwLDEtLjIxLjQsMywzLDAsMCwxLS41LjM4Yy0uMTkuMTMtLjM5LjI3LS41OC40MmEyLDIsMCwwLDAtLjUuNiwxLjYzLDEuNjMsMCwwLDAtLjIxLjgxLDMuODksMy44OSwwLDAsMCwuMDUuNDhoMy4yVjEyLjQ0Wm0xMi40NSwyLjgyYS4yNy4yNywwLDAsMC0uMDgtLjE5LjI4LjI4LDAsMCwwLS4yMS0uMDhIOS4xYS4zMi4zMiwwLDAsMC0uMjEuMDguMjQuMjQsMCwwLDAtLjA4LjJWMTdhLjI3LjI3LDAsMCwwLC4wOC4xOS4zLjMsMCwwLDAsLjIxLjA4SDE5LjgzYS4zMi4zMiwwLDAsMCwuMjEtLjA4LjI1LjI1LDAsMCwwLC4wOC0uMTlWMTUuMjZaTTcuNjksNy4zMmgtMVYzLjc2SDUuOEw0LjYsNC44OGwuNjMuNjhhMS44NSwxLjg1LDAsMCwwLC40My0uNDhoMGwwLDIuMjRINC43NFY4LjJoM1Y3LjMyWm0xMi40MywzLjQyYS4yNy4yNywwLDAsMC0uMDgtLjE5LjI4LjI4LDAsMCwwLS4yMS0uMDhIOS4xYS4zMi4zMiwwLDAsMC0uMjEuMDguMjQuMjQsMCwwLDAtLjA4LjJ2MS43MWEuMjcuMjcsMCwwLDAsLjA4LjE5LjMuMywwLDAsMCwuMjEuMDhIMTkuODNhLjMyLjMyLDAsMCwwLC4yMS0uMDguMjUuMjUsMCwwLDAsLjA4LS4xOVYxMC43NFptMC00LjUyQS4yNy4yNywwLDAsMCwyMCw2LC4yOC4yOCwwLDAsMCwxOS44Myw2SDkuMUEuMzIuMzIsMCwwLDAsOC44OSw2YS4yNC4yNCwwLDAsMC0uMDguMTlWNy45M2EuMjcuMjcsMCwwLDAsLjA4LjE5LjMyLjMyLDAsMCwwLC4yMS4wOEgxOS44M0EuMzIuMzIsMCwwLDAsMjAsOC4xMmEuMjYuMjYsMCwwLDAsLjA4LS4yVjYuMjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQzIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcbiAgIHRhYmxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNNC40MSw4LjA1VjMuNzZIOC43VjguMDVINC40MVptNS43MSwwVjMuNzZoNC4zVjguMDVoLTQuM1ptNS43NC00LjI5aDQuMjlWOC4wNUgxNS44NlYzLjc2Wm0tMTEuNDUsMTBWOS40OEg4Ljd2NC4zSDQuNDFabTUuNzEsMFY5LjQ4aDQuM3Y0LjNoLTQuM1ptNS43NCwwVjkuNDhoNC4yOXY0LjNIMTUuODZaTTQuNDEsMTkuNVYxNS4yMUg4LjdWMTkuNUg0LjQxWm01LjcxLDBWMTUuMjFoNC4zVjE5LjVoLTQuM1ptNS43NCwwVjE1LjIxaDQuMjlWMTkuNUgxNS44NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgaG9yaXpvbnRhbF9ydWxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAyLjI0XCI+PGc+PHBhdGggZD1cIk0yMC4xNSwxMi43NVYxMC41MUg0LjQxdjIuMjRIMjAuMTVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0xMC41MSlcIi8+PC9nPjwvc3ZnPicsXG4gICBzaG93X2Jsb2NrczogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjYgMTUuNjdcIj48Zz48cGF0aCBkPVwiTTE5LjcyLDUuNThhMS42NCwxLjY0LDAsMCwwLTEuNjQtMS42NEg2LjIzYTEuNjIsMS42MiwwLDAsMC0xLjE2LjQ4LDEuNjMsMS42MywwLDAsMC0uNDgsMS4xNlY5LjYzYTEuNiwxLjYsMCwwLDAsLjQ4LDEuMTYsMS42MiwxLjYyLDAsMCwwLDEuMTYuNDdIMTguMDlhMS42NywxLjY3LDAsMCwwLDEuMTYtLjQ3LDEuNjIsMS42MiwwLDAsMCwuNDgtMS4xNlY1LjU4Wm0tLjk0LDQuMDVhLjY4LjY4LDAsMCwxLS43LjdINi4yM2EuNjYuNjYsMCwwLDEtLjQ4LS4yLjc0Ljc0LDAsMCwxLS4yMS0uNVY1LjU4YS42Ni42NiwwLDAsMSwuMi0uNDguNzEuNzEsMCwwLDEsLjQ4LS4yMUgxOC4wOGEuNzQuNzQsMCwwLDEsLjUuMjEuNjYuNjYsMCwwLDEsLjIuNDhaTTYuNDgsNy43MmEuMjEuMjEsMCwwLDAsLjE3LS4wNy4yMi4yMiwwLDAsMCwuMDctLjE3VjcuMDZhMS4yNywxLjI3LDAsMCwxLC4xMS0uNTIuMzcuMzcsMCwwLDEsLjM2LS4yM0g4Ljc3QS4yNS4yNSwwLDAsMCw5LDYuMTdhLjE5LjE5LDAsMCwwLDAtLjIzLjI3LjI3LDAsMCwwLS4yLS4xMkg3LjE5YS44OC44OCwwLDAsMC0uNzIuMzksMS41MSwxLjUxLDAsMCwwLS4yMy44NXYuNDJhLjI0LjI0LDAsMCwwLC4yNC4yNFptLS4xOS44MWEuMjEuMjEsMCwwLDAsLjE3LS4wNy4yNi4yNiwwLDAsMCwuMDctLjE3LjI0LjI0LDAsMCwwLS4yNC0uMjQuMi4yLDAsMCwwLS4xNi4wOS4yLjIsMCwwLDAtLjA3LjE2LjIyLjIyLDAsMCwwLC4wNy4xNy4yMy4yMywwLDAsMCwuMTYuMDZabTguNDYsNS4xYTEuNjMsMS42MywwLDAsMC0uNDctMS4xNkExLjYxLDEuNjEsMCwwLDAsMTMuMTIsMTJINi4yM2ExLjYsMS42LDAsMCwwLTEuMTYuNDYsMS42MiwxLjYyLDAsMCwwLS40OCwxLjE2djQuMDVhMS42NCwxLjY0LDAsMCwwLDEuNjQsMS42NGg2Ljg5YTEuNiwxLjYsMCwwLDAsMS4xNi0uNDgsMS42MiwxLjYyLDAsMCwwLC40Ny0xLjE2Wm0tLjk0LDRhLjcuNywwLDAsMS0uMi40OS42NS42NSwwLDAsMS0uNS4ySDYuMjNhLjY2LjY2LDAsMCwxLS40OC0uMi43NS43NSwwLDAsMS0uMjEtLjQ5di00YS43NC43NCwwLDAsMSwuMjEtLjUuNjYuNjYsMCwwLDEsLjQ4LS4yaDYuODlhLjY4LjY4LDAsMCwxLC43Ljd2NFptNi4xNSwwdi00YTEuNiwxLjYsMCwwLDAtLjQ4LTEuMTZBMS42NywxLjY3LDAsMCwwLDE4LjMyLDEySDE3LjFhMS42MywxLjYzLDAsMCwwLTEuMTYuNDcsMS42MSwxLjYxLDAsMCwwLS40NywxLjE2djRhMS42NywxLjY3LDAsMCwwLC40NywxLjE2LDEuNjIsMS42MiwwLDAsMCwxLjE2LjQ4aDEuMjJBMS42NCwxLjY0LDAsMCwwLDIwLDE3LjY4Wm0tLjk0LTR2NGEuNzUuNzUsMCwwLDEtLjIxLjQ5LjYyLjYyLDAsMCwxLS40OC4ySDE3LjExYS42OS42OSwwLDAsMS0uNS0uMi43LjcsMCwwLDEtLjItLjQ5di00YS42OC42OCwwLDAsMSwuNy0uN2gxLjIyYS42Ni42NiwwLDAsMSwuNDguMi43Mi43MiwwLDAsMSwuMjEuNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDQgLTMuNzkpXCIvPjwvZz48L3N2Zz4nLFxuICAgY2FuY2VsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTQuMTUsMTEuNjNsNS42MSw1LjYxYTEuMjksMS4yOSwwLDAsMSwuMzguOTMsMS4yNywxLjI3LDAsMCwxLS40LjkzLDEuMjUsMS4yNSwwLDAsMS0uOTIuNCwxLjMxLDEuMzEsMCwwLDEtLjk0LS40bC01LjYxLTUuNjFMNi42NywxOS4xYTEuMzEsMS4zMSwwLDAsMS0uOTQuNCwxLjI0LDEuMjQsMCwwLDEtLjkyLS40LDEuMjcsMS4yNywwLDAsMS0uNC0uOTMsMS4zMywxLjMzLDAsMCwxLC4zOC0uOTNsNS42MS01LjYzTDQuNzksNmExLjI2LDEuMjYsMCwwLDEtLjM4LS45MywxLjIyLDEuMjIsMCwwLDEsLjQtLjkyLDEuMjgsMS4yOCwwLDAsMSwuOTItLjM5LDEuMzgsMS4zOCwwLDAsMSwuOTQuMzhsNS42MSw1LjYxLDUuNjEtNS42MWExLjMzLDEuMzMsMCwwLDEsLjk0LS4zOCwxLjI2LDEuMjYsMCwwLDEsLjkyLjM5LDEuMjQsMS4yNCwwLDAsMSwuNC45MiwxLjI5LDEuMjksMCwwLDEtLjM5LjkzTDE3LDguODFsLTIuOCwyLjgyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBpbWFnZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTUuNzdcIj48Zz48cGF0aCBkPVwiTTguNzcsOC43MmEuODguODgsMCwwLDEtLjYxLS4yNy44Mi44MiwwLDAsMS0uMjUtLjYxLjg5Ljg5LDAsMCwxLC4yNS0uNjJBLjgyLjgyLDAsMCwxLDguNzcsN2EuODEuODEsMCwwLDEsLjYxLjI1LjgzLjgzLDAsMCwxLC4yNy42Mi44MS44MSwwLDAsMS0uMjUuNjEuOTEuOTEsMCwwLDEtLjYzLjI3Wm05LjYyLTVhMS43NCwxLjc0LDAsMCwxLDEuNzYsMS43NlYxNy43NmExLjc0LDEuNzQsMCwwLDEtMS43NiwxLjc2SDYuMTZBMS43NCwxLjc0LDAsMCwxLDQuNCwxNy43NlY1LjUxQTEuNzQsMS43NCwwLDAsMSw2LjE2LDMuNzVIMTguMzlabTAsMS43NUg2LjE2djhMOC41MywxMS44YS45NC45NCwwLDAsMSwuNTQtLjE3Ljg2Ljg2LDAsMCwxLC41NC4yTDExLjA5LDEzbDMuNjQtNC41NWEuNzguNzgsMCwwLDEsLjM0LS4yNS44NS44NSwwLDAsMSwuNDItLjA3Ljg5Ljg5LDAsMCwxLC4zOS4xMi43OC43OCwwLDAsMSwuMjguMjlsMi4yNCwzLjY3VjUuNTFabTAsMTIuMjRWMTUuNkwxNS4zLDEwLjUzLDExLjg5LDE0LjhhLjg5Ljg5LDAsMCwxLS41OS4zMi44Mi44MiwwLDAsMS0uNjQtLjE4TDksMTMuNjIsNi4xNiwxNS43NHYyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc1KVwiLz48L2c+PC9zdmc+JyxcbiAgIHZpZGVvOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxNC41NVwiPjxnPjxwYXRoIGQ9XCJNMjAuMTUsMTAuMjZWMTguOWwtMy45NC0xLjU3djEuMkg0LjQxVjEwLjY2SDE2LjIydjEuMjNsMi0uODEsMi0uODJaTTE0LjY0LDE3aDBWMTIuNTRoMHYtLjMxSDZWMTdoOC42N1ptMy45NC0uMzd2LTRsLTIuMzcsMXYybDEuMTguNDgsMS4xOS40OFpNNy45NCw5Ljg2QTIuNzcsMi43NywwLDAsMSw1LjE5LDcuMTFhMi43NiwyLjc2LDAsMCwxLDUuNTEsMEEyLjc4LDIuNzgsMCwwLDEsNy45NCw5Ljg2Wm0wLTMuOTNhMS4yMSwxLjIxLDAsMCwwLS44My4zNSwxLjE1LDEuMTUsMCwwLDAtLjM0Ljg0QTEuMDksMS4wOSwwLDAsMCw3LjExLDgsMS4xNSwxLjE1LDAsMCwwLDgsOC4yOCwxLjEzLDEuMTMsMCwwLDAsOS4xMSw3LjEyLDEuMTYsMS4xNiwwLDAsMCw3Ljk0LDUuOTNabTUuOSwzLjkzYTIuMzQsMi4zNCwwLDAsMS0xLjY3LS42OCwyLjMsMi4zLDAsMCwxLS42OC0xLjY3LDIuMzUsMi4zNSwwLDAsMSw0LTEuNjcsMi4zNywyLjM3LDAsMCwxLDAsMy4zNCwyLjMzLDIuMzMsMCwwLDEtMS42OC42OFptMC0zLjE0YS43NS43NSwwLDEsMCwuNTUuMjIuNzMuNzMsMCwwLDAtLjU1LS4yMlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuMzUpXCIvPjwvZz48L3N2Zz4nLFxuICAgbGluazogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzJcIj48Zz48cGF0aCBkPVwiTTEzLjA1LDEzLjYzYS4yNC4yNCwwLDAsMSwuMTUuMjJMMTMuNDIsMTZhLjE5LjE5LDAsMCwxLS4wOC4xOGwtMi4xMiwyLjE0YTQuMDgsNC4wOCwwLDAsMS0xLjI5Ljg1QTQsNCwwLDAsMSw0LjcxLDE3YTMuOTIsMy45MiwwLDAsMS0uMy0xLjUyQTQsNCwwLDAsMSw0LjcxLDE0YTMuOTEsMy45MSwwLDAsMSwuODctMS4zTDcuNywxMC41NmEuMjUuMjUsMCwwLDEsLjItLjA2bDIuMTcuMjJhLjIxLjIxLDAsMCwxLC4xOS4xNS4yNC4yNCwwLDAsMSwwLC4yNUw3LjEyLDE0LjIzYTEuODEsMS44MSwwLDAsMCwwLDIuNTgsMS43OCwxLjc4LDAsMCwwLDEuMjkuNTIsMS43NCwxLjc0LDAsMCwwLDEuMjgtLjUyTDEyLjgsMTMuN2EuMjQuMjQsMCwwLDEsLjI1LS4wN1pNMTksNC45MmE0LDQsMCwwLDEsMCw1LjY2TDE2Ljg2LDEyLjdhLjI1LjI1LDAsMCwxLS4xNy4wOGwtMi4yLS4yM2EuMjEuMjEsMCwwLDEtLjE5LS4xNS4yMi4yMiwwLDAsMSwwLS4yNUwxNy40NCw5YTEuODEsMS44MSwwLDAsMCwwLTIuNTgsMS43OCwxLjc4LDAsMCwwLTEuMjktLjUyLDEuNzQsMS43NCwwLDAsMC0xLjI4LjUyTDExLjc2LDkuNTdhLjIxLjIxLDAsMCwxLS4yNSwwLC4yNC4yNCwwLDAsMS0uMTYtLjIxbC0uMjItMi4xN2EuMTkuMTksMCwwLDEsLjA4LS4xOGwyLjEyLTIuMTRhNC4wOCw0LjA4LDAsMCwxLDEuMjktLjg1LDQuMDUsNC4wNSwwLDAsMSwzLjA2LDAsMy44NSwzLjg1LDAsMCwxLDEuMy44NVpNNS44NCw5LjgyYS4yNS4yNSwwLDAsMS0uMTgtLjA4LjE5LjE5LDAsMCwxLS4wNy0uMTlsLjExLS43N2EuMi4yLDAsMCwxLC4xMS0uMTcuMjQuMjQsMCwwLDEsLjIsMGwyLjUuNzJhLjI1LjI1LDAsMCwxLC4xNS4yNy4yMi4yMiwwLDAsMS0uMjMuMjFsLTIuNTksMFptNC4xMi0yLS43My0yLjVhLjI3LjI3LDAsMCwxLDAtLjJBLjIxLjIxLDAsMCwxLDkuNDEsNUwxMC4xOSw1YS4yNS4yNSwwLDAsMSwuMTksMCwuMjMuMjMsMCwwLDEsLjA4LjE4bC0uMDUsMi42MWEuMi4yLDAsMCwxLS4xOS4yM2gwQS4yMi4yMiwwLDAsMSwxMCw3Ljg1Wm04Ljc2LDUuNThhLjI1LjI1LDAsMCwxLC4xOC4wOC4yMy4yMywwLDAsMSwuMDYuMmwtLjExLjc3YS4yNS4yNSwwLDAsMS0uMTEuMTcuMjEuMjEsMCwwLDEtLjEyLDBsLS4wOCwwTDE2LDE0YS4yNS4yNSwwLDAsMS0uMTUtLjI3LjIyLjIyLDAsMCwxLC4yMi0uMjFsMS4yOSwwLDEuMzMsMFptLTQuMTIsMiwuNzQsMi41MWEuMjguMjgsMCwwLDEsMCwuMi4yMy4yMywwLDAsMS0uMTguMTFsLS44LjExYS4yMy4yMywwLDAsMS0uMTctLjA3LjI1LjI1LDAsMCwxLS4wOC0uMThsMC0yLjYxYS4yMi4yMiwwLDAsMSwuMjItLjIyLjIxLjIxLDAsMCwxLC4yNi4xNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzcpXCIvPjwvZz48L3N2Zz4nLFxuICAgbWF0aDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTEuODEgMTUuNzNcIj48Zz48cGF0aCBkPVwiTTE3LjE5LDUuNzNhMSwxLDAsMCwwLC43MS0uMjksMSwxLDAsMCwwLC4yOC0uNywxLDEsMCwwLDAtMS0xSDcuMzVhMSwxLDAsMCwwLTEsMSwuNzcuNzcsMCwwLDAsLjEzLjQ3aDBsNC41OCw2LjQzTDYuNjgsMTcuODFhMS4yNSwxLjI1LDAsMCwwLS4yOS43MS45NC45NCwwLDAsMCwuMjguNy45Mi45MiwwLDAsMCwuNjkuMjhIMTcuMmExLDEsMCwwLDAsLjcxLS4yOCwxLDEsMCwwLDAsMC0xLjM5LjkyLjkyLDAsMCwwLS43MS0uMjlIOS4yNmwzLjg3LTUuNDNhLjg2Ljg2LDAsMCwwLDAtLjk1TDkuMjYsNS43M2g3LjkzWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNi4zOCAtMy43NylcIi8+PC9nPjwvc3ZnPicsXG4gICB1bmxpbms6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1LjcyXCI+PGc+PHBhdGggZD1cIk0xOSwxOC4zMmE0LDQsMCwwLDAsMC01LjY4TDE1Ljg1LDkuNWwtMS4xNywxLjU1TDE3LjU3LDE0YTIsMiwwLDAsMSwuNjEsMS40NywyLjA4LDIuMDgsMCwwLDEtMi4wOSwyLjA5LDIsMiwwLDAsMS0xLjQ3LS42MWwtLjM4LS4zNy0xLjc0LDEsLjguNzhhNCw0LDAsMCwwLDUuNjgsMFpNOCw5Ljc3YTIsMiwwLDAsMS0xLjI3LTEsMS44OSwxLjg5LDAsMCwxLS4yMS0xLjU3QTIuMSwyLjEsMCwwLDEsNy40NSw2LDIsMiwwLDAsMSw5LDUuNzZMMTIuMjcsNy4ybC40OS0yTDkuNDgsMy45YTQsNCwwLDAsMC0zLjA2LjQxQTMuODIsMy44MiwwLDAsMCw0LjU2LDYuNzNhMy44LDMuOCwwLDAsMCwuNCwzQTMuNzgsMy43OCwwLDAsMCw3LjM5LDExLjZsNS4zOCwyLC40OS0yLTIuNjQtLjk0TDgsOS43N1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgdGFibGVfaGVhZGVyOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NSAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTcsMTkuNXYtLjc4SDE1LjV2Ljc4SDE3Wm0tMywwdi0uNzhIMTIuNXYuNzhIMTRabS0zLDB2LS43OEg5LjUzdi43OEgxMVptLTMsMHYtLjc4SDYuNTN2Ljc4SDhabTEwLjU1LDBhMS43MywxLjczLDAsMCwwLC44NS0uMzUsMS42NywxLjY3LDAsMCwwLC41Ni0uNzZsLS43MS0uMzFhMS4yMSwxLjIxLDAsMCwxLS4zNS40LDEuMzQsMS4zNCwwLDAsMS0uNTMuMjNsLjA4LjM4Yy4wNi4yNC4wOS4zOC4xLjQxWm0tMTMuNy0uNjMuNTUtLjU1QS43Ny43NywwLDAsMSw1LjI1LDE4YTEuMzEsMS4zMSwwLDAsMS0uMDYtLjM4di0uMzhINC40MXYuMzhhMiwyLDAsMCwwLC4xMi42OCwxLjYsMS42LDAsMCwwLC4zNS41N1ptMTUuMjctMi4xMlYxNS4yNmgtLjc4djEuNDloLjc4Wm0tMTUtMVYxNC4yM0g0LjQxdjEuNDloLjc4Wm0xNS0yVjEyLjI2aC0uNzh2MS40OWguNzhabS0xNS0xVjExLjIySDQuNDF2MS41MWguNzhabTE1LTJWOS4yNmgtLjc4djEuNTFoLjc4Wm0tMTUtMVY4LjE3SDQuNDFWOS43NGguNzhabTE1LTJWNi4yOGgtLjc4VjcuNzdoLjc4Wm0tMTUtMS4xMVY1LjMzTDQuNDgsNS4xYS43Ny43NywwLDAsMC0uMDcuMjcsMi43MiwyLjcyLDAsMCwwLDAsLjI4djFoLjc5Wk0xOS4yMSw1bC42My0uNEExLjYyLDEuNjIsMCwwLDAsMTkuMTYsNGExLjk0LDEuOTQsMCwwLDAtLjkxLS4yMnYuNzhhMS4zMSwxLjMxLDAsMCwxLC41Ni4xMi44OC44OCwwLDAsMSwuNC4zNlpNNiw0LjU0SDcuNzhWMy43Nkg2YS44Mi44MiwwLDAsMC0uMjguMDZsLjEyLjM1Yy4wNy4yMS4xLjMzLjExLjM2Wm0xMC44LDBWMy43NkgxNS4yOHYuNzhoMS40OVptLTMsMFYzLjc2SDEyLjI4di43OGgxLjQ5Wm0tMywwVjMuNzZIOS4yOHYuNzhoMS41MVpNNiwxMC44NGgxMi42VjYuOTFINlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBtZXJnZV9jZWxsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NiAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTguOTIsMTMuNWgxLjIzdjQuMTVBMS44NCwxLjg0LDAsMCwxLDE4LjMsMTkuNUgxNFYxOC4yN0gxOC4zYS42LjYsMCwwLDAsLjQ0LS4xOC41OS41OSwwLDAsMCwuMTgtLjQ0VjEzLjVaTTE4LjMsMy43NmExLjg0LDEuODQsMCwwLDEsMS44NSwxLjg1VjkuODJIMTguOTJWNS42YS42LjYsMCwwLDAtLjE4LS40NEEuNTkuNTksMCwwLDAsMTguMyw1SDE0VjMuNzZIMTguM1ptMS44NSw4LjUxSDE1LjZMMTcuMjYsMTRsLS44Ni44Ni0zLjE0LTMuMTdMMTYuNCw4LjUxbC44Ni44NkwxNS42MiwxMWg0LjU0djEuMjRabS0xMy45LDZoNC4yN1YxOS41SDYuMjVBMS44NCwxLjg0LDAsMCwxLDQuNCwxNy42NVYxMy41SDUuNjN2NC4xNWEuNjEuNjEsMCwwLDAsLjYyLjYyWm0wLTE0LjUxaDQuMjdWNUg2LjI1YS42LjYsMCwwLDAtLjQ0LjE4LjU3LjU3LDAsMCwwLS4xNy40M1Y5LjgxSDQuNDFWNS42QTEuODMsMS44MywwLDAsMSw2LjI1LDMuNzZabTUsNy45TDguMTUsMTQuODMsNy4zLDE0LDksMTIuMjdINC40MVYxMUg4Ljk0TDcuMyw5LjM4LDcuNzMsOWwuNDMtLjQzWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcbiAgIHNwbGl0X2NlbGw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xMC4zNywxMi4yNUg2Ljc0TDguNCwxMy45NGwtLjg3Ljg2TDQuNDEsMTEuNjMsNy41Myw4LjVsLjg3Ljg2TDYuNzQsMTFoMy42MnYxLjIzWm05Ljc4LS42MUwxNywxNC44MSwxNi4xMywxNGwxLjY2LTEuNjlIMTQuMTZWMTFoMy42M0wxNi4xMyw5LjM3bC40My0uNDNBNS4yNCw1LjI0LDAsMCwxLDE3LDguNTFaTTE4LjksOC4yMlY1LjYxYS41Ny41NywwLDAsMC0uMTgtLjQzQS42NS42NSwwLDAsMCwxOC4yOSw1SDEyLjg4VjE4LjI4aDUuNDFhLjcuNywwLDAsMCwuNDQtLjE4LjU3LjU3LDAsMCwwLC4xOC0uNDNWMTVoMS4yM3YyLjY0YTEuODQsMS44NCwwLDAsMS0xLjg1LDEuODNoLTEyQTEuODQsMS44NCwwLDAsMSw0Ljk0LDE5YTEuODEsMS44MSwwLDAsMS0uNTQtMS4yOVYxNUg1LjYzdjIuNjRhLjU3LjU3LDAsMCwwLC4xOC40My42Ny42NywwLDAsMCwuNDQuMThoNS40MVY1SDYuMjVhLjcuNywwLDAsMC0uNDQuMTguNTYuNTYsMCwwLDAtLjE3LjQzVjguMjJINC40MVY1LjYxQTEuOCwxLjgsMCwwLDEsNSw0LjMxYTEuOTEsMS45MSwwLDAsMSwxLjMxLS41NWgxMmExLjg5LDEuODksMCwwLDEsMS4zMS41NSwxLjgsMS44LDAsMCwxLC41NCwxLjNWOC4yM0gxOC45WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcbiAgIGNhcHRpb246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEzLjc5XCI+PGc+PHBhdGggZD1cIk00LjQxLDE4LjUySDIwLjE1di0ySDQuNDFaTTIwLDQuNzNIMTguMDdWNmguNjV2LjY1SDIwVjQuNzNaTTE3LDZWNC43M0gxNC41NVY2SDE3Wk0xMy40OSw2VjQuNzNIMTFWNmgyLjQ3Wk0xMCw2VjQuNzNINy41VjZIMTBaTTUuNzksNmguNjVWNC43M0g0LjVWNi42N0g1LjhWNlpNNC41LDExLjM0SDUuNzlWOC40OEg0LjVaTTYuNDQsMTMuOEg1Ljc5di0uNjVINC41djEuOTRINi40NFpNMTcsMTUuMDlWMTMuOEgxNC41NXYxLjI5SDE3Wm0tMy41MiwwVjEzLjhIMTF2MS4yOWgyLjQ3Wm0tMy41MywwVjEzLjhINy41djEuMjlIMTBaTTIwLDEzLjE2SDE4Ljcydi42NWgtLjY1VjE1LjFIMjBabS0xLjI5LTEuODJIMjBWOC40OGgtMS4zdjIuODZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjczKVwiLz48L2c+PC9zdmc+JyxcbiAgIGVkaXQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1LjczXCI+PGc+PHBhdGggZD1cIk03LjUxLDUuNjhoNmwxLjUyLTEuNTdINi45NGEyLjQsMi40LDAsMCwwLTEuNzkuODJBMi44LDIuOCwwLDAsMCw0LjQxLDYuOFYxN2EyLjU1LDIuNTUsMCwwLDAsLjc1LDEuOEEyLjQ4LDIuNDgsMCwwLDAsNywxOS41SDE3LjIyYTIuNTcsMi41NywwLDAsMCwxLjgzLS43NCwyLjUyLDIuNTIsMCwwLDAsLjc3LTEuOFY4LjgzbC0xLjU4LDEuNTR2NmExLjU0LDEuNTQsMCwwLDEtMS41MywxLjUzSDcuNTFBMS41NCwxLjU0LDAsMCwxLDYsMTYuNDFWNy4yMUExLjUyLDEuNTIsMCwwLDEsNy41MSw1LjY4Wm01LjYzLDcuNDdoMEwxMC43LDEwLjc0bC0xLDMuMzgsMS43MS0uNDgsMS43LS40OVptLjM0LS4zNGgwbDUuMzYtNS4zMkwxNi40LDUuMDgsMTEsMTAuNGwxLjIzLDEuMjEsMS4yMSwxLjJaTTE5LjkzLDYuNGEuODIuODIsMCwwLDAsLjIyLS40OEEuNTQuNTQsMCwwLDAsMjAsNS40N0wxOC40NSw0QS42Ny42NywwLDAsMCwxOCwzLjc3YS43LjcsMCwwLDAtLjQ4LjIxbC0uNzQuNzIsMi40NCwyLjQzLjM3LS4zNy4zNS0uMzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc3KVwiLz48L2c+PC9zdmc+JyxcbiAgIGRlbGV0ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzMgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE5LjE2LDYuNzFhLjk0Ljk0LDAsMCwwLC42OS0uMjguOTEuOTEsMCwwLDAsLjI5LS42OEExLDEsMCwwLDAsMTkuODUsNWEuOTMuOTMsMCwwLDAtLjY5LS4zSDE0LjI0QS45NC45NCwwLDAsMCwxNCw0LjA2YS45Mi45MiwwLDAsMC0uNy0uM2gtMmExLDEsMCwwLDAtLjcuMy45My45MywwLDAsMC0uMjguNjhINS4zOUEuOTIuOTIsMCwwLDAsNC43LDVhMSwxLDAsMCwwLS4yOS43MS45MS45MSwwLDAsMCwuMjkuNjgsMSwxLDAsMCwwLC42OS4yOEgxOS4xNlptLTEyLjc5LDFhMSwxLDAsMCwwLS43LjMuOTQuOTQsMCwwLDAtLjI4LjY5djguODVBMS44OCwxLjg4LDAsMCwwLDYsMTguOTNhMS45LDEuOSwwLDAsMCwxLjM5LjU3SDE3LjJhMS44NywxLjg3LDAsMCwwLDEuMzktLjU4LDEuOTEsMS45MSwwLDAsMCwuNTgtMS4zOVY4LjY4QTEsMSwwLDAsMCwxOC44OCw4YS44OS44OSwwLDAsMC0uNy0uMjksMSwxLDAsMCwwLS42OS4yOS45Mi45MiwwLDAsMC0uMjkuNjh2Ny44N2ExLDEsMCwwLDEtMSwxSDguMzRhLjk0Ljk0LDAsMCwxLS42OS0uMjgsMSwxLDAsMCwxLS4yOS0uNzFWOC42OGExLDEsMCwwLDAtMS0xWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBtb2RpZnk6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjcgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE5Ljc5LDE1LjIzYS42Ni42NiwwLDAsMSwuMy4zOC41OS41OSwwLDAsMS0uMDcuNDhsLS44LDEuMzhhLjY2LjY2LDAsMCwxLS4zOC4zLjU5LjU5LDAsMCwxLS40OC0uMDdsLS42OC0uMzhhNC41NSw0LjU1LDAsMCwxLTEuMzQuNzd2Ljc4YS42NC42NCwwLDAsMS0uMTguNDUuNjEuNjEsMCwwLDEtLjQ1LjE4aC0xLjZhLjYuNiwwLDAsMS0uNDQtLjE4LjY2LjY2LDAsMCwxLS4xOS0uNDV2LS43OGE0LjM2LDQuMzYsMCwwLDEtMS4zMi0uNzdsLS42OS4zOGEuNTguNTgsMCwwLDEtLjQ4LjA3LjY2LjY2LDAsMCwxLS4zOC0uM2wtLjM4LS42NmguODNhMS43NywxLjc3LDAsMCwwLDEuMjMtLjUyLDEuNzIsMS43MiwwLDAsMCwuNTEtMS4yM3YtLjE4YTMsMywwLDAsMCwuNDktLjI4bC4xNS4wOWExLjgzLDEuODMsMCwwLDAsLjg4LjIzQTEuNzUsMS43NSwwLDAsMCwxNS44NCwxNGwuODgtMS41MmExLjcsMS43LDAsMCwwLC4xNy0xLjMyLDEuNjYsMS42NiwwLDAsMC0uMy0uNjEsMS44NCwxLjg0LDAsMCwwLS41MS0uNDVsLS4xNS0uMDksMC0uMjksMC0uMjguMTUtLjA5YTEsMSwwLDAsMCwuMjYtLjE4bDAsLjA2di43OGE0LjM0LDQuMzQsMCwwLDEsMS4zNC43N2wuNjgtLjM4YS42OC42OCwwLDAsMSwuNDgtLjA2LjY0LjY0LDAsMCwxLC4zOC4yOWwuOCwxLjM4YS41OC41OCwwLDAsMSwuMDcuNDguNjMuNjMsMCwwLDEtLjMuMzhsLS42OC40YTMuODQsMy44NCwwLDAsMSwuMDguNzYsNC4xMyw0LjEzLDAsMCwxLS4wOC43OGwuMzQuMTguMzIuMlpNMTAuMTcsNy44NmExLjksMS45LDAsMCwxLDEuMzUsMy4yMywxLjg1LDEuODUsMCwwLDEtMS4zNS41NUExLjksMS45LDAsMCwxLDguODMsOC40MWExLjkyLDEuOTIsMCwwLDEsMS4zNC0uNTVabTEuNTgsNy4yYS43My43MywwLDAsMS0uMjEuNDkuNjYuNjYsMCwwLDEtLjQ4LjJIOS4yOWEuNjguNjgsMCwwLDEtLjY5LS42OVYxNC4yYTQuNzUsNC43NSwwLDAsMS0xLjQ4LS44NmwtLjc1LjQ1YS43My43MywwLDAsMS0uNywwLC42My42MywwLDAsMS0uMjUtLjI2TDQuNTQsMTJhLjY3LjY3LDAsMCwxLS4wOC0uNTMuNzEuNzEsMCwwLDEsLjMyLS40MmwuNzUtLjQzYTQuOCw0LjgsMCwwLDEtLjA4LS44NSw0LjcxLDQuNzEsMCwwLDEsLjA4LS44NWwtLjc0LS40NGEuNzEuNzEsMCwwLDEtLjMyLS40Mi42NS42NSwwLDAsMSwuMDctLjU0TDUuNDIsNmEuNjYuNjYsMCwwLDEsLjQyLS4zMmwuMTgsMGEuNzMuNzMsMCwwLDEsLjM1LjA5bC43NS40M0E0LjY4LDQuNjgsMCwwLDEsOC42LDUuMzNWNC40NWEuNjguNjgsMCwwLDEsLjY5LS42OWgxLjc3YS42NC42NCwwLDAsMSwuNDguMi43My43MywwLDAsMSwuMjEuNDl2Ljg4YTQuNzUsNC43NSwwLDAsMSwxLjQ4Ljg1TDE0LDUuNzVhLjY3LjY3LDAsMCwxLC4zNC0uMDlsLjE4LDBhLjcxLjcxLDAsMCwxLC40Mi4zMmwuODksMS41NGEuNjcuNjcsMCwwLDEsLjA2LjUyLjczLjczLDAsMCwxLS4zMi40M2wtLjc1LjQyYTQuOCw0LjgsMCwwLDEsLjA4Ljg1LDQuNzEsNC43MSwwLDAsMS0uMDguODVsLjc1LjQzYS42Ni42NiwwLDAsMSwuMzIuNDIuNzMuNzMsMCwwLDEtLjA2LjU0bC0uODksMS41MmEuNjkuNjksMCwwLDEtLjI1LjI2LjcuNywwLDAsMS0uMzUuMDkuNjQuNjQsMCwwLDEtLjM0LS4wOWwtLjc1LS40NWE0Ljg3LDQuODcsMCwwLDEtMS40OC44NnYuODdaTTcuMjMsOS43NWEzLDMsMCwwLDAsLjg2LDIuMDgsMi45NCwyLjk0LDAsMSwwLDQuMTYtNC4xNiwzLDMsMCwwLDAtMi4wOC0uODVBMi45NCwyLjk0LDAsMCwwLDcuMjMsOS43NVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgcmV2ZXJ0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NiAxNC42OVwiPjxnPjxwYXRoIGQ9XCJNMTguMjYsMTVWMTIuM2wxLjg5LTJWMTVhMi41OCwyLjU4LDAsMCwxLS4yNCwxYy0uMi41OC0uNzUuOTItMS42NSwxSDcuNTZ2Mkw0LjQxLDE1LjYzLDcuNTYsMTN2MmgxMC43Wk02LjMsOC4yOFYxMUw0LjQxLDEzVjguMjhhMi41OCwyLjU4LDAsMCwxLC4yNC0xYy4yLS41OC43NS0uOTIsMS42NS0xSDE3di0ybDMuMTUsMy4zNEwxNywxMC4zdi0ySDYuM1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtNC4yOClcIi8+PC9nPjwvc3ZnPicsXG4gICBhdXRvX3NpemU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk02LjcxLDE3LjE5LDYuODksMTZsMS4yMS0uMTVBNiw2LDAsMCwxLDYuODEsMTMuOWE1Ljc4LDUuNzgsMCwwLDEtLjQ1LTIuMjdBNiw2LDAsMCwxLDguMSw3LjQ1YTUuODMsNS44MywwLDAsMSw0LjE3LTEuNzNsMS0xLTEtMUE3Ljg5LDcuODksMCwwLDAsNSwxNC42NGE3LjczLDcuNzMsMCwwLDAsMS43MSwyLjU1Wm01LjU3LDIuMzFoMEE3Ljg2LDcuODYsMCwwLDAsMTcuODUsNi4wN0wxNy42Nyw3LjNsLTEuMjEuMTVhNS45LDUuOSwwLDAsMSwxLjI5LDEuOTIsNS44MSw1LjgxLDAsMCwxLC40NSwyLjI2LDUuOTEsNS45MSwwLDAsMS01LjksNS45bC0xLDEsLjQ5LjQ5LjQ3LjVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcbiAgIGluc2VydF9yb3dfYmVsb3c6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjggMTUuOFwiPjxnPjxwYXRoIGQ9XCJNMTUuNywxLjNjLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4yTDE1LjMsMUgwLjRMMC4zLDEuMWMwLDAtMC4xLDAuMS0wLjEsMC4xYzAsMC0wLjEsMC4xLTAuMSwwLjFMMCwxLjR2Ny43bDAuMSwwLjFjMCwwLjEsMC4xLDAuMSwwLjIsMC4ybDAuMSwwLjFoMi4zVjkuM2wwLjEtMC41TDMsOC41bDAuMS0wLjJjLTAuMSwwLTAuMiwwLTAuMywwSDEuMnYtNmgxMy4zdjZoLTEuNmMtMC4xLDAtMC4yLDAtMC4zLDBsMC4xLDAuMmwwLjIsMC40QzEyLjksOSwxMyw5LjIsMTMsOS4zdjAuMWgyLjNsMC4yLTAuMWMwLjEsMCwwLjEtMC4xLDAuMi0wLjJsMC4xLTAuMVYxLjRMMTUuNywxLjN6XCIvPjxwYXRoIGQ9XCJNMTAuNSw3LjVDOS45LDcuMSw5LjMsNi44LDguNiw2LjdjLTAuMiwwLTAuNS0wLjEtMC43LDBjLTAuMiwwLTAuNSwwLTAuNywwQzYuNiw2LjcsNi4xLDYuOSw1LjYsNy4zQzUuMiw3LjYsNC43LDgsNC40LDguNEM0LjMsOC42LDQuMiw4LjgsNC4yLDguOUM0LjEsOS4xLDQsOS4zLDMuOSw5LjRDMy45LDkuNiwzLjgsOS43LDMuOCw5LjljMCwwLjItMC4xLDAuMy0wLjEsMC41di0wLjFjLTAuMSwwLjgsMC4xLDEuNiwwLjUsMi40YzAuNCwwLjcsMSwxLjMsMS43LDEuN2MwLjMsMC4yLDAuNiwwLjMsMC45LDAuM2MwLjMsMC4xLDAuNywwLjEsMSwwLjFjMC4zLDAsMC43LDAsMS0wLjFjMC4zLTAuMSwwLjYtMC4yLDAuOS0wLjNjMC41LTAuMywwLjktMC42LDEuMy0xYzAuMy0wLjQsMC42LTAuOCwwLjgtMS4zYzAuMS0wLjQsMC4yLTAuOSwwLjItMS40YzAtMC41LTAuMS0xLTAuMy0xLjRDMTEuNSw4LjYsMTEuMSw4LDEwLjUsNy41eiBNMTAuMSwxMS4zSDguNXYxLjZIOEg3LjlINy4zdjB2LTAuMXYtMS40SDUuN3YtMC40di0wLjJ2LTAuNmgwaDEuNVY4LjVoMS4ydjEuNmgxLjZWMTEuM3pcIi8+PC9nPjwvc3ZnPicsXG4gICBpbnNlcnRfcm93X2Fib3ZlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTAuMSwxNC41YzAuMSwwLjEsMC4xLDAuMiwwLjIsMC4ybDAuMSwwLjFoMTQuOWwwLjEtMC4xYzAsMCwwLjEtMC4xLDAuMS0wLjFjMCwwLDAuMS0wLjEsMC4xLTAuMWwwLjEtMC4xVjYuN2wtMC4xLTAuMWMwLTAuMS0wLjEtMC4xLTAuMi0wLjJsLTAuMS0wLjFoLTIuM3YwLjFsLTAuMSwwLjVsLTAuMiwwLjRsLTAuMSwwLjJjMC4xLDAsMC4yLDAsMC4zLDBoMS42djZIMS4zdi02aDEuNmMwLjEsMCwwLjIsMCwwLjMsMEwzLjEsNy4zTDIuOSw2LjlDMi44LDYuOCwyLjgsNi42LDIuNyw2LjVWNi4zSDAuNEwwLjMsNi40Yy0wLjEsMC0wLjEsMC4xLTAuMiwwLjJMMCw2Ljd2Ny43TDAuMSwxNC41elwiLz48cGF0aCBkPVwiTTUuMyw4LjNjMC42LDAuNSwxLjIsMC44LDEuOSwwLjljMC4yLDAsMC41LDAuMSwwLjcsMGMwLjIsMCwwLjUsMCwwLjcsMGMwLjYtMC4xLDEuMS0wLjMsMS42LTAuNmMwLjUtMC4zLDAuOS0wLjcsMS4yLTEuMmMwLjEtMC4yLDAuMi0wLjMsMC4zLTAuNWMwLjEtMC4yLDAuMi0wLjQsMC4yLTAuNWMwLjEtMC4xLDAuMS0wLjMsMC4xLTAuNEMxMiw1LjgsMTIsNS42LDEyLDUuNHYwLjFjMC4xLTAuOC0wLjEtMS42LTAuNS0yLjRjLTAuNC0wLjctMS0xLjMtMS43LTEuN0M5LjUsMS4zLDkuMiwxLjIsOC45LDEuMUM4LjUsMSw4LjIsMSw3LjksMWMtMC4zLDAtMC43LDAtMSwwLjFDNi42LDEuMiw2LjMsMS4zLDYsMS40QzUuNSwxLjcsNS4xLDIsNC43LDIuNEM0LjQsMi44LDQuMSwzLjMsMy45LDMuOEMzLjgsNC4yLDMuNyw0LjcsMy43LDUuMmMwLDAuNSwwLjEsMSwwLjMsMS40QzQuMyw3LjIsNC43LDcuOCw1LjMsOC4zeiBNNS43LDQuNWgxLjZWMi45aDAuNWgwLjFoMC42djB2MC4xdjEuNEgxMHYwLjR2MC4ydjAuNmgwSDguNXYxLjZINy4zVjUuN0g1LjdWNC41elwiLz48L2c+PC9zdmc+JyxcbiAgIGluc2VydF9jb2x1bW5fbGVmdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0xNC41LDE1LjdjMC4xLTAuMSwwLjItMC4xLDAuMi0wLjJsMC4xLTAuMVYwLjRsLTAuMS0wLjFjMCwwLTAuMS0wLjEtMC4xLTAuMWMwLDAtMC4xLTAuMS0wLjEtMC4xTDE0LjQsMEg2LjdMNi42LDAuMWMtMC4xLDAtMC4xLDAuMS0wLjIsMC4yTDYuMywwLjR2Mi4zaDAuMWwwLjUsMC4xTDcuMywzbDAuMiwwLjFjMC0wLjEsMC0wLjIsMC0wLjNWMS4yaDZ2MTMuM2gtNnYtMS42YzAtMC4xLDAtMC4yLDAtMC4zbC0wLjIsMC4xbC0wLjQsMC4yQzYuNywxMi45LDYuNiwxMyw2LjQsMTNINi4zdjIuM2wwLjEsMC4yYzAsMC4xLDAuMSwwLjEsMC4yLDAuMmwwLjEsMC4xaDcuN0wxNC41LDE1Ljd6XCIvPjxwYXRoIGQ9XCJNOC4zLDEwLjVDOC43LDEwLDksOS4zLDkuMSw4LjZjMC0wLjIsMC4xLTAuNSwwLTAuN2MwLTAuMiwwLTAuNSwwLTAuN0M5LDYuNyw4LjgsNi4xLDguNSw1LjdDOC4yLDUuMiw3LjgsNC44LDcuMyw0LjVDNy4yLDQuNCw3LDQuMyw2LjksNC4yQzYuNyw0LjEsNi41LDQsNi40LDRDNi4yLDMuOSw2LjEsMy45LDUuOSwzLjhjLTAuMiwwLTAuMy0wLjEtMC41LTAuMWgwLjFDNC43LDMuNywzLjgsMy45LDMuMSw0LjNDMi40LDQuNywxLjgsNS4zLDEuNCw2QzEuMyw2LjMsMS4yLDYuNiwxLjEsNi45QzEsNy4yLDEsNy42LDEsNy45YzAsMC4zLDAsMC43LDAuMSwxYzAuMSwwLjMsMC4yLDAuNiwwLjMsMC45YzAuMywwLjUsMC42LDAuOSwxLDEuM2MwLjQsMC4zLDAuOCwwLjYsMS4zLDAuOEM0LjIsMTIsNC43LDEyLjEsNS4xLDEyYzAuNSwwLDEtMC4xLDEuNC0wLjNDNy4yLDExLjUsNy44LDExLjEsOC4zLDEwLjV6TTQuNSwxMC4xVjguNUgyLjlWOFY3LjlWNy4zaDBIM2gxLjRWNS43aDAuNGgwLjJoMC42djB2MS41aDEuNnYxLjJINS43djEuNkg0LjV6XCIvPjwvZz48L3N2Zz4nLFxuICAgaW5zZXJ0X2NvbHVtbl9yaWdodDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0xLjMsMC4xQzEuMiwwLjIsMS4xLDAuMiwxLjEsMC4zTDEsMC40djE0LjlsMC4xLDAuMWMwLDAsMC4xLDAuMSwwLjEsMC4xYzAsMCwwLjEsMC4xLDAuMSwwLjFsMC4xLDAuMWg3LjdsMC4xLTAuMWMwLjEsMCwwLjEtMC4xLDAuMi0wLjJsMC4xLTAuMXYtMi4zSDkuM2wtMC41LTAuMWwtMC40LTAuMmwtMC4yLTAuMWMwLDAuMSwwLDAuMiwwLDAuM3YxLjZoLTZWMS4zaDZ2MS42YzAsMC4xLDAsMC4yLDAsMC4zbDAuMi0wLjFsMC40LTAuMkM5LDIuOSw5LjIsMi44LDkuMywyLjhoMC4xVjAuNUw5LjQsMC4zYzAtMC4xLTAuMS0wLjEtMC4yLTAuMkw5LjEsMEgxLjRMMS4zLDAuMXpcIi8+PHBhdGggZD1cIk03LjUsNS4zQzcsNS44LDYuNyw2LjUsNi42LDcuMmMwLDAuMi0wLjEsMC41LDAsMC43YzAsMC4yLDAsMC41LDAsMC43YzAuMSwwLjYsMC4zLDEuMSwwLjYsMS42YzAuMywwLjUsMC43LDAuOSwxLjIsMS4yYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC4zYzAuMiwwLjEsMC40LDAuMiwwLjUsMC4yYzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLjEsMC41LDAuMWgtMC4xYzAuOCwwLjEsMS42LTAuMSwyLjQtMC41YzAuNy0wLjQsMS4zLTEsMS43LTEuN2MwLjItMC4zLDAuMy0wLjYsMC4zLTAuOWMwLjEtMC4zLDAuMS0wLjcsMC4xLTFjMC0wLjMsMC0wLjctMC4xLTFjLTAuMS0wLjMtMC4yLTAuNi0wLjMtMC45Yy0wLjMtMC41LTAuNi0wLjktMS0xLjNDMTMsNC40LDEyLjUsNC4yLDEyLDRjLTAuNC0wLjEtMC45LTAuMi0xLjQtMC4yYy0wLjUsMC0xLDAuMS0xLjQsMC4yQzguNSw0LjMsNy45LDQuNyw3LjUsNS4zeiBNMTEuMyw1Ljd2MS42aDEuNnYwLjV2MC4xdjAuNmgwaC0wLjFoLTEuNHYxLjZoLTAuNGgtMC4yaC0wLjZ2MFY4LjVIOC41VjcuM2gxLjZWNS43SDExLjN6XCIvPjwvZz48L3N2Zz4nLFxuICAgZGVsZXRlX3JvdzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTMuODNcIj48Zz48cGF0aCBkPVwiTTQuNywxOC40NmwuMTIuMDhIMTkuNzNsLjEyLS4wOGEuNTguNTgsMCwwLDAsLjIyLS4yMmwuMDgtLjEyLDAtNy42OS0uMDgtLjExYS43Ny43NywwLDAsMC0uMTgtLjE4bC0uMTEtLjA4LTIuMzEsMC0uMDguMjgtLjEuMjlhMS41OCwxLjU4LDAsMCwxLS4xMi4yOWwtLjE0LjM0czAsMCwuMTgsMEgxOC45djZINS42NHYtNkg3LjM1Yy4xNCwwLC4yLDAsLjE4LDBsLS4xNC0uMzRhMi44NSwyLjg1LDAsMCwxLS4xMi0uMjlsLS4xLS4yOS0uMDctLjI3LTIuMzEsMC0uMTEuMDhhLjc3Ljc3LDAsMCwwLS4xOC4xOGwtLjA4LjExLDAsNy42OS4wOC4xMmEuNDcuNDcsMCwwLDAsLjA5LjEybC4xMy4wOVpNMTIuMTEsMTNhNCw0LDAsMCwwLDEuNDYtLjIxLDQuNTEsNC41MSwwLDAsMCwxLjMxLS43MUE0LDQsMCwwLDAsMTYuMjYsMTBhNC4zMiw0LjMyLDAsMCwwLS4wOC0yLjU0LDQuMzQsNC4zNCwwLDAsMC0xLTEuNTIsNC4xNSw0LjE1LDAsMCwwLTEuNTQtMSw0LjM0LDQuMzQsMCwwLDAtMS4zNS0uMjJBNC4wNyw0LjA3LDAsMCwwLDExLDQuOTMsMy45NCwzLjk0LDAsMCwwLDkuMjQsNi4wNywzLjkyLDMuOTIsMCwwLDAsOC4xNSw4Ljg4YTMuOTEsMy45MSwwLDAsMCwuMTIuOTVBNC4xNiw0LjE2LDAsMCwwLDEyLjExLDEzWm0yLjM1LTQuMTR2LjU4SDEwLjA5VjguMjdoNC4zN3YuNThaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTQuNzEpXCIvPjwvZz48L3N2Zz4nLFxuICAgZGVsZXRlX2NvbHVtbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTMuODEgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTUuNjYsMTkuNDJsLjEyLjA4LDcuNjksMCwuMTEtLjA4YS43Ny43NywwLDAsMCwuMTgtLjE4bC4wOC0uMTEsMC0yLjMyLS4xNSwwLS40NS0uMTUtLjQyLS4xOC0uMTctLjA3YTEsMSwwLDAsMCwwLC4yN3YxLjYzaC02VjVoNlY2LjYyYS45LjksMCwwLDAsMCwuMjZsLjE3LS4wNy40Mi0uMTdhMy45MSwzLjkxLDAsMCwxLC40NS0uMTVsLjE1LDAsMC0yLjMyTDEzLjc1LDRhLjc3Ljc3LDAsMCwwLS4xOC0uMThsLS4xMS0uMDhINS43OWwtLjEzLjA3YS42My42MywwLDAsMC0uMjEuMjJsLS4wOC4xMlYxOS4wOGwuMDguMTJhLjQ3LjQ3LDAsMCwwLC4wOS4xMi4zNS4zNSwwLDAsMCwuMTIuMVptOS0zLjY3YTQuMTYsNC4xNiwwLDAsMCwyLjM2LS41MSw0LjA4LDQuMDgsMCwwLDAsMS42Ny0xLjcyLDQsNCwwLDAsMCwuMzUtLjkxLDMuNzksMy43OSwwLDAsMCwuMS0xLDQuNzEsNC43MSwwLDAsMC0uMTEtMSw1LDUsMCwwLDAtLjMtLjg3LDQuMjUsNC4yNSwwLDAsMC0xLTEuMjUsNC40OSw0LjQ5LDAsMCwwLTEuMzQtLjgxQTQuMjYsNC4yNiwwLDAsMCwxNSw3LjQ4YTMuODgsMy44OCwwLDAsMC0xLjQxLjI1QTQuMzIsNC4zMiwwLDAsMCwxMS44Niw5LDQsNCwwLDAsMCwxMSwxMC45NGE0LjQsNC40LDAsMCwwLS4wNS42OCw0LjUsNC41LDAsMCwwLC4wNS42OCwzLjkzLDMuOTMsMCwwLDAsLjYxLDEuNTcsNC4yMiw0LjIyLDAsMCwwLDEuMTgsMS4yLDQuNTksNC41OSwwLDAsMCwuNDguMjdjLjIuMS4zNy4xNy41LjIyYTIuNDQsMi40NCwwLDAsMCwuNDUuMTIsNC42MSw0LjYxLDAsMCwwLC41LjA3Wm0yLjU0LTQuMTJ2LjU4SDEyLjg3VjExaDQuMzd2LjU5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNS4zNyAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBmaXhlZF9jb2x1bW5fd2lkdGg6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk02LDVIMThBMSwxIDAgMCwxIDE5LDZBMSwxIDAgMCwxIDE4LDdINkExLDEgMCAwLDEgNSw2QTEsMSAwIDAsMSA2LDVNMjEsMlY0SDNWMkgyMU0xNSw4SDE3VjIySDE1VjhNNyw4SDlWMjJIN1Y4TTExLDhIMTNWMjJIMTFWOFpcIiAvPjwvc3ZnPicsXG4gICByb3RhdGVfbGVmdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0wLjUsMTAuMmMwLDAuMSwwLDAuMiwwLDAuM3YwLjJsMCwwYzAuMSwwLjMsMC4zLDAuNiwwLjQsMC45bDAsMEMxLDExLjgsMS4zLDEyLDEuNSwxMS45aDAuMWgwLjJoMC4xYzAuMS0wLjEsMC4zLTAuMywwLjQtMC41di0wLjJjMC0wLjEsMC0wLjItMC4xLTAuM2wwLDBjLTAuMi0wLjItMC4zLTAuNC0wLjMtMC43bDAsMEMxLjgsMTAsMS43LDkuOSwxLjUsOS44Yy0wLjEsMC0wLjIsMC0wLjMsMEgwLjlDMC43LDkuOSwwLjYsMTAsMC41LDEwLjJMMC41LDEwLjJ6XCIvPjxwYXRoIGQ9XCJNMi4yLDExLjVMMi4yLDExLjVMMi4yLDExLjV6XCIvPjxwYXRoIGQ9XCJNNS45LDMuNkw1LjksMy42TDUuOSwzLjZ6XCIvPjxwYXRoIGQ9XCJNMC4xLDcuOWMwLDAuMywwLDAuNiwwLDAuOWwwLDBsMCwwbDAsMGwwLDBjMCwwLjIsMC4xLDAuMywwLjIsMC40bDAsMGMwLjIsMC4xLDAuMywwLjIsMC41LDAuMmwwLDBsMCwwYzAuMiwwLDAuNC0wLjEsMC41LTAuM2wwLDBjMC0wLjEsMC4xLTAuMywwLjEtMC40VjguNmwwLDBjMC0wLjIsMC0wLjUsMC0wLjdsMCwwYzAtMC4yLTAuMS0wLjQtMC4yLTAuNUMxLjEsNy4zLDAuOSw3LjIsMC43LDcuMlMwLjMsNy4zLDAuMiw3LjRDMC4xLDcuNSwwLDcuNywwLjEsNy45elwiLz48cGF0aCBkPVwiTTEuOSwxMi43TDEuOSwxMi43YzAsMC4yLDAsMC40LDAuMiwwLjVsMCwwbDAuMiwwLjNsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC40bDAsMGwwLDBsMCwwbDAsMEMyLjksMTQsMywxNC4xLDMuMiwxNC4xczAuNC0wLjEsMC41LTAuMmMwLjEtMC4yLDAuMi0wLjMsMC4yLTAuNXYtMC4xYzAtMC4yLTAuMS0wLjQtMC4yLTAuNWwwLDBsLTAuNC0wLjRsLTAuMi0wLjJsMCwwQzMsMTIuMSwyLjgsMTIsMi42LDEybDAsMGMtMC4yLDAtMC40LDAuMS0wLjUsMC4ybDAsMEMyLDEyLjMsMS45LDEyLjUsMS45LDEyLjd6XCIvPjxwYXRoIGQ9XCJNNi42LDE1YzAsMC4yLDAuMSwwLjQsMC4yLDAuNWMwLjEsMC4xLDAuMiwwLjIsMC40LDAuM2wwLDBjMC4zLDAsMC41LDAsMC43LDBoMC4zbDAsMGMwLjIsMCwwLjQtMC4xLDAuNS0wLjJjMC4xLTAuMiwwLjItMC4zLDAuMi0wLjVsMCwwbDAsMGMwLTAuMi0wLjEtMC40LTAuMi0wLjVsMCwwYy0wLjEtMC4xLTAuMy0wLjItMC41LTAuMmwwLDBINy45Yy0wLjEsMC0wLjMsMC0wLjUsMGwwLDBINy4zYy0wLjItMC4xLTAuMywwLTAuNSwwLjFsMCwwQzYuNywxNC42LDYuNiwxNC44LDYuNiwxNUw2LjYsMTVMNi42LDE1TDYuNiwxNXpcIi8+PHBhdGggZD1cIk00LjIsNy40QzQsNy41LDQsNy43LDQsNy45YzAsMC4yLDAsMC40LDAuMiwwLjVsMCwwbDMuMiwzLjJsMCwwYzAuMSwwLjEsMC4zLDAuMiwwLjUsMC4yczAuMy0wLjEsMC41LTAuMmwwLDBsMy4yLTMuMmwwLDBjMC4xLTAuMSwwLjItMC4zLDAuMi0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC41bDAsMEMxMS41LDcuMywxMSw2LjcsMTAsNS44bDAsMEw4LjQsNC4ybDAsMEM4LjMsNC4xLDguMSw0LDcuOSw0UzcuNSw0LjEsNy40LDQuMkw0LjIsNy40TDQuMiw3LjR6IE02LjgsOUw1LjcsNy45bDIuMi0yLjJsMi4zLDIuMmwtMi4zLDIuMkM3LjcsOS45LDcuMyw5LjUsNi44LDlMNi44LDl6XCIvPjxwYXRoIGQ9XCJNNC4xLDE0LjFDNCwxNC4yLDQsMTQuMyw0LDE0LjR2MC4ybDAsMGMwLjEsMC4xLDAuMiwwLjMsMC40LDAuNGwwLDBjMC4zLDAuMSwwLjYsMC4yLDAuOSwwLjRoMC4xaDAuMWwwLDBjMC4yLDAsMC4zLTAuMSwwLjUtMC4xbDAsMGMwLjItMC4xLDAuMy0wLjMsMC4zLTAuNGwwLDBsMCwwbDAsMGwwLDB2LTAuMmMwLTAuMS0wLjEtMC4yLTAuMS0wLjNsMCwwQzYuMSwxNC4yLDYsMTQuMSw1LjgsMTRsMCwwYy0wLjMtMC4xLTAuNS0wLjItMC44LTAuMmwwLDBjLTAuMS0wLjEtMC4yLTAuMS0wLjMtMC4xSDQuNUM0LjMsMTMuNyw0LjIsMTMuOSw0LjEsMTQuMXpcIi8+PHBhdGggZD1cIk05LjMsMTQuNGMwLDAuMS0wLjEsMC4zLDAsMC40VjE1bDAsMGMwLDAuMSwwLjEsMC4zLDAuNSwwLjRjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFsMCwwaDAuMWwwLDBjMC4zLTAuMSwwLjYtMC4yLDAuOS0wLjNsMCwwYzAuMS0wLjEsMC4yLTAuMiwwLjMtMC40bDAuMS0wLjNjMC0wLjEtMC4xLTAuMi0wLjEtMC4zbDAsMGMtMC4xLTAuMi0wLjItMC4zLTAuNC0wLjRsMCwwaC0wLjNjLTAuMSwwLTAuMiwwLTAuMywwbDAsMGMtMC4yLDAuMS0wLjUsMC4yLTAuOCwwLjNsMCwwQzkuNSwxNC4xLDkuNCwxNC4yLDkuMywxNC40TDkuMywxNC40elwiLz48cGF0aCBkPVwiTTExLjQsMTQuN0wxMS40LDE0LjdMMTEuNCwxNC43elwiLz48cGF0aCBkPVwiTTkuNSwxNS4zTDkuNSwxNS4zTDkuNSwxNS4zelwiLz48cGF0aCBkPVwiTTE1LjksNy45YzAtMS0wLjItMi0wLjYtM2wwLDBjLTAuNC0xLTEtMS45LTEuNy0yLjZDMTIuOCwxLjYsMTIsMSwxMSwwLjZsMCwwQzEwLjEsMC4yLDksMCw4LDBDNy4zLDAsNi41LDAuMSw1LjgsMC4zbDAsMEM1LjIsMC41LDQuNiwwLjgsNCwxLjFMMy4xLDAuMmwwLDBDMi45LDAuMSwyLjgsMCwyLjYsMEgyLjRsMCwwQzIuMiwwLDIsMC4yLDEuOSwwLjRsMCwwTDAuMSw0LjlsMCwwQzAsNSwwLDUuMSwwLDUuMmMwLDAuMiwwLjEsMC40LDAuMiwwLjVsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC4yaDAuMUgxbDAsMGw0LjctMS44bDAsMEM1LjksNCw2LjEsMy44LDYuMSwzLjZWMy40QzYuMSwzLjIsNiwzLDUuOSwyLjlsMCwwTDUuMSwyLjFjMC40LTAuMiwwLjgtMC40LDEuMy0wLjVjMC41LTAuMSwxLjEtMC4yLDEuNy0wLjJjMC45LDAsMS43LDAuMiwyLjUsMC41bDAsMGMwLjgsMC4zLDEuNSwwLjgsMi4xLDEuNGMwLjYsMC42LDEuMSwxLjMsMS40LDIuMWwwLDBjMC4zLDAuOCwwLjUsMS42LDAuNSwyLjVzLTAuMiwxLjctMC41LDIuNWwwLDBjLTAuMywwLjgtMC44LDEuNS0xLjQsMi4xYy0wLjIsMC4yLTAuNCwwLjMtMC42LDAuNWwwLDBjLTAuMiwwLjEtMC4zLDAuMy0wLjMsMC41djAuMWMwLDAuMSwwLDAuMywwLjEsMC40bDAsMGMwLjEsMC4yLDAuMywwLjMsMC41LDAuM2wwLDBjMC4xLDAsMC4zLTAuMSwwLjQtMC4ybDAsMGwwLDBsMCwwbDAsMGMwLjItMC4yLDAuNS0wLjQsMC43LTAuNmwwLDBsMCwwbDAsMGwwLDBjMC43LTAuOCwxLjMtMS42LDEuNy0yLjZDMTUuNiwxMCwxNS44LDksMTUuOSw3Ljl6IE0xLjksNEMyLDMuOCwyLjEsMy41LDIuMywzLjFsMCwwTDIuNywybDEuMiwxLjJMMS45LDR6XCIvPjxwYXRoIGQ9XCJNNi44LDE1LjVMNi44LDE1LjVMNi44LDE1LjV6XCIvPjwvZz48L3N2Zz4nLFxuICAgcm90YXRlX3JpZ2h0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTkuOSwxNS4zTDkuOSwxNS4zTDkuOSwxNS4zelwiLz48cGF0aCBkPVwiTTYuOSwxNS4xTDYuOSwxNS4xYzAsMC4xLDAuMSwwLjMsMC4yLDAuNGwwLDBjMC4xLDAuMiwwLjMsMC4zLDAuNSwwLjNsMCwwaDAuM2MwLjIsMCwwLjQsMCwwLjcsMGwwLDBjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjNjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRWMTVjMC0wLjItMC4xLTAuNC0wLjItMC40Yy0wLjItMC4xLTAuMy0wLjItMC41LTAuMkg4LjRsMCwwYy0wLjEsMC0wLjMsMC0wLjUsMEg3LjZsMCwwYy0wLjIsMC0wLjQsMC4xLTAuNSwwLjJDNywxNC43LDYuOSwxNC45LDYuOSwxNS4xelwiLz48cGF0aCBkPVwiTTYuNSwxNC40TDYuNSwxNC40TDYuNSwxNC40elwiLz48cGF0aCBkPVwiTTUuOCw1LjhMNS44LDUuOGMtMSwwLjktMS41LDEuNS0xLjcsMS42bDAsMEM0LDcuNSw0LDcuNyw0LDcuOWMwLDAuMiwwLDAuNCwwLjIsMC41bDAsMGwzLjIsMy4ybDAsMGMwLjIsMC4xLDAuMywwLjIsMC41LDAuMnMwLjQtMC4xLDAuNS0wLjJsMCwwbDMuMi0zLjJsMCwwYzAuMS0wLjEsMC4yLTAuMywwLjItMC41YzAtMC4yLTAuMS0wLjQtMC4yLTAuNWwwLDBMOC40LDQuMkM4LjMsNC4xLDguMSw0LDcuOSw0QzcuNyw0LDcuNSw0LjEsNy40LDQuMmwwLDBMNS44LDUuOHogTTUuNiw3LjlsMi4zLTIuMmwyLjIsMi4yTDksOWwwLDBsMCwwbDAsMGwwLDBjLTAuNSwwLjYtMC45LDAuOS0xLjEsMS4xTDUuNiw3Ljl6XCIvPjxwYXRoIGQ9XCJNOSwxNS41TDksMTUuNUw5LDE1LjV6XCIvPjxwYXRoIGQ9XCJNOS42LDE0Ljd2MC4ybDAsMGwwLDBsMCwwbDAsMGMwLjEsMC4yLDAuMSwwLjMsMC4zLDAuM2MwLjEsMC4xLDAuMywwLjEsMC40LDAuMWwwLDBoMC4xaDAuMWMwLjMtMC4xLDAuNi0wLjMsMC45LTAuNGwwLDBjMC4xLTAuMSwwLjItMC4yLDAuMy0wLjRsMCwwdi0wLjJjMC0wLjEsMC0wLjItMC4xLTAuM2MtMC4xLTAuMi0wLjItMC4zLTAuNC0wLjRIMTFjLTAuMSwwLTAuMiwwLjEtMC4zLDAuMWwwLDBjLTAuMiwwLjEtMC40LDAuMi0wLjcsMC4zbDAsMGwwLDBjLTAuMSwwLjEtMC4zLDAuMi0wLjQsMC40QzkuNiwxNC41LDkuNiwxNC42LDkuNiwxNC43elwiLz48cGF0aCBkPVwiTTksMTQuNUw5LDE0LjVMOSwxNC41elwiLz48cGF0aCBkPVwiTTkuNiwxNC40TDkuNiwxNC40TDkuNiwxNC40elwiLz48cGF0aCBkPVwiTTExLjcsMTRMMTEuNywxNEwxMS43LDE0elwiLz48cGF0aCBkPVwiTTE1LjYsNy40TDE1LjYsNy40TDE1LjYsNy40elwiLz48cGF0aCBkPVwiTTE1LDkuNGMwLjIsMCwwLjQsMCwwLjYtMC4ybDAsMGMwLjEtMC4xLDAuMi0wLjIsMC4yLTAuNGwwLDBsMCwwbDAsMGwwLDBjMC0wLjMsMC0wLjYsMC0wLjljMC0wLjItMC4xLTAuNC0wLjItMC41Yy0wLjEtMC4xLTAuMy0wLjItMC41LTAuMnMtMC40LDAuMS0wLjUsMC4yYy0wLjEsMC4xLTAuMiwwLjMtMC4yLDAuNWwwLDBjMCwwLjIsMCwwLjQsMCwwLjdsMCwwdjAuMWMwLDAuMSwwLDAuMywwLjEsMC40bDAsMEMxNC42LDkuMywxNC44LDkuNCwxNSw5LjRMMTUsOS40TDE1LDkuNHpcIi8+PHBhdGggZD1cIk0xNCwxMmgwLjFoMC4yaDAuMWMwLjIsMCwwLjUtMC4yLDAuNi0wLjRsMCwwYzAuMi0wLjMsMC4zLTAuNiwwLjQtMC45bDAsMHYtMC4yYzAtMC4xLTAuMS0wLjItMC4xLTAuM2MtMC4xLTAuMi0wLjItMC4zLTAuNC0wLjRoLTAuM2MtMC4xLDAtMC4yLDAtMC4zLDBDMTQuMiw5LjksMTQsMTAsMTQsMTAuM2wwLDBjLTAuMSwwLjItMC4yLDAuNS0wLjMsMC43bDAsMGMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjN2MC4ybDAsMGwwLDBDMTMuNiwxMS42LDEzLjgsMTEuOCwxNCwxMnpcIi8+PHBhdGggZD1cIk0xNC42LDcuNEwxNC42LDcuNEwxNC42LDcuNHpcIi8+PHBhdGggZD1cIk00LjQsMTQuMmMtMC4xLDAuMS0wLjEsMC4yLTAuMSwwLjNsMC4xLDAuMmMwLDAuMiwwLjIsMC4zLDAuMywwLjRsMCwwYzAuMywwLjEsMC42LDAuMywxLjEsMC40bDAsMGgwLjFsMCwwYzAuMSwwLDAuMi0wLjEsMC40LTAuMmMwLjEsMCwwLjItMC4yLDAuMy0wLjNsMCwwdi0wLjJjMC0wLjEtMC4xLTAuMy0wLjItMC40Yy0wLjEtMC4xLTAuMi0wLjItMC40LTAuM2wwLDBjLTAuMi0wLjEtMC41LTAuMi0wLjctMC4zbDAsMGMtMC4xLDAtMC4yLDAtMC4zLDBINC43bDAsMEM0LjYsMTMuOSw0LjQsMTQsNC40LDE0LjJMNC40LDE0LjJ6XCIvPjxwYXRoIGQ9XCJNMTEuOSwxMy4zYzAsMC4yLDAuMSwwLjQsMC4yLDAuNmMwLjEsMC4xLDAuMywwLjIsMC41LDAuMnMwLjQtMC4xLDAuNS0wLjJsMCwwbDAsMGwwLDBsMCwwYzAuMS0wLjEsMC4zLTAuMywwLjQtMC40bDAsMGwwLjItMC4zbDAsMGMwLjEtMC4yLDAuMi0wLjMsMC4yLTAuNWwwLDBjMC0wLjItMC4xLTAuNC0wLjItMC41bDAsMGMtMC4xLTAuMS0wLjMtMC4yLTAuNS0wLjJsMCwwYy0wLjIsMC0wLjQsMC4xLTAuNSwwLjJsMCwwbC0wLjIsMC4ybC0wLjQsMC40bDAsMEMxMiwxMywxMS45LDEzLjEsMTEuOSwxMy4zTDExLjksMTMuM3pcIi8+PHBhdGggZD1cIk0xMi4xLDEzLjhMMTIuMSwxMy44TDEyLjEsMTMuOHpcIi8+PHBhdGggZD1cIk0xMS45LDEzLjNMMTEuOSwxMy4zTDExLjksMTMuM3pcIi8+PHBhdGggZD1cIk0xNS45LDUuMmMwLTAuMS0wLjEtMC4yLTAuMS0wLjNsMCwwTDE0LDAuNGwwLDBDMTMuOSwwLjIsMTMuNywwLDEzLjUsMGwwLDBsMCwwaC0wLjJjLTAuMiwwLTAuNCwwLjEtMC41LDAuMmwwLDBsLTAuOSwwLjljLTAuNS0wLjMtMS4xLTAuNi0xLjgtMC44bDAsMEM5LjQsMC4xLDguNywwLDcuOSwwYy0xLDAtMiwwLjItMywwLjZTMywxLjYsMi4zLDIuM0MxLjYsMy4xLDEsMy45LDAuNiw0LjlsMCwwQzAuMiw1LjgsMCw2LjgsMCw3LjljMCwxLDAuMiwyLDAuNiwzczAuOSwxLjgsMS43LDIuNmwwLDBsMCwwbDAsMGwwLDBjMC4yLDAuMiwwLjUsMC40LDAuNywwLjZsMCwwbDAsMGwwLDBsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC4ybDAsMGMwLjIsMCwwLjQtMC4xLDAuNi0wLjNsMCwwYzAuMS0wLjEsMC4xLTAuMywwLjEtMC40di0wLjFsMCwwQzQuMSwxMy4zLDQsMTMuMSwzLjksMTNsMCwwYy0wLjItMC4xLTAuNC0wLjMtMC42LTAuNWMtMC42LTAuNi0xLjEtMS4zLTEuNC0yLjFsMCwwQzEuNiw5LjYsMS40LDguOCwxLjQsNy45czAuMi0xLjcsMC41LTIuNWwwLDBjMC4zLTAuOCwwLjgtMS41LDEuNC0yLjFjMC42LTAuNiwxLjMtMS4xLDIuMS0xLjRsMCwwQzYuMiwxLjYsNywxLjQsNy45LDEuNGMwLjYsMCwxLjEsMC4xLDEuNywwLjJjMC41LDAuMSwwLjksMC4zLDEuMywwLjVsLTAuOCwwLjhsMCwwQzEwLDMuMSw5LjksMy4yLDkuOSwzLjR2MC4ybDAsMGwwLDBjMCwwLjIsMC4yLDAuNCwwLjQsMC41bDAsMGw0LjUsMS44bDAsMEgxNWgwLjFjMC4yLDAsMC40LTAuMSwwLjUtMC4ybDAsMEMxNS43LDUuNiwxNS44LDUuNCwxNS45LDUuMnogTTExLjgsMy4yTDEzLDJsMC40LDEuMWwwLDBjMC4yLDAuNCwwLjMsMC43LDAuNCwwLjlMMTEuOCwzLjJ6XCIvPjwvZz48L3N2Zz4nLFxuICAgbWlycm9yX2hvcml6b250YWw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0Ljc1IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xMy43NSwzLjc2bDUuOSwxNS43NGgtNS45VjMuNzZaTTQuOSwxOS41LDEwLjgsMy43NlYxOS41SDQuOVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuOSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXG4gICBtaXJyb3JfdmVydGljYWw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE0Ljc1XCI+PGc+PHBhdGggZD1cIk0yMC4xNSwxMy4xLDQuNDEsMTlWMTMuMUgyMC4xNVpNNC40MSw0LjI1bDE1Ljc0LDUuOUg0LjQxVjQuMjVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjI1KVwiLz48L2c+PC9zdmc+JyxcbiAgIGNoZWNrZWQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc1IDEyLjFcIj48Zz48cGF0aCBkPVwiTTQuNTksMTIuMjNsLjEyLjE4TDkuNDMsMTcuNWEuNTguNTgsMCwwLDAsLjg0LDBMMjAsNy40NWgwYS41OC41OCwwLDAsMCwwLS44NGwtLjg1LS44NWEuNTguNTgsMCwwLDAtLjg0LDBIMTguMmwtOC4xMiw4LjQxYS4yOS4yOSwwLDAsMS0uNDIsMGwtMy40LTMuNjNhLjU4LjU4LDAsMCwwLS44NCwwbC0uODUuODVhLjYuNiwwLDAsMC0uMTQuMjEuNTEuNTEsMCwwLDAsMCwuNDRjLjA1LjA2LjEuMTMuMTYuMTlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjM4IC01LjU4KVwiLz48L2c+PC9zdmc+JyxcbiAgIGxpbmVfYnJlYWs6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0xOSw2YTEsMSwwLDAsMC0xLDF2NGExLDEsMCwwLDEtMSwxSDcuNDFsMS4zLTEuMjlBMSwxLDAsMCwwLDcuMjksOS4yOWwtMywzYTEsMSwwLDAsMC0uMjEuMzMsMSwxLDAsMCwwLDAsLjc2LDEsMSwwLDAsMCwuMjEuMzNsMywzYTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40Mkw3LjQxLDE0SDE3YTMsMywwLDAsMCwzLTNWN0ExLDEsMCwwLDAsMTksNlpcIi8+PC9zdmc+JyxcbiAgIGF1ZGlvOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTQsMy4yM1Y1LjI5QzE2Ljg5LDYuMTUgMTksOC44MyAxOSwxMkMxOSwxNS4xNyAxNi44OSwxNy44NCAxNCwxOC43VjIwLjc3QzE4LDE5Ljg2IDIxLDE2LjI4IDIxLDEyQzIxLDcuNzIgMTgsNC4xNCAxNCwzLjIzTTE2LjUsMTJDMTYuNSwxMC4yMyAxNS41LDguNzEgMTQsNy45N1YxNkMxNS41LDE1LjI5IDE2LjUsMTMuNzYgMTYuNSwxMk0zLDlWMTVIN0wxMiwyMFY0TDcsOUgzWlwiIC8+PC9zdmc+JyxcbiAgIGltYWdlX2dhbGxlcnk6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMzAgMzAgMTUwIDE1MFwiPjxnPjxwYXRoIGQ9XCJNMTUyLjc3NSwxMjAuNTQ4VjUxLjY1MWMwLTEyLjI3MS05Ljk4NC0yMi4yNTQtMjIuMjU0LTIyLjI1NEg0My43MjdjLTEyLjI3MSwwLTIyLjI1NCw5Ljk4My0yMi4yNTQsMjIuMjU0djY4Ljg5NmMwLDEyLjI3LDkuOTgzLDIyLjI1NCwyMi4yNTQsMjIuMjU0aDg2Ljc5NUMxNDIuNzkxLDE0Mi44MDIsMTUyLjc3NSwxMzIuODE3LDE1Mi43NzUsMTIwLjU0OHogTTM2LjM5NCw1MS42NTFjMC00LjA0MiwzLjI5MS03LjMzMyw3LjMzMy03LjMzM2g4Ni43OTVjNC4wNDIsMCw3LjMzMiwzLjI5MSw3LjMzMiw3LjMzM3YyMy45MTdsLTE0LjkzOC0xNy43NjdjLTEuNDEtMS42NzgtMy40ODctMi42NDktNS42OC0yLjY1OGgtMC4wMjljLTIuMTg0LDAtNC4yNTUsMC45NTQtNS42NzQsMi42MTNMNzYuNzA5LDk4LjUxOWwtOS4wOTYtOS4zOThjLTEuNDI3LTEuNDc0LTMuMzkyLTIuMjkxLTUuNDQ4LTIuMjczYy0yLjA1MiwwLjAyNS00LjAwNCwwLjg5My01LjM5NiwyLjRMMzYuMzk0LDExMS4zMlY1MS42NTF6IE00MS42ODQsMTI3LjU4NWwyMC42OTctMjIuNDE2bDkuMzEyLDkuNjIyYzEuNDYxLDEuNTExLDMuNDg5LDIuMzM0LDUuNTkyLDIuMjdjMi4xMDEtMC4wNjYsNC4wNzUtMS4wMTMsNS40NC0yLjYxMmwzNC40MzYtNDAuMzA4bDIwLjY5MywyNC42MTN2MjEuNzk0YzAsNC4wNDItMy4yOSw3LjMzMi03LjMzMiw3LjMzMkg0My43MjdDNDMuMDE4LDEyNy44OCw0Mi4zMzQsMTI3Ljc3NSw0MS42ODQsMTI3LjU4NXogTTE4Mi42MTYsMTUyLjVWNzUuNjU3YzAtNC4xMi0zLjM0LTcuNDYtNy40NjEtNy40NmMtNC4xMTksMC03LjQ2LDMuMzQtNy40Niw3LjQ2VjE1Mi41YzAsNC4xMTItMy4zNDcsNy40Ni03LjQ2MSw3LjQ2aC05NGMtNC4xMTksMC03LjQ2LDMuMzM5LTcuNDYsNy40NTljMCw0LjEyMywzLjM0MSw3LjQ2Miw3LjQ2LDcuNDYyaDk0QzE3Mi41NzYsMTc0Ljg4MSwxODIuNjE2LDE2NC44NDEsMTgyLjYxNiwxNTIuNXpcIi8+PC9nPjwvc3ZnPicsXG4gICBib29rbWFyazogJzxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTcsM0g3QTIsMiAwIDAsMCA1LDVWMjFMMTIsMThMMTksMjFWNUMxOSwzLjg5IDE4LjEsMyAxNywzWlwiIC8+PC9zdmc+JyxcbiAgIGRvd25sb2FkOiAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0yIDEySDRWMTdIMjBWMTJIMjJWMTdDMjIgMTguMTEgMjEuMTEgMTkgMjAgMTlINEMyLjkgMTkgMiAxOC4xMSAyIDE3VjEyTTEyIDE1TDE3LjU1IDkuNTRMMTYuMTMgOC4xM0wxMyAxMS4yNVYySDExVjExLjI1TDcuODggOC4xM0w2LjQ2IDkuNTVMMTIgMTVaXCIgLz48L3N2Zz4nLFxuICAgLy8gTW9yZSBpY29uc1xuICAgbW9yZV90ZXh0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEwIDEwIDE4MCAxODBcIj48Zz48cGF0aCBkPVwiTTQ5LjcxMSwxNDIuMTg4aDQ5LjAyN2MyLjMyOCwwLjAwMiw0LjM5NCwxLjQ5Miw1LjEyOSwzLjY5OWw5Ljc0MiwyOS4yNTJjMC4zNjMsMS4wOTIsMS4zODUsMS44MjgsMi41MzcsMS44M2wxNS44ODMsMC4wMWMwLjg1OSwwLDEuNjY3LTAuNDEyLDIuMTctMS4xMDlzMC42NDEtMS41OTQsMC4zNy0yLjQxbC0xNi42MjUtNTAuMDQ1TDg2LjUwMywyOC45NTNjLTAuMzYtMS4wOTctMS4zODMtMS44MzktMi41MzctMS44NDJINjQuNTMyYy0xLjE1My0wLjAwMS0yLjE3OCwwLjczNi0yLjU0MiwxLjgzMUwxMy44NDcsMTczLjQ1N2MtMC4yNzEsMC44MTYtMC4xMzUsMS43MTMsMC4zNjksMi40MTJjMC41MDMsMC42OTcsMS4zMTEsMS4xMDksMi4xNzEsMS4xMDloMTUuODcyYzEuMTUxLDAsMi4xNzMtMC43MzYsMi41MzctMS44MjhsOS43OTMtMjkuMjg3QzQ1LjMyNSwxNDMuNjYsNDcuMzksMTQyLjE4LDQ5LjcxMSwxNDIuMTg4TDQ5LjcxMSwxNDIuMTg4eiBNNTMuNDkzLDExOS4wOThsMTUuNjA3LTQ2LjljMC43NDQtMi4xOTYsMi44MDYtMy42NzQsNS4xMjUtMy42NzRzNC4zODEsMS40NzgsNS4xMjUsMy42NzRsMTUuNjA3LDQ2LjkwNGMwLjUzNywxLjYyMSwwLjI2MywzLjQwMi0wLjczNiw0Ljc4OWMtMS4wMTgsMS40MDgtMi42NDksMi4yNC00LjM4NiwyLjI0SDU4LjYxNWMtMS43MzYsMC0zLjM2OC0wLjgzMi00LjM4Ni0yLjI0QzUzLjIzLDEyMi41MDQsNTIuOTU2LDEyMC43MjEsNTMuNDkzLDExOS4wOThMNTMuNDkzLDExOS4wOTh6IE0xOTAuNDY1LDYzLjMyYzAtMi45MTktMS4wMTUtNS4zOTYtMy4wNTktNy40MjhjLTIuMDI5LTIuMDMxLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDE2LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjAzMi0zLjA1Niw0LjQ5OC0zLjA1Niw3LjM4NmMwLDIuODg5LDEuMDI2LDUuMzU0LDMuMDU2LDcuMzg1YzIuMDMyLDIuMDMyLDQuNDk5LDMuMDU5LDcuMzg4LDMuMDU5YzIuODg3LDAsNS4zNTQtMS4wMjYsNy4zODMtMy4wNTlDMTg5LjQ1LDY4LjYzMywxOTAuNDY1LDY2LjE3OCwxOTAuNDY1LDYzLjMyTDE5MC40NjUsNjMuMzJ6IE0xOTAuNDY1LDEwMS45OTRjMC0yLjg1OC0xLjAxNS01LjMxMy0zLjA1OS03LjMzM2MtMi4wMjktMi4wNDItNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMDUtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDIxLTMuMDU2LDQuNDg2LTMuMDU2LDcuMzc2YzAsMi44ODcsMS4wMjYsNS4zNTIsMy4wNTYsNy4zOTVjMi4wMzIsMi4wMjEsNC40OTksMy4wNDcsNy4zODgsMy4wNDdjMi44ODcsMCw1LjM1NC0xLjAyNSw3LjM4My0zLjA0N0MxODkuNDUsMTA3LjM4OSwxOTAuNDY1LDEwNC45MTQsMTkwLjQ2NSwxMDEuOTk0TDE5MC40NjUsMTAxLjk5NHogTTE5MC40NjUsMTQwLjc2YzAtMi45MTgtMS4wMTUtNS4zOTUtMy4wNTktNy40MzhjLTIuMDI5LTIuMDQxLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDA2LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjA0My0zLjA1Niw0LjUyLTMuMDU2LDcuNDM4YzAsMi45MjIsMS4wMjYsNS4zOTgsMy4wNTYsNy40MzljMi4wMzIsMi4wMjEsNC40OTksMy4wNDcsNy4zODgsMy4wNDdjMi44ODcsMCw1LjM1NC0xLjAyNSw3LjM4My0zLjA0N0MxODkuNDUsMTQ2LjE1OCwxOTAuNDY1LDE0My42ODIsMTkwLjQ2NSwxNDAuNzZMMTkwLjQ2NSwxNDAuNzZ6XCIvPjwvZz48L3N2Zz4nLFxuICAgbW9yZV9wYXJhZ3JhcGg6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTAgMTAgMTgwIDE4MFwiPjxnPjxwYXRoIGQ9XCJNMTI4LjM5LDI4LjQ5OUg2My40OTNjLTI1LjU1OCwwLTQ2LjM1NCwyMC43OTYtNDYuMzU0LDQ2LjM1NGMwLDI1LjU1OSwyMC43OTYsNDYuMzUzLDQ2LjM1NCw0Ni4zNTNoOS4yNzF2NTUuNjI1aDE4LjU0MlY0Ny4wNGg5LjI3MVYxNzYuODNoMTguNTQzVjQ3LjA0aDkuMjcxVjI4LjQ5OXogTTcyLjc2NCwxMDIuNjY0aC05LjI3MWMtMTUuMzM3LDAtMjcuODEzLTEyLjQ3NS0yNy44MTMtMjcuODEyYzAtMTUuMzM2LDEyLjQ3Ni0yNy44MTMsMjcuODEzLTI3LjgxM2g5LjI3MVYxMDIuNjY0eiBNMTkwLjQ2NSw2My4zMmMwLTIuOTE5LTEuMDE1LTUuMzk2LTMuMDU5LTcuNDI4Yy0yLjAyOS0yLjAzMS00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAxNi03LjM4OCwzLjA0N2MtMi4wMjksMi4wMzItMy4wNTYsNC40OTgtMy4wNTYsNy4zODZjMCwyLjg4OSwxLjAyNiw1LjM1NCwzLjA1Niw3LjM4NWMyLjAzMiwyLjAzMiw0LjQ5OSwzLjA1OSw3LjM4OCwzLjA1OWMyLjg4NywwLDUuMzU0LTEuMDI2LDcuMzgzLTMuMDU5QzE4OS40NSw2OC42MzMsMTkwLjQ2NSw2Ni4xNzgsMTkwLjQ2NSw2My4zMkwxOTAuNDY1LDYzLjMyeiBNMTkwLjQ2NSwxMDEuOTk0YzAtMi44NTgtMS4wMTUtNS4zMTMtMy4wNTktNy4zMzNjLTIuMDI5LTIuMDQyLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDA1LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjAyMS0zLjA1Niw0LjQ4Ni0zLjA1Niw3LjM3NmMwLDIuODg3LDEuMDI2LDUuMzUyLDMuMDU2LDcuMzk1YzIuMDMyLDIuMDIxLDQuNDk5LDMuMDQ3LDcuMzg4LDMuMDQ3YzIuODg3LDAsNS4zNTQtMS4wMjUsNy4zODMtMy4wNDdDMTg5LjQ1LDEwNy4zODksMTkwLjQ2NSwxMDQuOTE0LDE5MC40NjUsMTAxLjk5NEwxOTAuNDY1LDEwMS45OTR6IE0xOTAuNDY1LDE0MC43NmMwLTIuOTE4LTEuMDE1LTUuMzk1LTMuMDU5LTcuNDM4Yy0yLjAyOS0yLjA0MS00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAwNi03LjM4OCwzLjA0N2MtMi4wMjksMi4wNDMtMy4wNTYsNC41Mi0zLjA1Niw3LjQzOGMwLDIuOTIyLDEuMDI2LDUuMzk4LDMuMDU2LDcuNDM5YzIuMDMyLDIuMDIxLDQuNDk5LDMuMDQ3LDcuMzg4LDMuMDQ3YzIuODg3LDAsNS4zNTQtMS4wMjUsNy4zODMtMy4wNDdDMTg5LjQ1LDE0Ni4xNTgsMTkwLjQ2NSwxNDMuNjgyLDE5MC40NjUsMTQwLjc2TDE5MC40NjUsMTQwLjc2elwiLz48L2c+PC9zdmc+JyxcbiAgIG1vcmVfcGx1czogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIzNSAzMCAxNDAgMTQwXCI+PGc+PHBhdGggZD1cIk0xMzcuMjE1LDEwMi4wNDVjMCwzLjQ5OC0yLjgzNSw2LjMzMi02LjMzMyw2LjMzMkgyNC41NDljLTMuNDk4LDAtNi4zMzQtMi44MzQtNi4zMzQtNi4zMzJsMCwwYzAtMy40OTgsMi44MzYtNi4zMzMsNi4zMzQtNi4zMzNoMTA2LjMzM0MxMzQuMzgsOTUuNzExLDEzNy4yMTUsOTguNTQ3LDEzNy4yMTUsMTAyLjA0NUwxMzcuMjE1LDEwMi4wNDV6IE03Ny43MTUsMTYxLjU0NWMtMy40OTgsMC02LjMzMy0yLjgzNi02LjMzMy02LjMzNFY0OC44NzhjMC0zLjQ5OCwyLjgzNi02LjMzMyw2LjMzMy02LjMzM2wwLDBjMy40OTgsMCw2LjMzNCwyLjgzNSw2LjMzNCw2LjMzM3YxMDYuMzMzQzg0LjA0OSwxNTguNzA5LDgxLjIxMywxNjEuNTQ1LDc3LjcxNSwxNjEuNTQ1TDc3LjcxNSwxNjEuNTQ1eiBNMTkwLjQ2NSw2My4zMmMwLTIuOTE5LTEuMDE1LTUuMzk2LTMuMDU5LTcuNDI4Yy0yLjAyOS0yLjAzMS00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAxNi03LjM4OCwzLjA0N2MtMi4wMjksMi4wMzItMy4wNTYsNC40OTgtMy4wNTYsNy4zODZjMCwyLjg4OSwxLjAyNiw1LjM1NCwzLjA1Niw3LjM4NWMyLjAzMiwyLjAzMiw0LjQ5OSwzLjA1OSw3LjM4OCwzLjA1OWMyLjg4NywwLDUuMzU0LTEuMDI2LDcuMzgzLTMuMDU5QzE4OS40NSw2OC42MzIsMTkwLjQ2NSw2Ni4xNzcsMTkwLjQ2NSw2My4zMkwxOTAuNDY1LDYzLjMyeiBNMTkwLjQ2NSwxMDEuOTkzYzAtMi44NTgtMS4wMTUtNS4zMTMtMy4wNTktNy4zMzNjLTIuMDI5LTIuMDQyLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDA1LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjAyMS0zLjA1Niw0LjQ4Ni0zLjA1Niw3LjM3NmMwLDIuODg4LDEuMDI2LDUuMzUzLDMuMDU2LDcuMzk2YzIuMDMyLDIuMDIxLDQuNDk5LDMuMDQ3LDcuMzg4LDMuMDQ3YzIuODg3LDAsNS4zNTQtMS4wMjUsNy4zODMtMy4wNDdDMTg5LjQ1LDEwNy4zODksMTkwLjQ2NSwxMDQuOTE0LDE5MC40NjUsMTAxLjk5M0wxOTAuNDY1LDEwMS45OTN6IE0xOTAuNDY1LDE0MC43NmMwLTIuOTE4LTEuMDE1LTUuMzk1LTMuMDU5LTcuNDM4Yy0yLjAyOS0yLjA0MS00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAwNi03LjM4OCwzLjA0N2MtMi4wMjksMi4wNDMtMy4wNTYsNC41Mi0zLjA1Niw3LjQzOGMwLDIuOTIyLDEuMDI2LDUuMzk4LDMuMDU2LDcuNDM5YzIuMDMyLDIuMDIxLDQuNDk5LDMuMDQ3LDcuMzg4LDMuMDQ3YzIuODg3LDAsNS4zNTQtMS4wMjUsNy4zODMtMy4wNDdDMTg5LjQ1LDE0Ni4xNTgsMTkwLjQ2NSwxNDMuNjgyLDE5MC40NjUsMTQwLjc2TDE5MC40NjUsMTQwLjc2elwiLz48L2c+PC9zdmc+JyxcbiAgIG1vcmVfaG9yaXpvbnRhbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzYgMy41OFwiPjxnPjxwYXRoIGQ9XCJNNC42NCwxMC43M2ExLjg0LDEuODQsMCwwLDEsLjY1LS42NSwxLjc2LDEuNzYsMCwwLDEsMS43OSwwQTEuNzksMS43OSwwLDAsMSw4LDExLjYzYTEuODQsMS44NCwwLDAsMS0uMjUuOSwxLjY5LDEuNjksMCwwLDEtLjY1LjY1LDEuOCwxLjgsMCwwLDEtMi42OS0xLjU1QTIuMDgsMi4wOCwwLDAsMSw0LjY0LDEwLjczWm02LjA5LDBhMS44NCwxLjg0LDAsMCwxLC42NS0uNjUsMS43OCwxLjc4LDAsMCwxLDIuNjcsMS41NSwxLjczLDEuNzMsMCwwLDEtLjI0LjksMS44NCwxLjg0LDAsMCwxLS42NS42NSwxLjc2LDEuNzYsMCwwLDEtMS43OSwwLDEuNzksMS43OSwwLDAsMS0uNjQtMi40NFptNi4wOCwwYTEuNjksMS42OSwwLDAsMSwuNjUtLjY1LDEuNzYsMS43NiwwLDAsMSwxLjc5LDAsMS43OSwxLjc5LDAsMCwxLC45LDEuNTQsMS43MywxLjczLDAsMCwxLS4yNC45LDEuODQsMS44NCwwLDAsMS0uNjUuNjUsMS44LDEuOCwwLDAsMS0yLjY5LTEuNTVBMiwyLDAsMCwxLDE2LjgxLDEwLjczWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC4zOSAtOS44NClcIi8+PC9nPjwvc3ZnPicsXG4gICBtb3JlX3ZlcnRpY2FsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzLjk0IDE1Ljc1XCI+PGc+PHBhdGggZD1cIk0xMi4yOCw3LjY5YTEuOTIsMS45MiwwLDAsMS0xLjM5LS41OCwyLDIsMCwwLDEtLjU4LTEuMzksMS45MiwxLjkyLDAsMCwxLC41OC0xLjM5LDIsMiwwLDAsMSwxLjM5LS41OCwxLjkyLDEuOTIsMCwwLDEsMS4zOS41OCwyLDIsMCwwLDEsLjU4LDEuMzksMS45MiwxLjkyLDAsMCwxLS41OCwxLjM5LDIsMiwwLDAsMS0xLjM5LjU4Wm0wLDJhMS45MiwxLjkyLDAsMCwxLDEuMzkuNTgsMiwyLDAsMCwxLC41OCwxLjM5QTEuOTIsMS45MiwwLDAsMSwxMy42NywxM2EyLDIsMCwwLDEtMS4zOS41OEExLjkyLDEuOTIsMCwwLDEsMTAuODksMTNhMiwyLDAsMCwxLS41OC0xLjM5LDIsMiwwLDAsMSwyLTJabTAsNS45YTEuOTIsMS45MiwwLDAsMSwxLjM5LjU4LDIsMiwwLDAsMSwuNTgsMS4zOSwxLjkyLDEuOTIsMCwwLDEtLjU4LDEuMzksMiwyLDAsMCwxLTEuMzkuNTgsMS45MiwxLjkyLDAsMCwxLTEuMzktLjU4LDIsMiwwLDAsMS0uNTgtMS4zOSwxLjkyLDEuOTIsMCwwLDEsLjU4LTEuMzksMS45NCwxLjk0LDAsMCwxLDEuMzktLjU4WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMTAuMzEgLTMuNzUpXCIvPjwvZz48L3N2Zz4nLFxuICAgLy8gTm90IGN1cnJlbnRseSB1c2VkXG4gICBhdHRhY2htZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA4LjM4IDE1LjY4XCI+PGc+PHBhdGggZD1cIk0xNS4yMyw2aDF2OS43OGEzLjg4LDMuODgsMCwwLDEtMS4zMSwyLjQ1LDQsNCwwLDAsMS02LjU3LTIuNDVWN0EzLDMsMCwwLDEsOS4yLDQuODlhMywzLDAsMCwxLDUsMi4wOXY4LjMxYTEuOTIsMS45MiwwLDAsMS0uNTgsMS4zOSwyLDIsMCwwLDEtMS4zOS41OCwxLjkyLDEuOTIsMCwwLDEtMS4zOS0uNTgsMiwyLDAsMCwxLS41OC0xLjM5VjhoMXY3LjMyYTEsMSwwLDAsMCwuMjkuNjksMSwxLDAsMCwwLC42OS4yOEEuOS45LDAsMCwwLDEzLDE2YTEsMSwwLDAsMCwuMjktLjY5VjdhMS45MiwxLjkyLDAsMCwwLS41OC0xLjM5QTIsMiwwLDAsMCwxMS4yNyw1YTEuOTIsMS45MiwwLDAsMC0xLjM5LjU4QTIsMiwwLDAsMCw5LjMzLDd2OC4zMWEzLDMsMCwxLDAsNS45LDBWNlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTguMDggLTMuNzgpXCIvPjwvZz48L3N2Zz4nLFxuICAgbWFwOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMS43IDE1LjYyXCI+PGc+PHBhdGggZD1cIk0xMi4wNSwxMi40MmEyLjkzLDIuOTMsMCwxLDEsMi4wNy01QTIuODgsMi44OCwwLDAsMSwxNSw5LjQ5YTMsMywwLDAsMS0uODYsMi4wNywyLjg5LDIuODksMCwwLDEtMi4wNy44NlptMC01LjM2YTIuNDMsMi40MywwLDAsMC0xLjcyLDQuMTYsMi40OCwyLjQ4LDAsMCwwLDEuNzIuNzIsMi40NCwyLjQ0LDAsMCwwLDAtNC44OFptMC0zLjNBNS44NCw1Ljg0LDAsMCwxLDE3LjksOS42MmE5Ljk0LDkuOTQsMCwwLDEtMS43Myw1QTMzLjU5LDMzLjU5LDAsMCwxLDEyLjg0LDE5YTEuNTIsMS41MiwwLDAsMS0uMjMuMiwxLDEsMCwwLDEtLjU1LjJoMGExLDEsMCwwLDEtLjU1LS4yLDEuNTIsMS41MiwwLDAsMS0uMjMtLjIsMzMuNTksMzMuNTksMCwwLDEtMy4zMy00LjMyLDkuOTMsOS45MywwLDAsMS0xLjcyLTUsNS44NCw1Ljg0LDAsMCwxLDUuODUtNS44NlpNMTIsMTguMzRsLjA4LjA1LjA2LS4wNmEzNS41OCwzNS41OCwwLDAsMCwzLjA2LTMuOTMsOS4zNSw5LjM1LDAsMCwwLDEuNzQtNC43Nyw0Ljg4LDQuODgsMCwwLDAtNC44OC00Ljg4QTQuNzksNC43OSwwLDAsMCw4LjYsNi4xNyw0Ljg0LDQuODQsMCwwLDAsNy4xNyw5LjYyLDkuMjksOS4yOSwwLDAsMCw4LjkxLDE0LjQsMzYsMzYsMCwwLDAsMTIsMTguMzRaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC02LjIgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxuICAgbWFnaWNfc3RpY2s6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjczIDE1Ljc1XCI+PGc+PHBhdGggZD1cIk0xOS44NiwxOS4yMWExLDEsMCwwLDAsLjI4LS42OCwxLDEsMCwwLDAtLjI4LS43TDEzLDEwLjkzYTEsMSwwLDAsMC0uNy0uMjgsMSwxLDAsMCwwLS42OCwxLjY1bDYuOSw2LjlhMSwxLDAsMCwwLC42OS4yOS45My45MywwLDAsMCwuNjktLjI4Wk05LjE5LDguNTVhMywzLDAsMCwwLDEuNjgsMCwxNC4xMiwxNC4xMiwwLDAsMCwxLjQxLS4zMkExMS4yNiwxMS4yNiwwLDAsMCwxMC44LDcuMDZjLS41Ni0uMzYtLjg2LS41Ni0uOTEtLjU4UzEwLDUuOTEsMTAsNS4xMXMwLTEuMjYtLjE1LTEuMzdhNC4zNSw0LjM1LDAsMCwwLTEuMTkuNzFjLS41My40LS44MS42Mi0uODcuNjhhOSw5LDAsMCwwLTItLjYsNi44NCw2Ljg0LDAsMCwwLS43Ni0uMDlzMCwuMjcuMDguNzdhOC42LDguNiwwLDAsMCwuNjEsMnEtLjA5LjA5LS42OS44N2EzLjU5LDMuNTksMCwwLDAtLjY4LDEuMTdjLjEyLjE3LjU3LjIzLDEuMzYuMTVTNyw5LjI2LDcuMTUsOS4yM3MuMjEuMzYuNTcuOTFhMTAuNDksMTAuNDksMCwwLDAsMS4xNCwxLjQ4YzAtLjEuMTQtLjU3LjMxLTEuNGEzLDMsMCwwLDAsMC0xLjY3WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NClcIi8+PC9nPjwvc3ZnPicsXG4gICBlbXB0eV9maWxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMi43OCAxNS43NVwiPjxnPjxwYXRoIGQ9XCJNMTQuNzMsMy43NiwxOC42Nyw3Ljd2OS44NGEyLDIsMCwwLDEtMiwySDcuODRhMS44OSwxLjg5LDAsMCwxLTEuMzgtLjU4LDIsMiwwLDAsMS0uNTctMS4zOVY1LjczYTEuOTMsMS45MywwLDAsMSwuNTctMS4zOCwyLDIsMCwwLDEsMS4zOC0uNThoNi42MmwuMjYsMHYwWm0yLjk1LDQuOTJoLTJhMS45MywxLjkzLDAsMCwxLTEuMzgtLjU3LDIsMiwwLDAsMS0uNTgtMS40VjYuMTdjMC0uMzYsMC0uODQsMC0xLjQzSDcuODVhMSwxLDAsMCwwLS43LjI5LDEsMSwwLDAsMC0uMjkuN1YxNy41NGExLDEsMCwwLDAsLjI5LjY5LDEsMSwwLDAsMCwuNjkuMjloOC44NWExLDEsMCwwLDAsLjcxLS4yOS45Mi45MiwwLDAsMCwuMjgtLjY5Wm0wLTFMMTQuNzMsNC43NHYyQTEsMSwwLDAsMCwxNSw3LjRhMSwxLDAsMCwwLC42OS4yOVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTUuODkgLTMuNzYpXCIvPjwvZz48L3N2Zz4nXG59O1xuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gdXRpbGl0eSBmdW5jdGlvblxyXG4gKi9cclxuY29uc3QgdXRpbCA9IHtcclxuICAgIF9kOiBudWxsLFxyXG4gICAgX3c6IG51bGwsXHJcbiAgICBpc0lFOiBudWxsLFxyXG4gICAgaXNJRV9FZGdlOiBudWxsLFxyXG4gICAgaXNPU1hfSU9TOiBudWxsLFxyXG4gICAgX3Byb3BlcnRpZXNJbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2QpIHJldHVybjtcclxuICAgICAgICB0aGlzLl9kID0gIGRvY3VtZW50O1xyXG4gICAgICAgIHRoaXMuX3cgPSB3aW5kb3c7XHJcbiAgICAgICAgdGhpcy5pc0lFID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50JykgPiAtMTtcclxuICAgICAgICB0aGlzLmlzSUVfRWRnZSA9IChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQnKSA+IC0xKSB8fCAobmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignRWRnZScpID4gLTEpO1xyXG4gICAgICAgIHRoaXMuaXNPU1hfSU9TID0gLyhNYWN8aVBob25lfGlQb2R8aVBhZCkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FsbG93ZWRFbXB0eU5vZGVMaXN0OiAnLnNlLWNvbXBvbmVudCwgcHJlLCBibG9ja3F1b3RlLCBociwgbGksIHRhYmxlLCBpbWcsIGlmcmFtZSwgdmlkZW8sIGF1ZGlvLCBjYW52YXMnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEhUTUwgUmVzZXJ2ZWQgV29yZCBDb252ZXJ0ZXIuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBIVE1MIHN0cmluZ1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX0hUTUxDb252ZXJ0b3I6IGZ1bmN0aW9uIChjb250ZW50cykge1xyXG4gICAgICAgIGNvbnN0IGVjID0geycmJzogJyZhbXA7JywgJ1xcdTAwQTAnOiAnJm5ic3A7JywgJ1xcJyc6ICcmYXBvczsnLCAnXCInOiAnJnF1b3Q7JywgJzwnOsKgJyZsdDsnLMKgJz4nOsKgJyZndDsnfTtcclxuICAgICAgICByZXR1cm4gY29udGVudHMucmVwbGFjZSgvJnxcXHUwMEEwfCd8XCJ8PHw+L2csIGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodHlwZW9mIGVjW21dID09PSAnc3RyaW5nJykgPyBlY1ttXSA6IG07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFVuaWNvZGUgQ2hhcmFjdGVyICdaRVJPIFdJRFRIIFNQQUNFJyAoXFx1MjAwQilcclxuICAgICAqL1xyXG4gICAgemVyb1dpZHRoU3BhY2U6IFN0cmluZy5mcm9tQ2hhckNvZGUoODIwMyksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgJ3plcm8gd2lkdGggc3BhY2UnICgvXFx1MjAwQi9nKVxyXG4gICAgICovXHJcbiAgICB6ZXJvV2lkdGhSZWdFeHA6IG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSg4MjAzKSwgJ2cnKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gZmluZCBvbmx5ICd6ZXJvIHdpZHRoIHNwYWNlJyAoL15cXHUyMDBCKyQvKVxyXG4gICAgICovXHJcbiAgICBvbmx5WmVyb1dpZHRoUmVnRXhwOiBuZXcgUmVnRXhwKCdeJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoODIwMykgKyAnKyQnKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBIG1ldGhvZCB0aGF0IGNoZWNrcyBJZiB0aGUgdGV4dCBpcyBibGFuayBvciB0byBzZWUgaWYgaXQgY29udGFpbnMgJ1pFUk8gV0lEVEggU1BBQ0UnIG9yIGVtcHR5ICh1dGlsLnplcm9XaWR0aFNwYWNlKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8Tm9kZX0gdGV4dCBTdHJpbmcgdmFsdWUgb3IgTm9kZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIG9ubHlaZXJvV2lkdGhTcGFjZTogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB0ZXh0ID0gdGV4dC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gdGV4dCA9PT0gJycgfHwgdGhpcy5vbmx5WmVyb1dpZHRoUmVnRXhwLnRlc3QodGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJucyB7WE1MSHR0cFJlcXVlc3R8QWN0aXZlWE9iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0WE1MSHR0cFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvKiogSUUgKi9cclxuICAgICAgICBpZiAodGhpcy5fdy5BY3RpdmVYT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKiogbmV0c2NhcGUgKi9cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl93LlhNTEh0dHBSZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIGZhaWwgKi9cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgRWxlbWVudCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZWxlbWVudE5hbWUgRWxlbWVudCBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QuY3JlYXRlRWxlbWVudChlbGVtZW50TmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSB0ZXh0IG5vZGVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRleHQgY29udGVudHNcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVUZXh0Tm9kZTogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZC5jcmVhdGVUZXh0Tm9kZSh0ZXh0IHx8ICcnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVkaXRvciBjaGVja3MgdGFncyBieSBzdHJpbmcuXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBcIjxcIiBvciBcIj5cIiBpbiB0aGUgYXR0cmlidXRlIG9mIHRhZywgSFRNTCBpcyBicm9rZW4gd2hlbiBjaGVja2luZyB0aGUgdGFnLlxyXG4gICAgICogV2hlbiB1c2luZyBhbiBhdHRyaWJ1dGUgd2l0aCBcIjxcIiBvciBcIj5cIiwgdXNlIFwiSFRNTEVuY29kZXJcIiB0byBzYXZlLiAoZXg6IG1hdGgoa2F0ZXgpKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzIEhUTUwgb3IgVGV4dCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIEhUTUxFbmNvZGVyOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICBjb25zdCBlYyA9IHsnPCc6wqAnJGx0OycswqAnPic6wqAnJGd0Oyd9O1xyXG4gICAgICAgIHJldHVybiBjb250ZW50cy5yZXBsYWNlKC88fD4vZywgZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgZWNbbV0gPT09ICdzdHJpbmcnKSA/IGVjW21dIDogbTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVkaXRvciBjaGVja3MgdGFncyBieSBzdHJpbmcuXHJcbiAgICAgKiBJZiB0aGVyZSBpcyBcIjxcIiBvciBcIj5cIiBpbiB0aGUgYXR0cmlidXRlIG9mIHRhZywgSFRNTCBpcyBicm9rZW4gd2hlbiBjaGVja2luZyB0aGUgdGFnLlxyXG4gICAgICogRGVjb2RlciBvZiBkYXRhIHN0b3JlZCBhcyBcIkhUTUxFbmNvZGVyXCIgKGV4OiBtYXRoKGthdGV4KSlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBIVE1MIG9yIFRleHQgc3RyaW5nXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBIVE1MRGVjb2RlcjogZnVuY3Rpb24gKGNvbnRlbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZWMgPSB7JyRsdDsnOsKgJzwnLMKgJyRndDsnOsKgJz4nfTtcclxuICAgICAgICByZXR1cm4gY29udGVudHMucmVwbGFjZSgvXFwkbHQ7fFxcJGd0Oy9nLCBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlY1ttXSA9PT0gJ3N0cmluZycpID8gZWNbbV0gOiBtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGlzIG1ldGhvZCBydW4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3RcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgb2JqLmtleVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhc093bjogZnVuY3Rpb24gKG9iaiwga2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc093bi5jYWxsKG9iaiwga2V5KTtcclxuICAgIH0sXHJcbiAgICBfaGFzT3duOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHRoZSB0YWcgcGF0aCBvZiB0aGUgYXJndW1lbnRzIHZhbHVlXHJcbiAgICAgKiBJZiBub3QgZm91bmQsIHJldHVybiB0aGUgZmlyc3QgZm91bmQgdmFsdWVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG5hbWVBcnJheSBGaWxlIG5hbWUgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBleHRlbnNpb24ganMsIGNzc1xyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0SW5jbHVkZVBhdGg6IGZ1bmN0aW9uIChuYW1lQXJyYXksIGV4dGVuc2lvbikge1xyXG4gICAgICAgIGxldCBwYXRoID0gJyc7XHJcbiAgICAgICAgY29uc3QgcGF0aExpc3QgPSBbXTtcclxuICAgICAgICBjb25zdCB0YWdOYW1lID0gZXh0ZW5zaW9uID09PSAnanMnID8gJ3NjcmlwdCcgOiAnbGluayc7XHJcbiAgICAgICAgY29uc3Qgc3JjID0gZXh0ZW5zaW9uID09PSAnanMnID8gJ3NyYycgOiAnaHJlZic7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gJyg/Oic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG5hbWVBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSArPSBuYW1lQXJyYXlbaV0gKyAoaSA8IGxlbiAtIDEgPyAnfCcgOiAnKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcoXnwuKltcXFxcL10pJyArIGZpbGVOYW1lICsgJyhcXFxcLlteXFxcXC9dKyk/XFwuJyArIGV4dGVuc2lvbiArICcoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgY29uc3QgZXh0UmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcuK1xcXFwuJyArIGV4dGVuc2lvbiArICcoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGMgPSB0aGlzLl9kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpLCBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGV4dFJlZ0V4cC50ZXN0KGNbaV1bc3JjXSkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGhMaXN0LnB1c2goY1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGVkaXRvclRhZyA9IHBhdGhMaXN0W2ldW3NyY10ubWF0Y2gocmVnRXhwKTtcclxuICAgICAgICAgICAgaWYgKGVkaXRvclRhZykge1xyXG4gICAgICAgICAgICAgICAgcGF0aCA9IGVkaXRvclRhZ1swXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHBhdGggPSBwYXRoTGlzdC5sZW5ndGggPiAwID8gcGF0aExpc3RbMF1bc3JjXSA6ICcnO1xyXG5cclxuICAgICAgICAtMSA9PT0gcGF0aC5pbmRleE9mKCc6LycpICYmICcvLycgIT09IHBhdGguc2xpY2UoMCwgMikgJiYgKHBhdGggPSAwID09PSBwYXRoLmluZGV4T2YoJy8nKSA/IGxvY2F0aW9uLmhyZWYubWF0Y2goL14uKj86XFwvXFwvW15cXC9dKi8pWzBdICsgcGF0aCA6IGxvY2F0aW9uLmhyZWYubWF0Y2goL15bXlxcP10qXFwvKD86KS8pWzBdICsgcGF0aCk7XHJcblxyXG4gICAgICAgIGlmICghcGF0aCkgdGhyb3cgJ1tTVU5FRElUT1IudXRpbC5nZXRJbmNsdWRlUGF0aC5mYWlsXSBUaGUgU1VORURJVE9SIGluc3RhbGxhdGlvbiBwYXRoIGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLiAobmFtZTogKycgKyBuYW1lICsgJywgZXh0ZW5zaW9uOiAnICsgZXh0ZW5zaW9uICsgJyknO1xyXG5cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIENTUyB0ZXh0IHRoYXQgaGFzIGJlZW4gYXBwbGllZCB0byB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtEb2N1bWVudHxudWxsfSBkb2MgVG8gZ2V0IHRoZSBDU1MgdGV4dCBvZiBhbiBkb2N1bWVudChjb3JlLl93ZCkuIElmIG51bGwgZ2V0IHRoZSBjdXJyZW50IGRvY3VtZW50LlxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gU3R5bGVzIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBnZXRQYWdlU3R5bGU6IGZ1bmN0aW9uIChkb2MpIHtcclxuICAgICAgICBsZXQgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0cyA9IChkb2MgfHwgdGhpcy5fZCkuc3R5bGVTaGVldHM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNoZWV0cy5sZW5ndGgsIHJ1bGVzOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJ1bGVzID0gc2hlZXRzW2ldLmNzc1J1bGVzO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IHJ1bGVzLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNzc1RleHQgKz0gcnVsZXNbY10uY3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNzc1RleHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgYXJndW1lbnQgaWZyYW1lJ3MgZG9jdW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGlmcmFtZSBJZnJhbWUgZWxlbWVudCAoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSlcclxuICAgICAqIEByZXR1cm5zIHtEb2N1bWVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0SWZyYW1lRG9jdW1lbnQ6IGZ1bmN0aW9uIChpZnJhbWUpIHtcclxuICAgICAgICBsZXQgd0RvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudDtcclxuICAgICAgICBpZiAod0RvY3VtZW50LmRvY3VtZW50KSB3RG9jdW1lbnQgPSB3RG9jdW1lbnQuZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIHdEb2N1bWVudDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGF0dHJpYnV0ZXMgb2YgYXJndW1lbnQgZWxlbWVudCB0byBzdHJpbmcgKCdjbGFzcz1cIi0tLVwiIG5hbWU9XCItLS1cIiAnKVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IGV4Y2VwdEF0dHJzIEFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBleGNsdWRlIGZyb20gdGhlIHJlc3VsdFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0QXR0cmlidXRlc1RvU3RyaW5nOiBmdW5jdGlvbiAoZWxlbWVudCwgZXhjZXB0QXR0cnMpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQuYXR0cmlidXRlcykgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBjb25zdCBhdHRycyA9IGVsZW1lbnQuYXR0cmlidXRlcztcclxuICAgICAgICBsZXQgYXR0clN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGV4Y2VwdEF0dHJzICYmIGV4Y2VwdEF0dHJzLmluZGV4T2YoYXR0cnNbaV0ubmFtZSkgPiAtMSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGF0dHJTdHJpbmcgKz0gYXR0cnNbaV0ubmFtZSArICc9XCInICsgYXR0cnNbaV0udmFsdWUgKyAnXCIgJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhdHRyU3RyaW5nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbkdldHMgR2V0IHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgYSBzdHJpbmcuXHJcbiAgICAgKiByZWZlcmVuY2luZyBjb2RlOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9zaGFhbjE5NzQvbXlyZGluL2Jsb2IvbWFzdGVyL2V4cHJlc3Npb25zL3N0cmluZy5qcyNMMTFcIlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgU3RyaW5nIHRleHRcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEJ5dGVMZW5ndGg6IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgICAgICBpZiAoIXRleHQgfHwgIXRleHQudG9TdHJpbmcpIHJldHVybiAwO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVuY29kZXIgPSB0aGlzLl93LmVuY29kZVVSSUNvbXBvbmVudDtcclxuICAgICAgICBsZXQgY3IsIGNsO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSUVfRWRnZSkge1xyXG4gICAgICAgICAgICBjbCA9IHRoaXMuX3cudW5lc2NhcGUoZW5jb2Rlcih0ZXh0KSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBjciA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW5jb2Rlcih0ZXh0KS5tYXRjaCgvKCUwQXwlMEQpL2dpKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY3IgPSBlbmNvZGVyKHRleHQpLm1hdGNoKC8oJTBBfCUwRCkvZ2kpLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNsICsgY3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2wgPSAobmV3IHRoaXMuX3cuVGV4dEVuY29kZXIoJ3V0Zi04JykuZW5jb2RlKHRleHQpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbmNvZGVyKHRleHQpLm1hdGNoKC8oJTBBfCUwRCkvZ2kpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjciA9IGVuY29kZXIodGV4dCkubWF0Y2goLyglMEF8JTBEKS9naSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY2wgKyBjcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBlZGl0IHJlZ2lvbiB0b3AgZGl2IGVsZW1lbnQgb3IgaWZyYW1lJ3MgYm9keSB0YWcuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1d5c2l3eWdEaXY6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAodGhpcy5oYXNDbGFzcyhlbGVtZW50LCAnc2Utd3JhcHBlci13eXNpd3lnJykgfHwgL15CT0RZJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY29udGVudGVkaXRhYmxlIHByb3BlcnR5IGlzIGZhbHNlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNOb25FZGl0YWJsZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgYSBub2RlIHJlbGF0ZWQgdG8gdGhlIHRleHQgc3R5bGUuXHJcbiAgICAgKiAoc3Ryb25nfHNwYW58Zm9udHxifHZhcnxpfGVtfHV8aW5zfHN8c3RyaWtlfGRlbHxzdWJ8c3VwfG1hcmt8YXxsYWJlbHxjb2RlKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNUZXh0U3R5bGVFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IDMgJiYgL14oc3Ryb25nfHNwYW58Zm9udHxifHZhcnxpfGVtfHV8aW5zfHN8c3RyaWtlfGRlbHxzdWJ8c3VwfG1hcmt8YXxsYWJlbHxjb2RlKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgZm9ybWF0IGVsZW1lbnQgKFAsIERJViwgSFsxLTZdLCBQUkUsIExJIHwgY2xhc3M9XCJfX3NlX19mb3JtYXRfX3JlcGxhY2VfeHh4XCIpXHJcbiAgICAgKiBGb3JtYXQgZWxlbWVudCBhbHNvIGNvbnRhaW4gXCJmcmVlIGZvcm1hdCBFbGVtZW50XCJcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmICgvXihQfERJVnxIWzEtNl18UFJFfExJfFRIfFREKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fcmVwbGFjZV8uKyhcXFxcc3wkKXwoXFxcXHN8XilfX3NlX19mb3JtYXRfX2ZyZWVfLisoXFxcXHN8JCknKSkgJiYgIXRoaXMuaXNDb21wb25lbnQoZWxlbWVudCkgJiYgIXRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgcmFuZ2UgZm9ybWF0IGVsZW1lbnQuIChCTE9DS1FVT1RFLCBPTCwgVUwsIEZJR0NBUFRJT04sIFRBQkxFLCBUSEVBRCwgVEJPRFksIFRSLCBUSCwgVEQgfCBjbGFzcz1cIl9fc2VfX2Zvcm1hdF9fcmFuZ2VfeHh4XCIpXHJcbiAgICAgKiBSYW5nZSBmb3JtYXQgZWxlbWVudCBpcyB3cmFwIHRoZSBcImZvcm1hdCBlbGVtZW50XCIgYW5kIFwiY29tcG9uZW50XCJcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgKC9eKEJMT0NLUVVPVEV8T0x8VUx8RklHQ0FQVElPTnxUQUJMRXxUSEVBRHxUQk9EWXxUUnxUSHxURCkkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCB0aGlzLmhhc0NsYXNzKGVsZW1lbnQsICcoXFxcXHN8XilfX3NlX19mb3JtYXRfX3JhbmdlXy4rKFxcXFxzfCQpJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY2xvc3VyZSByYW5nZSBmb3JtYXQgZWxlbWVudC4gKFRILCBURCB8IGNsYXNzPVwiX19zZV9fZm9ybWF0X19yYW5nZV9fY2xvc3VyZV94eHhcIilcclxuICAgICAqIENsb3N1cmUgcmFuZ2UgZm9ybWF0IGVsZW1lbnRzIGlzIGluY2x1ZGVkIGluIHRoZSByYW5nZSBmb3JtYXQgZWxlbWVudC5cclxuICAgICAqICAtIENsb3N1cmUgcmFuZ2UgZm9ybWF0IGVsZW1lbnQgaXMgd3JhcCB0aGUgXCJmb3JtYXQgZWxlbWVudFwiIGFuZCBcImNvbXBvbmVudFwiXHJcbiAgICAgKiDigLsgWW91IGNhbm5vdCBleGl0IHRoaXMgZm9ybWF0IHdpdGggdGhlIEVudGVyIGtleSBvciBCYWNrc3BhY2Uga2V5LlxyXG4gICAgICog4oC7IFVzZSBpdCBvbmx5IGluIHNwZWNpYWwgY2FzZXMuIChbZXhdIGZvcm1hdCBvZiB0YWJsZSBjZWxscylcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzQ2xvc3VyZVJhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmICgvXihUSHxURCkkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCB0aGlzLmhhc0NsYXNzKGVsZW1lbnQsICcoXFxcXHN8XilfX3NlX19mb3JtYXRfX3JhbmdlX19jbG9zdXJlXy4rKFxcXFxzfCQpJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgZnJlZSBmb3JtYXQgZWxlbWVudC4gKFBSRSB8IGNsYXNzPVwiX19zZV9fZm9ybWF0X19mcmVlX3h4eFwiKVxyXG4gICAgICogRnJlZSBmb3JtYXQgZWxlbWVudHMgaXMgaW5jbHVkZWQgaW4gdGhlIGZvcm1hdCBlbGVtZW50LlxyXG4gICAgICogRnJlZSBmb3JtYXQgZWxlbWVudHMncyBsaW5lIGJyZWFrIGlzIFwiQlJcIiB0YWcuXHJcbiAgICAgKiDigLsgRW50ZXJpbmcgdGhlIEVudGVyIGtleSBpbiB0aGUgc3BhY2Ugb24gdGhlIGxhc3QgbGluZSBlbmRzIFwiRnJlZSBGb3JtYXRcIiBhbmQgYXBwZW5kcyBcIkZvcm1hdFwiLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNGcmVlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmICgvXlBSRSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fZnJlZV8uKyhcXFxcc3wkKScpKSAmJiAhdGhpcy5pc0NvbXBvbmVudChlbGVtZW50KSAmJiAhdGhpcy5pc1d5c2l3eWdEaXYoZWxlbWVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBjbG9zdXJlIGZyZWUgZm9ybWF0IGVsZW1lbnQuIChjbGFzcz1cIl9fc2VfX2Zvcm1hdF9fZnJlZV9fY2xvc3VyZV94eHhcIilcclxuICAgICAqIENsb3N1cmUgZnJlZSBmb3JtYXQgZWxlbWVudHMgaXMgaW5jbHVkZWQgaW4gdGhlIGZyZWUgZm9ybWF0IGVsZW1lbnQuXHJcbiAgICAgKiAgLSBDbG9zdXJlIGZyZWUgZm9ybWF0IGVsZW1lbnRzJ3MgbGluZSBicmVhayBpcyBcIkJSXCIgdGFnLlxyXG4gICAgICog4oC7IFlvdSBjYW5ub3QgZXhpdCB0aGlzIGZvcm1hdCB3aXRoIHRoZSBFbnRlciBrZXkgb3IgQmFja3NwYWNlIGtleS5cclxuICAgICAqIOKAuyBVc2UgaXQgb25seSBpbiBzcGVjaWFsIGNhc2VzLiAoW2V4XSBmb3JtYXQgb2YgdGFibGUgY2VsbHMpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmIHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fZnJlZV9fY2xvc3VyZV8uKyhcXFxcc3wkKScpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY29tcG9uZW50W2ltZywgaWZyYW1lLCB2aWRlbywgYXVkaW8sIHRhYmxlXSBjb3ZlcihjbGFzcz1cInNlLWNvbXBvbmVudFwiKSBhbmQgdGFibGUsIGhyXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0NvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiAoL3NlLWNvbXBvbmVudC8udGVzdChlbGVtZW50LmNsYXNzTmFtZSkgfHwgL14oVEFCTEV8SFIpJC8udGVzdChlbGVtZW50Lm5vZGVOYW1lKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBmb3IgXCJfX3NlX191bmVkaXRhYmxlXCIgaW4gdGhlIGNsYXNzIGxpc3QuXHJcbiAgICAgKiBDb21wb25lbnRzIHdpdGggY2xhc3MgXCJfX3NlX191bmVkaXRhYmxlXCIgY2Fubm90IGJlIG1vZGlmaWVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNVbmVkaXRhYmxlQ29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJ19fc2VfX3VuZWRpdGFibGUnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgdGhlIGNvbXBvbmVudCBbaW1nLCBpZnJhbWVdIGNvdmVyKGNsYXNzPVwic2UtY29tcG9uZW50XCIpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc01lZGlhQ29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIC9zZS1jb21wb25lbnQvLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgbm90IGNoZWNraW5nIG5vZGUuIChjbGFzcz1cImthdGV4XCIsIFwiX19zZV9fdGFnXCIpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc05vdENoZWNraW5nTm9kZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiAva2F0ZXh8X19zZV9fdGFnLy50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSWYgYSBwYXJlbnQgbm9kZSB0aGF0IGNvbnRhaW5zIGFuIGFyZ3VtZW50IG5vZGUgZmluZHMgYSBmb3JtYXQgbm9kZSAodXRpbC5pc0Zvcm1hdEVsZW1lbnQpLCBpdCByZXR1cm5zIHRoYXQgbm9kZS5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBSZWZlcmVuY2Ugbm9kZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxyXG4gICAgICovXHJcbiAgICBnZXRGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkpIGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9ybWF0RWxlbWVudChlbGVtZW50KSAmJiB2YWxpZGF0aW9uKGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJZiBhIHBhcmVudCBub2RlIHRoYXQgY29udGFpbnMgYW4gYXJndW1lbnQgbm9kZSBmaW5kcyBhIGZvcm1hdCBub2RlICh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkgJiYgIS9eKFRIRUFEfFRCT0RZfFRSKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIElmIGEgcGFyZW50IG5vZGUgdGhhdCBjb250YWlucyBhbiBhcmd1bWVudCBub2RlIGZpbmRzIGEgZnJlZSBmb3JtYXQgbm9kZSAodXRpbC5pc0ZyZWVGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0RnJlZUZvcm1hdEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1d5c2l3eWdEaXYoZWxlbWVudCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZyZWVGb3JtYXRFbGVtZW50KGVsZW1lbnQpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIElmIGEgcGFyZW50IG5vZGUgdGhhdCBjb250YWlucyBhbiBhcmd1bWVudCBub2RlIGZpbmRzIGEgY2xvc3VyZSBmcmVlIGZvcm1hdCBub2RlICh1dGlsLmlzQ2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbG9zdXJlRnJlZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkgJiYgdmFsaWRhdGlvbihlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkIHN0eWxlIGFuZCBjbGFzc05hbWUgb2YgY29weUVsIHRvIG9yaWdpbkVsXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG9yaWdpbkVsIE9yaWdpbiBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvcHlFbCBFbGVtZW50IHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weVRhZ0F0dHJpYnV0ZXM6IGZ1bmN0aW9uIChvcmlnaW5FbCwgY29weUVsKSB7XHJcbiAgICAgICAgaWYgKGNvcHlFbC5zdHlsZS5jc3NUZXh0KSB7XHJcbiAgICAgICAgICAgIG9yaWdpbkVsLnN0eWxlLmNzc1RleHQgKz0gY29weUVsLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gY29weUVsLmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsYXNzKG9yaWdpbkVsLCBjbGFzc2VzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghb3JpZ2luRWwuc3R5bGUuY3NzVGV4dCkgb3JpZ2luRWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgIGlmICghb3JpZ2luRWwuY2xhc3NOYW1lLnRyaW0oKSkgb3JpZ2luRWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb3B5IGFuZCBhcHBseSBhdHRyaWJ1dGVzIG9mIGZvcm1hdCB0YWcgdGhhdCBzaG91bGQgYmUgbWFpbnRhaW5lZC4gKHN0eWxlLCBjbGFzcykgSWdub3JlIFwiX19zZV9fZm9ybWF0X19cIiBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBvcmlnaW5FbCBPcmlnaW4gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBjb3B5RWwgRWxlbWVudCB0byBjb3B5XHJcbiAgICAgKi9cclxuICAgIGNvcHlGb3JtYXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3JpZ2luRWwsIGNvcHlFbCkge1xyXG4gICAgICAgIGNvcHlFbCA9IGNvcHlFbC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgIGNvcHlFbC5jbGFzc05hbWUgPSBjb3B5RWwuY2xhc3NOYW1lLnJlcGxhY2UoLyhcXHN8XilfX3NlX19mb3JtYXRfX1teXFxzXSsvZywgJycpO1xyXG4gICAgICAgIHRoaXMuY29weVRhZ0F0dHJpYnV0ZXMob3JpZ2luRWwsIGNvcHlFbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgaXRlbSBmcm9tIHRoZSBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGFycmF5IEFycmF5IHRvIGdldCBpdGVtXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQ29uZGl0aW9uYWwgZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbXVsdGkgSWYgdHJ1ZSwgcmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYSBvdGhlcndpc2UsIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXHJcbiAgICAgKiBJZiBmYWxzZSwgcmV0dXJucyBvbmx5IG9uZSBpdGVtIHRoYXQgbWVldCB0aGUgY3JpdGVyaWEgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxyXG4gICAgICogQHJldHVybnMge0FycmF5fE5vZGV8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0QXJyYXlJdGVtOiBmdW5jdGlvbiAoYXJyYXksIHZhbGlkYXRpb24sIG11bHRpKSB7XHJcbiAgICAgICAgaWYgKCFhcnJheSB8fCBhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICB2YWxpZGF0aW9uID0gdmFsaWRhdGlvbiB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGgsIGE7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBhID0gYXJyYXlbaV07XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uKGEpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW11bHRpKSByZXR1cm4gYTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXJyLnB1c2goYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhbXVsdGkgPyBudWxsIDogYXJyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGluZGV4IG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBpbiB0aGUgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtBcnJheXxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gYXJyYXkgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGZpbmQgaW5kZXhcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEFycmF5SW5kZXg6IGZ1bmN0aW9uIChhcnJheSwgZWxlbWVudCkge1xyXG4gICAgICAgIGxldCBpZHggPSAtMTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbmV4dCBpbmRleCBvZiB0aGUgYXJndW1lbnQgdmFsdWUgaW4gdGhlIGVsZW1lbnQgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGFycmF5IGVsZW1lbnQgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gaXRlbSBUaGUgZWxlbWVudCB0byBmaW5kIGluZGV4XHJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZXh0SWR4OiBmdW5jdGlvbiAoYXJyYXksIGl0ZW0pIHtcclxuICAgICAgICBsZXQgaWR4ID0gdGhpcy5nZXRBcnJheUluZGV4KGFycmF5LCBpdGVtKTtcclxuICAgICAgICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIC0xO1xyXG4gICAgICAgIHJldHVybiBpZHggKyAxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHByZXZpb3VzIGluZGV4IG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBpbiB0aGUgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtBcnJheXxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gYXJyYXkgRWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBpdGVtIFRoZSBlbGVtZW50IHRvIGZpbmQgaW5kZXhcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHByZXZJZHg6IGZ1bmN0aW9uIChhcnJheSwgaXRlbSkge1xyXG4gICAgICAgIGxldCBpZHggPSB0aGlzLmdldEFycmF5SW5kZXgoYXJyYXksIGl0ZW0pO1xyXG4gICAgICAgIGlmIChpZHggPT09IC0xKSByZXR1cm4gLTE7XHJcbiAgICAgICAgcmV0dXJuIGlkeCAtIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGluZGV4IGNvbXBhcmVkIHRvIG90aGVyIHNpYmxpbmcgbm9kZXMuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIE5vZGUgdG8gZmluZCBpbmRleFxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0UG9zaXRpb25JbmRleDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBsZXQgaWR4ID0gMDtcclxuICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykpIHtcclxuICAgICAgICAgICAgaWR4ICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpZHg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBcIm5vZGVcIiBpbiB0aGUgXCJwYXJlbnROb2RlXCIgaW4gYSBudW1lcmljYWwgYXJyYXkuXHJcbiAgICAgKiBleCkgPHA+PHNwYW4+YWE8L3NwYW4+PHNwYW4+YmI8L3NwYW4+PC9wPiA6IGdldE5vZGVQYXRoKG5vZGU6IFwiYmJcIiwgcGFyZW50Tm9kZTogXCI8UD5cIikgLT4gWzEsIDBdXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIE5vZGUgdG8gZmluZCBwb3NpdGlvbiBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge05vZGV8bnVsbH0gcGFyZW50Tm9kZSBQYXJlbnQgbm9kZS4gSWYgbnVsbCwgd3lzaXd5ZyBkaXYgYXJlYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R8bnVsbH0gX25ld09mZnNldHMgSWYgeW91IHNlbmQgYW4gb2JqZWN0IG9mIHRoZSBmb3JtIFwie3M6IDAsIGU6IDB9XCIsIHRoZSB0ZXh0IG5vZGVzIHRoYXQgYXJlIGF0dGFjaGVkIHRvZ2V0aGVyIGFyZSBtZXJnZWQgaW50byBvbmUsIGNlbnRlcmVkIG9uIHRoZSBcIm5vZGVcIiBhcmd1bWVudC5cclxuICAgICAqIFwiX25ld09mZnNldHMuc1wiIHN0b3JlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21iaW5lZCBjaGFyYWN0ZXJzIGFmdGVyIFwibm9kZVwiIGFuZCBcIl9uZXdPZmZzZXRzLmVcIiBzdG9yZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29tYmluZWQgY2hhcmFjdGVycyBiZWZvcmUgXCJub2RlXCIuXHJcbiAgICAgKiBEbyBub3QgdXNlIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS5cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgZ2V0Tm9kZVBhdGg6IGZ1bmN0aW9uIChub2RlLCBwYXJlbnROb2RlLCBfbmV3T2Zmc2V0cykge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBbXTtcclxuICAgICAgICBsZXQgZmluZHMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmdldFBhcmVudEVsZW1lbnQobm9kZSwgZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbCA9PT0gcGFyZW50Tm9kZSkgZmluZHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGZpbmRzICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIHRleHQgbm9kZXNcclxuICAgICAgICAgICAgICAgIGlmIChfbmV3T2Zmc2V0cyAmJiBlbC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gbnVsbCwgdGVtcFRleHQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZXdPZmZzZXRzLnMgPSBfbmV3T2Zmc2V0cy5lID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzID0gZWwucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwcmV2aW91cyAmJiBwcmV2aW91cy5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVGV4dCA9IHByZXZpb3VzLnRleHRDb250ZW50LnJlcGxhY2UodGhpcy56ZXJvV2lkdGhSZWdFeHAsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX25ld09mZnNldHMucyArPSB0ZW1wVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gdGVtcFRleHQgKyBlbC50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHByZXZpb3VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRlbXApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBlbC5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCAmJiBuZXh0Lm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUZXh0ID0gbmV4dC50ZXh0Q29udGVudC5yZXBsYWNlKHRoaXMuemVyb1dpZHRoUmVnRXhwLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdPZmZzZXRzLmUgKz0gdGVtcFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCArPSB0ZW1wVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odGVtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGluZGV4IHB1c2hcclxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHBhdGgubWFwKHRoaXMuZ2V0UG9zaXRpb25JbmRleCkucmV2ZXJzZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBub2RlIGluIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGF0aCBhcnJheSBvYnRhaW5lZCBmcm9tIFwidXRpbC5nZXROb2RlUGF0aFwiLlxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gb2Zmc2V0cyBQb3NpdGlvbiBhcnJheSwgYXJyYXkgb2J0YWluZWQgZnJvbSBcInV0aWwuZ2V0Tm9kZVBhdGhcIlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBwYXJlbnROb2RlIEJhc2UgcGFyZW50IGVsZW1lbnRcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlRnJvbVBhdGg6IGZ1bmN0aW9uIChvZmZzZXRzLCBwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGxldCBub2RlcztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9mZnNldHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZXMgPSBjdXJyZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBpZiAobm9kZXMubGVuZ3RoIDw9IG9mZnNldHNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBub2Rlc1tvZmZzZXRzW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSBzdHlsZSBhbmQgY2xhc3MgZm9yIGVxdWFsIHZhbHVlcy5cclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBib3RoIGFyZSB0ZXh0IG5vZGVzLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBhIE5vZGUgdG8gY29tcGFyZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBiIE5vZGUgdG8gY29tcGFyZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2FtZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubm9kZVR5cGUgPT09IDMgJiYgYi5ub2RlVHlwZSA9PT0gMykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGEubm9kZVR5cGUgPT09IDMgfHwgYi5ub2RlVHlwZSA9PT0gMykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBzdHlsZV9hID0gYS5zdHlsZTtcclxuICAgICAgICBjb25zdCBzdHlsZV9iID0gYi5zdHlsZTtcclxuICAgICAgICBsZXQgY29tcFN0eWxlID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlX2EubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0eWxlX2Fbc3R5bGVfYVtpXV0gPT09IHN0eWxlX2Jbc3R5bGVfYVtpXV0pIGNvbXBTdHlsZSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2xhc3NfYSA9IGEuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IGNsYXNzX2IgPSBiLmNsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCByZWcgPSB0aGlzLl93LlJlZ0V4cDtcclxuICAgICAgICBsZXQgY29tcENsYXNzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNsYXNzX2EubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHJlZygnKFxcc3xeKScgKyBjbGFzc19hW2ldICsgJyhcXHN8JCknKS50ZXN0KGNsYXNzX2IudmFsdWUpKSBjb21wQ2xhc3MrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoY29tcFN0eWxlID09PSBzdHlsZV9iLmxlbmd0aCAmJiBjb21wU3R5bGUgPT09IHN0eWxlX2EubGVuZ3RoKSAmJiAoY29tcENsYXNzID09PSBjbGFzc19iLmxlbmd0aCAmJiBjb21wQ2xhc3MgPT09IGNsYXNzX2EubGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIGxpbmUgZWxlbWVudCh1dGlsLmlzRm9ybWF0RWxlbWVudCkgaXMgZW1wdHkuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRm9ybWF0IGVsZW1lbnQgbm9kZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHlMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiAhZWxlbWVudCB8fCAhZWxlbWVudC5wYXJlbnROb2RlIHx8ICghZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdJTUcsIElGUkFNRSwgQVVESU8sIFZJREVPLCBDQU5WQVMsIFRBQkxFJykgJiYgdGhpcy5vbmx5WmVyb1dpZHRoU3BhY2UoZWxlbWVudC50ZXh0Q29udGVudCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIGxpc3QgKG9sLCB1bClcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNMaXN0OiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eKE9MfFVMKSQvaS50ZXN0KHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IG5vZGUgOiBub2RlLm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBsaXN0IGNlbGwgKGxpKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gbm9kZSBUaGUgZWxlbWVudCBvciBlbGVtZW50IG5hbWUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0xpc3RDZWxsOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eTEkkL2kudGVzdCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBub2RlIGlzIGEgdGFibGUgKHRhYmxlLCB0aGVhZCwgdGJvZHksIHRyLCB0aCwgdGQpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV8U3RyaW5nfSBub2RlIFRoZSBlbGVtZW50IG9yIGVsZW1lbnQgbmFtZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGFibGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgL14oVEFCTEV8VEhFQUR8VEJPRFl8VFJ8VEh8VEQpJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIHRhYmxlIGNlbGwgKHRkLCB0aClcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNDZWxsOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eKFREfFRIKSQvaS50ZXN0KHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IG5vZGUgOiBub2RlLm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBicmVhayBub2RlIChCUilcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNCcmVhazogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSAmJiAvXkJSJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBhbmNob3Igbm9kZSAoQSlcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNBbmNob3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgL15BJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIG1lZGlhIG5vZGUgKGltZywgaWZyYW1lLCBhdWRpbywgdmlkZW8sIGNhbnZhcylcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNNZWRpYTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSAmJiAvXihJTUd8SUZSQU1FfEFVRElPfFZJREVPfENBTlZBUykkL2kudGVzdCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBmb3IgbnVtZXJpYyAod2l0aCBkZWNpbWFsIHBvaW50KS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdGV4dCBUZXh0IHN0cmluZyBvciBudW1iZXJcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc051bWJlcjogZnVuY3Rpb24gKHRleHQpIHtcclxuICAgICAgICByZXR1cm4gISF0ZXh0ICYmIC9eLT9cXGQrKFxcLlxcZCspPyQvLnRlc3QodGV4dCArICcnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGEgbnVtYmVyLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB0ZXh0IFRleHQgc3RyaW5nIG9yIG51bWJlclxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1heERlYyBNYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyAoLTEgOiBJbmZpbml0eSlcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE51bWJlcjogZnVuY3Rpb24gKHRleHQsIG1heERlYykge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuIDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG51bWJlciA9ICh0ZXh0ICsgJycpLm1hdGNoKC8tP1xcZCsoXFwuXFxkKyk/Lyk7XHJcbiAgICAgICAgaWYgKCFudW1iZXIgfHwgIW51bWJlclswXSkgcmV0dXJuIDA7XHJcblxyXG4gICAgICAgIG51bWJlciA9IG51bWJlclswXTtcclxuICAgICAgICByZXR1cm4gbWF4RGVjIDwgMCA/IG51bWJlciAqIDEgOiBtYXhEZWMgPT09IDAgPyB0aGlzLl93Lk1hdGgucm91bmQobnVtYmVyICogMSkgOiAobnVtYmVyICogMSkudG9GaXhlZChtYXhEZWMpICogMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBcImNoaWxkcmVuXCIgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnQgKFdpdGhvdXQgdGV4dCBub2RlcylcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBlbGVtZW50IHRvIGdldCBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQ29uZGl0aW9uYWwgZnVuY3Rpb25cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgZ2V0TGlzdENoaWxkcmVuOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNoaWxkcmVuIHx8IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSByZXR1cm4gY2hpbGRyZW47XHJcblxyXG4gICAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IGN1cnJlbnQgJiYgdmFsaWRhdGlvbihjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEhY3VycmVudC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGN1cnJlbnQuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGN1cnJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBcImNoaWxkTm9kZXNcIiBvZiB0aGUgYXJndW1lbnQgdmFsdWUgZWxlbWVudCAoSW5jbHVkZSB0ZXh0IG5vZGVzKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IGVsZW1lbnQgdG8gZ2V0IGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBDb25kaXRpb25hbCBmdW5jdGlvblxyXG4gICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRMaXN0Q2hpbGROb2RlczogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSByZXR1cm4gY2hpbGRyZW47XHJcblxyXG4gICAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IGN1cnJlbnQgJiYgdmFsaWRhdGlvbihjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjdXJyZW50LmNoaWxkTm9kZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhcmVudHMgbm9kZXMuXHJcbiAgICAgKiBcIjBcIiB3aGVuIHRoZSBwYXJlbnQgbm9kZSBpcyB0aGUgV1lTSVdZRyBhcmVhLlxyXG4gICAgICogXCItMVwiIHdoZW4gdGhlIGVsZW1lbnQgYXJndW1lbnQgaXMgdGhlIFdZU0lXWUcgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RWxlbWVudERlcHRoOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCB0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsZXQgZGVwdGggPSAwO1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50ICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICBkZXB0aCArPSAxO1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRlcHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0d28gZWxlbWVudHMgdG8gZmluZCBhIGNvbW1vbiBhbmNlc3RvciwgYW5kIHJldHVybnMgdGhlIG9yZGVyIG9mIHRoZSB0d28gZWxlbWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGEgTm9kZSB0byBjb21wYXJlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBiIE5vZGUgdG8gY29tcGFyZS5cclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgYW5jZXNzdG9yLCBhLCBiLCByZXN1bHQ6IChhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMCkgfTtcclxuICAgICAqL1xyXG4gICAgY29tcGFyZUVsZW1lbnRzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIGxldCBhTm9kZSA9IGEsIGJOb2RlID0gYjtcclxuICAgICAgICB3aGlsZSAoYU5vZGUgJiYgYk5vZGUgJiYgYU5vZGUucGFyZW50Tm9kZSAhPT0gYk5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICBhTm9kZSA9IGFOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGJOb2RlID0gYk5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYU5vZGUgfHwgIWJOb2RlKSByZXR1cm4geyBhbmNlc3RvcjogbnVsbCwgYTogYSwgYjogYiwgcmVzdWx0OiAwIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gYU5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGNvbnN0IGFJbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleChjaGlsZHJlbiwgYU5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGJJbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleChjaGlsZHJlbiwgYk5vZGUpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhbmNlc3RvcjogYU5vZGUucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgYTogYU5vZGUsXHJcbiAgICAgICAgICAgIGI6IGJOb2RlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGFJbmRleCA+IGJJbmRleCA/IDEgOiBhSW5kZXggPCBiSW5kZXggPyAtMSA6IDBcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCB2YWx1ZS5cclxuICAgICAqIEEgdGFnIHRoYXQgc2F0aXNmaWVzIHRoZSBxdWVyeSBjb25kaXRpb24gaXMgaW1wb3J0ZWQuXHJcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFJlZmVyZW5jZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gcXVlcnkgUXVlcnkgU3RyaW5nIChub2RlTmFtZSwgLmNsYXNzTmFtZSwgI0lELCA6bmFtZSkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgICAqIE5vdCB1c2UgaXQgbGlrZSBqcXVlcnkuXHJcbiAgICAgKiBPbmx5IG9uZSBjb25kaXRpb24gY2FuIGJlIGVudGVyZWQgYXQgYSB0aW1lLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXJ5KSB7XHJcbiAgICAgICAgbGV0IGNoZWNrO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNoZWNrID0gcXVlcnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dHI7XHJcbiAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChxdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgIGF0dHIgPSAnY2xhc3NOYW1lJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiMvLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ2lkJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ14nICsgcXVlcnkuc3BsaXQoJyMnKVsxXSArICckJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXjovLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ25hbWUnO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSAnXicgKyBxdWVyeS5zcGxpdCgnOicpWzFdICsgJyQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICdub2RlTmFtZSc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9ICdeJyArIHF1ZXJ5ICsgJyQnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgdGhpcy5fdy5SZWdFeHAocXVlcnksICdpJyk7XHJcbiAgICAgICAgICAgIGNoZWNrID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwLnRlc3QoZWxbYXR0cl0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWNoZWNrKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGNoaWxkIGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IHZhbHVlLlxyXG4gICAgICogQSB0YWcgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1ZXJ5IGNvbmRpdGlvbiBpcyBpbXBvcnRlZC5cclxuICAgICAqIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBxdWVyeSBRdWVyeSBTdHJpbmcgKG5vZGVOYW1lLCAuY2xhc3NOYW1lLCAjSUQsIDpuYW1lKSBvciB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBsYXN0IElmIHRydWUgcmV0dXJucyB0aGUgbGFzdCBub2RlIGFtb25nIHRoZSBmb3VuZCBjaGlsZCBub2Rlcy4gKGRlZmF1bHQ6IGZpcnN0IG5vZGUpXHJcbiAgICAgKiBOb3QgdXNlIGl0IGxpa2UganF1ZXJ5LlxyXG4gICAgICogT25seSBvbmUgY29uZGl0aW9uIGNhbiBiZSBlbnRlcmVkIGF0IGEgdGltZS5cclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fG51bGx9XHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXJ5LCBsYXN0KSB7XHJcbiAgICAgICAgbGV0IGNoZWNrO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNoZWNrID0gcXVlcnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dHI7XHJcbiAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChxdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgIGF0dHIgPSAnY2xhc3NOYW1lJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiMvLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ2lkJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ14nICsgcXVlcnkuc3BsaXQoJyMnKVsxXSArICckJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXjovLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ25hbWUnO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSAnXicgKyBxdWVyeS5zcGxpdCgnOicpWzFdICsgJyQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICdub2RlTmFtZSc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9ICdeJyArIChxdWVyeSA9PT0gJ3RleHQnID8gJyMnICsgcXVlcnkgOiBxdWVyeSkgKyAnJCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyB0aGlzLl93LlJlZ0V4cChxdWVyeSwgJ2knKTtcclxuICAgICAgICAgICAgY2hlY2sgPSBmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZWdFeHAudGVzdChlbFthdHRyXSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaGlsZExpc3QgPSB0aGlzLmdldExpc3RDaGlsZE5vZGVzKGVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGVjayhjdXJyZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkTGlzdFtsYXN0ID8gY2hpbGRMaXN0Lmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gMS4gVGhlIGZpcnN0IG5vZGUgb2YgYWxsIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgXCJmaXJzdFwiIGVsZW1lbnQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiAyLiBUaGUgbGFzdCBub2RlIG9mIGFsbCB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIFwibGFzdFwiIGVsZW1lbnQgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiAzLiBXaGVuIHRoZXJlIGlzIG5vIFwibGFzdFwiIGVsZW1lbnQsIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlcyBvZiBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBcImZpcnN0XCIgZWxlbWVudCBhcmUgcmV0dXJuZWQuXHJcbiAgICAgKiB7IHNjOiBcImZpcnN0XCIsIGVjOiBcImxhc3RcIiB9XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGZpcnN0IEZpcnN0IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxudWxsfSBsYXN0IExhc3QgZWxlbWVudFxyXG4gICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0RWRnZUNoaWxkTm9kZXM6IGZ1bmN0aW9uIChmaXJzdCwgbGFzdCkge1xyXG4gICAgICAgIGlmICghZmlyc3QpIHJldHVybjtcclxuICAgICAgICBpZiAoIWxhc3QpIGxhc3QgPSBmaXJzdDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGZpcnN0ICYmIGZpcnN0Lm5vZGVUeXBlID09PSAxICYmIGZpcnN0LmNoaWxkTm9kZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5pc0JyZWFrKGZpcnN0KSkgZmlyc3QgPSBmaXJzdC5maXJzdENoaWxkO1xyXG4gICAgICAgIHdoaWxlIChsYXN0ICYmIGxhc3Qubm9kZVR5cGUgPT09IDEgJiYgbGFzdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgICF0aGlzLmlzQnJlYWsobGFzdCkpIGxhc3QgPSBsYXN0Lmxhc3RDaGlsZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2M6IGZpcnN0LFxyXG4gICAgICAgICAgICBlYzogbGFzdCB8fCBmaXJzdFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsZWZ0IGFuZCB0b3Agb2YgYXJndW1lbnQuIHtsZWZ0OjAsIHRvcDowfVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRhcmdldCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gd3lzaXd5Z0ZyYW1lIFdoZW4gdXNlIGlmcmFtZSBvcHRpb24sIGlmcmFtZSBvYmplY3Qgc2hvdWxkIGJlIHNlbnQgKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZXRPZmZzZXQ6IGZ1bmN0aW9uIChlbGVtZW50LCB3eXNpd3lnRnJhbWUpIHtcclxuICAgICAgICBsZXQgb2Zmc2V0TGVmdCA9IDA7XHJcbiAgICAgICAgbGV0IG9mZnNldFRvcCA9IDA7XHJcbiAgICAgICAgbGV0IG9mZnNldEVsZW1lbnQgPSBlbGVtZW50Lm5vZGVUeXBlID09PSAzID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogZWxlbWVudDtcclxuICAgICAgICBjb25zdCB3eXNpd3lnID0gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuaXNXeXNpd3lnRGl2LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB3aGlsZSAob2Zmc2V0RWxlbWVudCAmJiAhdGhpcy5oYXNDbGFzcyhvZmZzZXRFbGVtZW50LCAnc2UtY29udGFpbmVyJykgJiYgb2Zmc2V0RWxlbWVudCAhPT0gd3lzaXd5Zykge1xyXG4gICAgICAgICAgICBvZmZzZXRMZWZ0ICs9IG9mZnNldEVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgb2Zmc2V0VG9wICs9IG9mZnNldEVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBvZmZzZXRFbGVtZW50ID0gb2Zmc2V0RWxlbWVudC5vZmZzZXRQYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpZnJhbWUgPSB3eXNpd3lnRnJhbWUgJiYgL2lmcmFtZS9pLnRlc3Qod3lzaXd5Z0ZyYW1lLm5vZGVOYW1lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGVmdDogb2Zmc2V0TGVmdCArIChpZnJhbWUgPyB3eXNpd3lnRnJhbWUucGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0IDogMCksXHJcbiAgICAgICAgICAgIHRvcDogKG9mZnNldFRvcCAtICh3eXNpd3lnID8gd3lzaXd5Zy5zY3JvbGxUb3AgOiAwKSkgKyAoaWZyYW1lID8gd3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0VG9wIDogMClcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBjb21wYXJlcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRleGVzIG9mIFwiYVwiIGFuZCBcImJcIiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGluZGV4ZXMgaW4gdGhlIHJhbmdlLlxyXG4gICAgICogZXgpIDEsIDUsIDQsIDYgPT4gXCIyXCIgKDQgfiA1KVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGFTdGFydCBTdGFydCBpbmRleCBvZiBcImFcIlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGFFbmQgRW5kIGluZGV4IG9mIFwiYVwiXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYlN0YXJ0IFN0YXJ0IGluZGV4IG9mIFwiYlwiXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYkVuZCBTdGFydCBpbmRleCBvZiBcImJcIlxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0T3ZlcmxhcFJhbmdlQXRJbmRleDogZnVuY3Rpb24gKGFTdGFydCwgYUVuZCwgYlN0YXJ0LCBiRW5kKSB7XHJcbiAgICAgICAgaWYgKGFTdGFydCA8PSBiRW5kID8gYUVuZCA8IGJTdGFydCA6IGFFbmQgPiBiU3RhcnQpIHJldHVybiAwO1xyXG5cclxuICAgICAgICBjb25zdCBvdmVybGFwID0gKGFTdGFydCA+IGJTdGFydCA/IGFTdGFydCA6IGJTdGFydCkgLSAoYUVuZCA8IGJFbmQgPyBhRW5kIDogYkVuZCk7XHJcbiAgICAgICAgcmV0dXJuIChvdmVybGFwIDwgMCA/IG92ZXJsYXAgKiAtMSA6IG92ZXJsYXApICsgMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHRoZSB0ZXh0IGNvbnRlbnQgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIHJlcGxhY2UgdGV4dCBjb250ZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHh0IFRleHQgdG8gYmUgYXBwbGllZFxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VUeHQ6IGZ1bmN0aW9uIChlbGVtZW50LCB0eHQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIXR4dCkgcmV0dXJuO1xyXG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0eHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlcGxhY2UgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fSBuZXdFbGVtZW50IFN0cmluZyBvciBlbGVtZW50IG9mIHRoZSBuZXcgZWxlbWVudCB0byBhcHBseVxyXG4gICAgICovXHJcbiAgICBjaGFuZ2VFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmV3RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQub3V0ZXJIVE1MKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm91dGVySFRNTCA9IG5ld0VsZW1lbnQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICAgICAgZG9jLmlubmVySFRNTCA9IG5ld0VsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50ID0gZG9jLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdFbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3RWxlbWVudCwgZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgc3R5bGUsIGlmIGFsbCBzdHlsZXMgYXJlIGRlbGV0ZWQsIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGFyZSBkZWxldGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gc2V0IHN0eWxlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGVOYW1lIFN0eWxlIGF0dHJpYnV0ZSBuYW1lIChtYXJnaW5MZWZ0LCB0ZXh0QWxpZ24uLi4pXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbHVlIFN0eWxlIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFN0eWxlOiBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGVOYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlICYmICFlbGVtZW50LnN0eWxlLmNzc1RleHQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmUgd2hldGhlciBhbnkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudHMgYXJlIGFzc2lnbmVkIHRoZSBnaXZlbiBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRzIHRvIHNlYXJjaCBjbGFzcyBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgdG8gc2VhcmNoIGZvclxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhc0NsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHJldHVybiAobmV3IHRoaXMuX3cuUmVnRXhwKGNsYXNzTmFtZSkpLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBlbmQgdGhlIGNsYXNzTmFtZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgdmFsdWUgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRzIHRvIGFkZCBjbGFzcyBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgdG8gYmUgYWRkXHJcbiAgICAgKi9cclxuICAgIGFkZENsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcoXFxcXHN8XiknICsgY2xhc3NOYW1lICsgJyhcXFxcc3wkKScpO1xyXG4gICAgICAgIGlmIChjaGVjay50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVudC5jbGFzc05hbWUubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArIGNsYXNzTmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIHRoZSBjbGFzc05hbWUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50cyB0byByZW1vdmUgY2xhc3MgbmFtZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGJlIHJlbW92ZVxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjaGVjayA9IG5ldyB0aGlzLl93LlJlZ0V4cCgnKFxcXFxzfF4pJyArIGNsYXNzTmFtZSArICcoXFxcXHN8JCknKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoY2hlY2ssICcgJykudHJpbSgpO1xyXG5cclxuICAgICAgICBpZiAoIWVsZW1lbnQuY2xhc3NOYW1lLnRyaW0oKSkgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFyZ3VtZW50IHZhbHVlIElmIHRoZXJlIGlzIG5vIGNsYXNzIG5hbWUsIGluc2VydCBpdCBhbmQgZGVsZXRlIHRoZSBjbGFzcyBuYW1lIGlmIGl0IGV4aXN0c1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRzIHRvIHJlcGxhY2UgY2xhc3MgbmFtZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGJlIGNoYW5nZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW58dW5kZWZpbmVkfVxyXG4gICAgICovXHJcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSBuZXcgdGhpcy5fdy5SZWdFeHAoJyhcXFxcc3xeKScgKyBjbGFzc05hbWUgKyAnKFxcXFxzfCQpJyk7XHJcbiAgICAgICAgaWYgKGNoZWNrLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShjaGVjaywgJyAnKS50cmltKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lO1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFlbGVtZW50LmNsYXNzTmFtZS50cmltKCkpIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbiB0aGUgcHJlZGVmaW5lZCBjb2RlIHZpZXcgbW9kZSwgdGhlIGJ1dHRvbnMgZXhjZXB0IHRoZSBleGVjdXRhYmxlIGJ1dHRvbiBhcmUgY2hhbmdlZCB0byB0aGUgJ2Rpc2FibGVkJyBzdGF0ZS5cclxuICAgICAqIGNvcmUuY29kZVZpZXdEaXNhYmxlZEJ1dHRvbnMgKEFuIGFycmF5IG9mIGJ1dHRvbnMgd2hvc2UgY2xhc3MgbmFtZSBpcyBub3QgXCJzZS1jb2RlLXZpZXctZW5hYmxlZFwiKVxyXG4gICAgICogY29yZS5yZXNpemluZ0Rpc2FibGVkQnV0dG9ucyAoQW4gYXJyYXkgb2YgYnV0dG9ucyB3aG9zZSBjbGFzcyBuYW1lIGlzIG5vdCBcInNlLXJlc2l6aW5nLWVuYWJsZWRcIilcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgRGlzYWJsZWQgdmFsdWVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGJ1dHRvbkxpc3QgQnV0dG9uIGFycmF5XHJcbiAgICAgKi9cclxuICAgIHNldERpc2FibGVkQnV0dG9uczogZnVuY3Rpb24gKGRpc2FibGVkLCBidXR0b25MaXN0KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJ1dHRvbkxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgYnV0dG9uTGlzdFtpXS5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIGFyZ3VtZW51IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gaXRlbSBOb2RlIHRvIGJlIHJlbW92ZVxyXG4gICAgICovXHJcbiAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZih0eXBlb2YgaXRlbS5yZW1vdmUgPT09ICdmdW5jdGlvbicpIGl0ZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5wYXJlbnROb2RlKSBpdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhbGwgcGFyZW50IG5vZGVzIHRoYXQgbWF0Y2ggdGhlIGNvbmRpdGlvbi5cclxuICAgICAqIFJldHVybnMgYW4ge3NjOiBwcmV2aW91c1NpYmxpbmcsIGVjOiBuZXh0U2libGluZ30odGhlIGRlbGV0ZWQgbm9kZSByZWZlcmVuY2UpIG9yIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGl0ZW0gTm9kZSB0byBiZSByZW1vdmVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBWYWxpZGF0aW9uIGZ1bmN0aW9uLiBkZWZhdWx0KERlbGV0ZWQgaWYgaXQgb25seSBoYXZlIGJyZWFrTGluZSBhbmQgYmxhbmtzKVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IHN0b3BQYXJlbnQgU3RvcCB3aGVuIHRoZSBwYXJlbnQgbm9kZSByZWFjaGVzIHN0b3BQYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R8bnVsbH0ge3NjOiBwcmV2aW91c1NpYmxpbmcsIGVjOiBuZXh0U2libGluZ31cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbUFsbFBhcmVudHM6IGZ1bmN0aW9uIChpdGVtLCB2YWxpZGF0aW9uLCBzdG9wUGFyZW50KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBsZXQgY2MgPSBudWxsO1xyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBzdG9wUGFyZW50IHx8IHRoaXMuaXNDb21wb25lbnQoY3VycmVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjdXJyZW50LnRleHRDb250ZW50LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA9PT0gMCB8fCAvXihcXG58XFx1MjAwQikrJC8udGVzdCh0ZXh0KTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiB2YWxpZGF0aW9uKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMocGFyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0oaXRlbSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2M7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERldGFjaCBOZXN0ZWQgYWxsIG5lc3RlZCBsaXN0cyB1bmRlciB0aGUgXCJiYXNlTm9kZVwiLlxyXG4gICAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBuZXN0ZWQgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gYmFzZU5vZGUgRWxlbWVudCBvbiB3aGljaCB0byBiYXNlLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBhbGwgSWYgdHJ1ZSwgaXQgYWxzbyBkZXRhY2ggYWxsIG5lc3RlZCBsaXN0cyBvZiBhIHJldHVybmVkIGxpc3QuXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoTmVzdGVkTGlzdDogZnVuY3Rpb24gKGJhc2VOb2RlLCBhbGwpIHtcclxuICAgICAgICBjb25zdCByTm9kZSA9IHRoaXMuX2RlbGV0ZU5lc3RlZExpc3QoYmFzZU5vZGUpO1xyXG4gICAgICAgIGxldCByYW5nZUVsZW1lbnQsIGNOb2RlcztcclxuXHJcbiAgICAgICAgaWYgKHJOb2RlKSB7XHJcbiAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IHJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNOb2RlcyA9IHJOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQb3NpdGlvbkluZGV4KGJhc2VOb2RlKTtcclxuICAgICAgICAgICAgd2hpbGUgKGNOb2Rlc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudC5hcHBlbmRDaGlsZChjTm9kZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IGJhc2VOb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgckNoaWxkcmVuO1xyXG4gICAgICAgIGlmICghYWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlcHRoID0gdGhpcy5nZXRFbGVtZW50RGVwdGgoYmFzZU5vZGUpICsgMjtcclxuICAgICAgICAgICAgckNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW4oYmFzZU5vZGUsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzTGlzdENlbGwoY3VycmVudCkgJiYgIWN1cnJlbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiB0aGlzLmdldEVsZW1lbnREZXB0aChjdXJyZW50KSA9PT0gZGVwdGg7IH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgckNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW4ocmFuZ2VFbGVtZW50LCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpICYmICFjdXJyZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gckNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5lc3RlZExpc3QockNoaWxkcmVuW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHJOb2RlKSB7XHJcbiAgICAgICAgICAgIHJOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJhbmdlRWxlbWVudCwgck5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICBpZiAoY05vZGVzICYmIGNOb2Rlcy5sZW5ndGggPT09IDApIHRoaXMucmVtb3ZlSXRlbShyTm9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmFuZ2VFbGVtZW50ID09PSBiYXNlTm9kZSA/IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlIDogcmFuZ2VFbGVtZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTdWIgZnVuY3Rpb24gb2YgdXRpbC5kZXRhY2hOZXN0ZWRMaXN0IG1ldGhvZC5cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9kZWxldGVOZXN0ZWRMaXN0OiBmdW5jdGlvbiAoYmFzZU5vZGUpIHtcclxuICAgICAgICBjb25zdCBiYXNlUGFyZW50ID0gYmFzZU5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICBsZXQgc2libGluZyA9IGJhc2VQYXJlbnQ7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHNpYmxpbmcucGFyZW50Tm9kZTtcclxuICAgICAgICBsZXQgbGlTaWJsaW5nLCBsaVBhcmVudCwgY2hpbGQsIGluZGV4LCBjO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHdoaWxlICh0aGlzLmlzTGlzdENlbGwocGFyZW50KSkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0UG9zaXRpb25JbmRleChiYXNlTm9kZSk7XHJcbiAgICAgICAgICAgIGxpU2libGluZyA9IHBhcmVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGxpUGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGNoaWxkID0gc2libGluZztcclxuICAgICAgICAgICAgd2hpbGUoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0KGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaVBhcmVudC5pbnNlcnRCZWZvcmUoY1tpbmRleF0sIGxpU2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlQYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBzaWJsaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNpYmxpbmcgPSBsaVBhcmVudDtcclxuICAgICAgICAgICAgcGFyZW50ID0gbGlQYXJlbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYXNlUGFyZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKGJhc2VQYXJlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlQYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNwbGl0IGFsbCB0YWdzIGJhc2VkIG9uIFwiYmFzZU5vZGVcIlxyXG4gICAgICogUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzcGxpdGVkIHRhZy5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gYmFzZU5vZGUgRWxlbWVudCBvciB0ZXh0IG5vZGUgb24gd2hpY2ggdG8gYmFzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ8bnVsbH0gb2Zmc2V0IFRleHQgb2Zmc2V0IG9mIFwiYmFzZU5vZGVcIiAoT25seSB2YWxpZCB3aGVuIFwiYmFzZU5vZGVcIiBpcyBhIHRleHQgbm9kZSlcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCBUaGUgbmVzdGluZyBkZXB0aCBvZiB0aGUgZWxlbWVudCBiZWluZyBzcGxpdC4gKGRlZmF1bHQ6IDApXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgc3BsaXRFbGVtZW50OiBmdW5jdGlvbiAoYmFzZU5vZGUsIG9mZnNldCwgZGVwdGgpIHtcclxuICAgICAgICBjb25zdCBicCA9IGJhc2VOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMCwgbmV3RWwsIGNoaWxkcmVuLCB0ZW1wO1xyXG4gICAgICAgIGxldCBuZXh0ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIWRlcHRoIHx8IGRlcHRoIDwgMCkgZGVwdGggPSAwO1xyXG5cclxuICAgICAgICBpZiAoYmFzZU5vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldFBvc2l0aW9uSW5kZXgoYmFzZU5vZGUpO1xyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGJhc2VOb2RlLnNwbGl0VGV4dChvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSB0aGlzLmdldE5vZGVGcm9tUGF0aChbaW5kZXggKyAxXSwgYnApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub25seVplcm9XaWR0aFNwYWNlKGFmdGVyKSkgYWZ0ZXIuZGF0YSA9IHRoaXMuemVyb1dpZHRoU3BhY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGJhc2VOb2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgIGlmICghYmFzZU5vZGUucHJldmlvdXNTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRFbGVtZW50RGVwdGgoYmFzZU5vZGUpID09PSBkZXB0aCkgbmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYmFzZU5vZGUgPSBiYXNlTm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZXB0aEVsID0gYmFzZU5vZGU7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuZ2V0RWxlbWVudERlcHRoKGRlcHRoRWwpID4gZGVwdGgpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldFBvc2l0aW9uSW5kZXgoZGVwdGhFbCkgKyAxO1xyXG4gICAgICAgICAgICBkZXB0aEVsID0gZGVwdGhFbC5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICAgICAgdGVtcCA9IG5ld0VsO1xyXG4gICAgICAgICAgICBuZXdFbCA9IGRlcHRoRWwuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBkZXB0aEVsLmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVtcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0Q2VsbChuZXdFbCkgJiYgdGhpcy5pc0xpc3QodGVtcCkgJiYgdGVtcC5maXJzdEVsZW1lbnRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0VsLmlubmVySFRNTCA9IHRlbXAuZmlyc3RFbGVtZW50Q2hpbGQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh0ZW1wLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGVtcC5jaGlsZHJlbi5sZW5ndGggPiAwKSBuZXdFbC5hcHBlbmRDaGlsZCh0ZW1wKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RWwuYXBwZW5kQ2hpbGQodGVtcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlbltpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIG5ld0VsLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZXB0aEVsLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEgJiYgKCFkZXB0aEVsLmZpcnN0Q2hpbGQgfHwgZGVwdGhFbC5maXJzdENoaWxkLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIGRlcHRoRWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG5cclxuICAgICAgICBjb25zdCBwRWxlbWVudCA9IGRlcHRoRWwucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAobmV4dCkgZGVwdGhFbCA9IGRlcHRoRWwubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKCFuZXdFbCkgcmV0dXJuIGRlcHRoRWw7XHJcblxyXG4gICAgICAgIHRoaXMubWVyZ2VTYW1lVGFncyhuZXdFbCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubWVyZ2VOZXN0ZWRUYWdzKG5ld0VsLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3QoY3VycmVudCk7IH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5ld0VsLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgcEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5ld0VsLCBkZXB0aEVsKTtcclxuICAgICAgICBlbHNlIG5ld0VsID0gZGVwdGhFbDtcclxuXHJcbiAgICAgICAgaWYgKGJwLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB0aGlzLnJlbW92ZUl0ZW0oYnApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3RWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFVzZSB3aXRoIFwibnBkZVBhdGggKHV0aWwuZ2V0Tm9kZVBhdGgpXCIgdG8gbWVyZ2UgdGhlIHNhbWUgYXR0cmlidXRlcyBhbmQgdGFncyBpZiB0aGV5IGFyZSBwcmVzZW50IGFuZCBtb2RpZnkgdGhlIG5vZGVwYXRoLlxyXG4gICAgICogSWYgXCJvZmZzZXRcIiBoYXMgYmVlbiBjaGFuZ2VkLCBpdCB3aWxsIHJldHVybiBhcyBtdWNoIFwib2Zmc2V0XCIgYXMgaXQgaGFzIGJlZW4gbW9kaWZpZWQuXHJcbiAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIGNoYW5nZSBvZmZzZXRzIGlzIHJldHVybmVkIGluIHRoZSBvcmRlciBvZiB0aGUgXCJub2RlUGF0aEFycmF5XCIgYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheXxudWxsfSBub2RlUGF0aEFycmF5IEFycmF5IG9mIE5vZGVQYXRoIG9iamVjdCAoW3V0aWwuZ2V0Tm9kZVBhdGgoKSwgLi5dKVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBvbmx5VGV4dCBJZiB0cnVlLCBub24tdGV4dCBub2RlcyghdXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKSBsaWtlICdzcGFuJywgJ3N0cm9uZycuLiBhcmUgaWdub3JlZC5cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gW29mZnNldCwgLi5dXHJcbiAgICAgKi9cclxuICAgIG1lcmdlU2FtZVRhZ3M6IGZ1bmN0aW9uIChlbGVtZW50LCBub2RlUGF0aEFycmF5LCBvbmx5VGV4dCkge1xyXG4gICAgICAgIGNvbnN0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG5vZGVQYXRoTGVuID0gbm9kZVBhdGhBcnJheSA/IG5vZGVQYXRoQXJyYXkubGVuZ3RoIDogMDtcclxuICAgICAgICBsZXQgb2Zmc2V0cyA9IG51bGw7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgIG9mZnNldHMgPSB0aGlzLl93LkFycmF5LmFwcGx5KG51bGwsIG5ldyB0aGlzLl93LkFycmF5KG5vZGVQYXRoTGVuKSkubWFwKHRoaXMuX3cuTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGRlcHRoLCBkZXB0aEluZGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgY2hpbGQsIG5leHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIG5leHQgPSBjaGlsZHJlbltpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBicmVhaztcclxuICAgICAgICAgICAgICAgIGlmKChvbmx5VGV4dCAmJiBpbnN0Ll9pc0lnbm9yZU5vZGVDaGFuZ2UoY2hpbGQpKSB8fCAoIW9ubHlUZXh0ICYmIChpbnN0LmlzVGFibGUoY2hpbGQpIHx8IGluc3QuaXNMaXN0Q2VsbChjaGlsZCkgfHwgKGluc3QuaXNGb3JtYXRFbGVtZW50KGNoaWxkKSAmJiAhaW5zdC5pc0ZyZWVGb3JtYXRFbGVtZW50KGNoaWxkKSkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0LmlzVGFibGUoY2hpbGQpIHx8IGluc3QuaXNMaXN0Q2VsbChjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgZGVwdGggKyAxLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGVuID09PSAxICYmIGN1cnJlbnQubm9kZU5hbWUgPT09IGNoaWxkLm5vZGVOYW1lICYmIGN1cnJlbnQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBub2RlUGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlUGF0aExlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCwgYywgcCwgY0RlcHRoLCBzcGxpY2VEZXB0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2RlUGF0aExlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gbm9kZVBhdGhBcnJheVtuXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoICYmIHBhdGhbZGVwdGhdID09PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoaWxkLCBwID0gY3VycmVudCwgY0RlcHRoID0gZGVwdGgsIHNwbGljZURlcHRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY0RlcHRoID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3QuZ2V0QXJyYXlJbmRleChwLmNoaWxkTm9kZXMsIGMpICE9PSBwYXRoW2NEZXB0aF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZURlcHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hpbGQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGMucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY0RlcHRoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpY2VEZXB0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnNwbGljZShkZXB0aCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbZGVwdGhdID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIHRhZ1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QuY29weVRhZ0F0dHJpYnV0ZXMoY2hpbGQsIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QucmVtb3ZlSXRlbShjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgcmVjdXJzaW9uRnVuYyhjaGlsZCwgZGVwdGggKyAxLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZU5hbWUgPT09IG5leHQubm9kZU5hbWUgJiYgaW5zdC5pc1NhbWVBdHRyaWJ1dGVzKGNoaWxkLCBuZXh0KSAmJiBjaGlsZC5ocmVmID09PSBuZXh0LmhyZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHMgPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZExlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDAsIG5MZW4gPSBjaGlsZHMubGVuZ3RoOyBuIDwgbkxlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHNbbl0udGV4dENvbnRlbnQubGVuZ3RoID4gMCkgY2hpbGRMZW5ndGgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBjaGlsZC5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5leHQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobCAmJiByKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBsLm5vZGVUeXBlID09PSAzICYmIHIubm9kZVR5cGUgPT09IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCA9IGwudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcEwgPSBsLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUodGVtcEwgJiYgdGVtcEwubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCArPSB0ZW1wTC50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTCA9IHRlbXBMLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTGVuZ3RoID4gMCAmJiBsLm5vZGVUeXBlID09PSAzICYmIHIubm9kZVR5cGUgPT09IDMgJiYgKGwudGV4dENvbnRlbnQubGVuZ3RoID4gMCB8fCByLnRleHRDb250ZW50Lmxlbmd0aCA+IDApKSBjaGlsZExlbmd0aC0tO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVQYXRoTGVuOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gbm9kZVBhdGhBcnJheVtuXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aCAmJiBwYXRoW2RlcHRoXSA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID4gMCAmJiBwYXRoW2RlcHRoIC0gMV0gIT09IGRlcHRoSW5kZXgpIGNvbnRpbnVlO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbZGVwdGhdIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoW2RlcHRoICsgMV0gPj0gMCAmJiBwYXRoW2RlcHRoXSA9PT0gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFtkZXB0aCArIDFdICs9IGNoaWxkTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCAmJiBsLm5vZGVUeXBlID09PSAzICYmIHIgJiYgci5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRzW25dICs9IGFkZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRPZmZzZXQgPSBjaGlsZC50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRleHRDb250ZW50ICs9IG5leHQudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlUGF0aExlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2RlUGF0aExlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG5vZGVQYXRoQXJyYXlbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGggJiYgcGF0aFtkZXB0aF0gPiBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA+IDAgJiYgcGF0aFtkZXB0aCAtIDFdICE9PSBkZXB0aEluZGV4KSBjb250aW51ZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoW2RlcHRoXSAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aFtkZXB0aCArIDFdID49IDAgJiYgcGF0aFtkZXB0aF0gPT09IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhbZGVwdGggKyAxXSArPSBjaGlsZExlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHNbbl0gKz0gYWRkT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaW5uZXJIVE1MICs9IG5leHQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LnJlbW92ZUl0ZW0obmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGRlcHRoICsgMSwgaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KShlbGVtZW50LCAwLCAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9mZnNldHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSBuZXN0ZWQgdGFncyB3aXRob3V0IG90aGVyIGNoaWxkIG5vZGVzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ3xudWxsfSB2YWxpZGF0aW9uIFZhbGlkYXRpb24gZnVuY3Rpb24gLyBTdHJpbmcoXCJ0YWcxfHRhZzIuLlwiKSAvIElmIG51bGwsIGFsbCB0YWdzIGFyZSBhcHBsaWNhYmxlLlxyXG4gICAgICovXHJcbiAgICBtZXJnZU5lc3RlZFRhZ3M6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMudGVzdChjdXJyZW50LnRhZ05hbWUpOyB9LmJpbmQobmV3IHRoaXMuX3cuUmVnRXhwKCdeKCcgKyAodmFsaWRhdGlvbiA/IHZhbGlkYXRpb24gOiAnLisnKSArICcpJCcsICdpJykpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbGlkYXRpb24gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gY3VycmVudC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBjaGlsZHJlblswXS5ub2RlTmFtZSA9PT0gY3VycmVudC5ub2RlTmFtZSAmJiB2YWxpZGF0aW9uKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRlbXAuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQucmVtb3ZlQ2hpbGQodGVtcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjdXJyZW50LmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGN1cnJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhIGVtcHR5IGNoaWxkIG5vZGUgb2YgYXJndW1lbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfG51bGx9IG5vdFJlbW92ZU5vZGUgRG8gbm90IHJlbW92ZSBub2RlXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVtcHR5Tm9kZTogZnVuY3Rpb24gKGVsZW1lbnQsIG5vdFJlbW92ZU5vZGUpIHtcclxuICAgICAgICBjb25zdCBpbnN0ID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKG5vdFJlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgbm90UmVtb3ZlTm9kZSA9IGluc3QuZ2V0UGFyZW50RWxlbWVudChub3RSZW1vdmVOb2RlLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGN1cnJlbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGluc3QuX25vdFRleHROb2RlKGN1cnJlbnQpIHx8IGN1cnJlbnQgPT09IG5vdFJlbW92ZU5vZGUgfHwgaW5zdC5pc05vbkVkaXRhYmxlKGN1cnJlbnQpKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IGVsZW1lbnQgJiYgaW5zdC5vbmx5WmVyb1dpZHRoU3BhY2UoY3VycmVudC50ZXh0Q29udGVudCkgJiYgKCFjdXJyZW50LmZpcnN0Q2hpbGQgfHwgIWluc3QuaXNCcmVhayhjdXJyZW50LmZpcnN0Q2hpbGQpKSAmJiAhY3VycmVudC5xdWVyeVNlbGVjdG9yKGluc3QuX2FsbG93ZWRFbXB0eU5vZGVMaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnQuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoLCByID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltpICsgcl0gfHwgaW5zdC5pc0NvbXBvbmVudChjaGlsZHJlbltpICsgcl0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICByICs9IHJlY3Vyc2lvbkZ1bmMoY2hpbGRyZW5baSArIHJdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSBlbGVtZW50LmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIGluIEhUTUwgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSFRNTCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGh0bWxSZW1vdmVXaGl0ZVNwYWNlOiBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgIGlmICghaHRtbCkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBodG1sLnRyaW0oKS5yZXBsYWNlKC88XFwvPyg/IXN0cm9uZ3xzcGFufGZvbnR8Ynx2YXJ8aXxlbXx1fGluc3xzfHN0cmlrZXxkZWx8c3VifHN1cHxtYXJrfGF8bGFiZWx8Y29kZSlbXj5ePF0rPlxccysoPz08KS9pZywgZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG0udHJpbSgpOyB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU29ydCBhIGVsZW1lbnQgYXJyYXkgYnkgZGVwdGggb2YgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IEFycmF5IG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBkZXMgdHJ1ZTogZGVzY2VuZGluZyBvcmRlciAvIGZhbHNlOiBhc2NlbmRpbmcgb3JkZXJcclxuICAgICAqL1xyXG4gICAgc29ydEJ5RGVwdGg6IGZ1bmN0aW9uIChhcnJheSwgZGVzKSB7XHJcbiAgICAgICAgY29uc3QgdCA9ICFkZXMgPyAtMSA6IDE7XHJcbiAgICAgICAgY29uc3QgZiA9IHQgKiAtMTtcclxuXHJcbiAgICAgICAgYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNMaXN0Q2VsbChhKSB8fCAhdGhpcy5pc0xpc3RDZWxsKGIpKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgYSA9IHRoaXMuZ2V0RWxlbWVudERlcHRoKGEpO1xyXG4gICAgICAgICAgICBiID0gdGhpcy5nZXRFbGVtZW50RGVwdGgoYik7XHJcbiAgICAgICAgICAgIHJldHVybiBhID4gYiA/IHQgOiBhIDwgYiA/IGYgOiAwO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE5vZGVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB3aXRob3V0IG1vZGlmaWNhdGlvbiB3aGVuIGNoYW5naW5nIHRleHQgbm9kZXNcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pc0lnbm9yZU5vZGVDaGFuZ2U6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gMyAmJiAodGhpcy5pc05vbkVkaXRhYmxlKGVsZW1lbnQpIHx8ICF0aGlzLmlzVGV4dFN0eWxlRWxlbWVudChlbGVtZW50KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE5vZGVzIHRoYXQgbXVzdCByZW1haW4gdW5kZXRhY2hlZCB3aGVuIGNoYW5naW5nIHRleHQgbm9kZXMgKEEsIExhYmVsLCBDb2RlLCBTcGFuOmZvbnQtc2l6ZSlcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IGVsZW1lbnQgRWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaXNNYWludGFpbmVkTm9kZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAzICYmIC9eKGF8bGFiZWx8Y29kZSkkL2kudGVzdCh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogZWxlbWVudC5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE5vZGUgd2l0aCBmb250LXNpemUgc3R5bGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pc1NpemVOb2RlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IDMgJiYgdGhpcy5pc1RleHRTdHlsZUVsZW1lbnQoZWxlbWVudCkgJiYgISFlbGVtZW50LnN0eWxlLmZvbnRTaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBOb2RlcyB3aXRob3V0IHRleHRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9ub3RUZXh0Tm9kZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAzICYmICh0aGlzLmlzQ29tcG9uZW50KGVsZW1lbnQpIHx8IC9eKGJyfGlucHV0fHNlbGVjdHxjYW52YXN8aW1nfGlmcmFtZXxhdWRpb3x2aWRlbykkL2kudGVzdCh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogZWxlbWVudC5ub2RlTmFtZSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayBkaXNhbGxvd2VkIHRhZ3NcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9kaXNhbGxvd2VkVGFnczogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gL14obWV0YXxzY3JpcHR8bGlua3xzdHlsZXxbYS16XStcXDpbYS16XSspJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSB3aGl0ZWxpc3QgUmVnRXhwIG9iamVjdC5cclxuICAgICAqIFJldHVybiBSZWdFeHAgZm9ybWF0OiBuZXcgUmVnRXhwKFwiPFxcXFwvP1xcXFxiKD8hXCIgKyBsaXN0ICsgXCIpXFxcXGJbXj5ePF0qKz5cIiwgXCJnaVwiKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGxpc3QgVGFncyBsaXN0IChcImJyfHB8ZGl2fHByZS4uLlwiKVxyXG4gICAgICogQHJldHVybnMge1JlZ0V4cH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlVGFnc1doaXRlbGlzdDogZnVuY3Rpb24gKGxpc3QpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnPFxcXFwvP1xcXFxiKD8hXFxcXGInICsgbGlzdC5yZXBsYWNlKC9cXHwvZywgJ1xcXFxifFxcXFxiJykgKyAnXFxcXGIpW14+XSo+JywgJ2dpJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEZpeCB0YWdzIHRoYXQgZG8gbm90IGZpdCB0aGUgZWRpdG9yIGZvcm1hdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZG9jdW1lbnRGcmFnbWVudCBEb2N1bWVudCBmcmFnbWVudCBcIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcIiAobm9kZVR5cGUgPT09IDExKVxyXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IGh0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCBFZGl0b3IgdGFncyB3aGl0ZWxpc3QgKGNvcmUuX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cClcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jb25zaXN0ZW5jeUNoZWNrT2ZIVE1MOiBmdW5jdGlvbiAoZG9jdW1lbnRGcmFnbWVudCwgaHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwKSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXQgaXMgY2FuIHVzZSBcIi5jaGlsZHJlbih1dGlsLmdldExpc3RDaGlsZHJlbilcIiB0byBleGNsdWRlIHRleHQgbm9kZXMsIGJ1dCBcImRvY3VtZW50RnJhZ21lbnQuY2hpbGRyZW5cIiBpcyBub3Qgc3VwcG9ydGVkIGluIElFLlxyXG4gICAgICAgICAqIFNvIGNoZWNrIHRoZSBub2RlIHR5cGUgYW5kIGV4Y2x1ZGUgdGhlIHRleHQgbm8gKGN1cnJlbnQubm9kZVR5cGUgIT09IDEpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlVGFncyA9IFtdLCBlbXB0eVRhZ3MgPSBbXSwgd3JvbmdMaXN0ID0gW10sIHdpdGhvdXRGb3JtYXRDZWxscyA9IFtdO1xyXG5cclxuICAgICAgICAvLyB3cm9uZyBwb3NpdGlvblxyXG4gICAgICAgIGNvbnN0IHdyb25nVGFncyA9IHRoaXMuZ2V0TGlzdENoaWxkTm9kZXMoZG9jdW1lbnRGcmFnbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQubm9kZVR5cGUgIT09IDEpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdoaXRlIGxpc3RcclxuICAgICAgICAgICAgaWYgKCFodG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHAudGVzdChjdXJyZW50Lm5vZGVOYW1lKSAmJiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwICYmIHRoaXMuaXNOb3RDaGVja2luZ05vZGUoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZVRhZ3MucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbnJ0YWcgPSAhdGhpcy5nZXRQYXJlbnRFbGVtZW50KGN1cnJlbnQsIHRoaXMuaXNOb3RDaGVja2luZ05vZGUpO1xyXG4gICAgICAgICAgICAvLyBlbXB0eSB0YWdzXHJcbiAgICAgICAgICAgIGlmICgoIXRoaXMuaXNUYWJsZShjdXJyZW50KSAmJiAhdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpKSAmJiAodGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc1JhbmdlRm9ybWF0RWxlbWVudChjdXJyZW50KSB8fCB0aGlzLmlzVGV4dFN0eWxlRWxlbWVudChjdXJyZW50KSkgJiYgY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiBucnRhZykge1xyXG4gICAgICAgICAgICAgICAgZW1wdHlUYWdzLnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHdyb25nIGxpc3RcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0KGN1cnJlbnQucGFyZW50Tm9kZSkgJiYgIXRoaXMuaXNMaXN0KGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdENlbGwoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHdyb25nTGlzdC5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB0YWJsZSBjZWxsc1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0NlbGwoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZlbCA9IGN1cnJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNGb3JtYXRFbGVtZW50KGZlbCkgJiYgIXRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZmVsKSAmJiAhdGhpcy5pc0NvbXBvbmVudChmZWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2l0aG91dEZvcm1hdENlbGxzLnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjdXJyZW50LnBhcmVudE5vZGUgIT09IGRvY3VtZW50RnJhZ21lbnQgJiZcclxuICAgICAgICAgICAgICh0aGlzLmlzRm9ybWF0RWxlbWVudChjdXJyZW50KSB8fCB0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpIHx8IHRoaXMuaXNMaXN0KGN1cnJlbnQpKSAmJlxyXG4gICAgICAgICAgICAgIXRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudC5wYXJlbnROb2RlKSAmJiAhdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQucGFyZW50Tm9kZSkgJiZcclxuICAgICAgICAgICAgICF0aGlzLmdldFBhcmVudEVsZW1lbnQoY3VycmVudCwgdGhpcy5pc0NvbXBvbmVudCkgJiYgbnJ0YWc7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZW1vdmVUYWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShyZW1vdmVUYWdzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgY2hlY2tUYWdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHdyb25nVGFncy5sZW5ndGgsIHQsIHA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gd3JvbmdUYWdzW2ldO1xyXG4gICAgICAgICAgICBwID0gdC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBpZiAoIXAgfHwgIXAucGFyZW50Tm9kZSkgY29udGludWU7XHJcbiAgICAgICAgICAgIHAucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCwgcCk7XHJcbiAgICAgICAgICAgIGNoZWNrVGFncy5wdXNoKHApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoZWNrVGFncy5sZW5ndGgsIHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gY2hlY2tUYWdzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbmx5WmVyb1dpZHRoU3BhY2UodC50ZXh0Q29udGVudC50cmltKCkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBlbXB0eVRhZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGVtcHR5VGFnc1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gd3JvbmdMaXN0Lmxlbmd0aCwgdCwgdHAsIGNoaWxkcmVuLCBwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IHdyb25nTGlzdFtpXTtcclxuXHJcbiAgICAgICAgICAgIHRwID0gdGhpcy5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IHQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB0cC5hcHBlbmRDaGlsZChjaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHAgPSB0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmICghcCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHAuaW5zZXJ0QmVmb3JlKHRwLCB0KTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHdpdGhvdXRGb3JtYXRDZWxscy5sZW5ndGgsIHQsIGY7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gd2l0aG91dEZvcm1hdENlbGxzW2ldO1xyXG4gICAgICAgICAgICBmID0gdGhpcy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgZi5pbm5lckhUTUwgPSAodC50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID09PSAwICYmIHQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSA/ICc8YnI+JyA6IHQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICB0LmlubmVySFRNTCA9IGYub3V0ZXJIVE1MO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3NldERlZmF1bHRPcHRpb25TdHlsZTogZnVuY3Rpb24gKG9wdGlvbnMsIGRlZmF1bHRTdHlsZSkge1xyXG4gICAgICAgIGxldCBvcHRpb25TdHlsZSA9ICcnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmhlaWdodCkgb3B0aW9uU3R5bGUgKz0gJ2hlaWdodDonICsgb3B0aW9ucy5oZWlnaHQgKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMubWluSGVpZ2h0KSBvcHRpb25TdHlsZSArPSAnbWluLWhlaWdodDonICsgb3B0aW9ucy5taW5IZWlnaHQgKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMubWF4SGVpZ2h0KSBvcHRpb25TdHlsZSArPSAnbWF4LWhlaWdodDonICsgb3B0aW9ucy5tYXhIZWlnaHQgKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24pIG9wdGlvblN0eWxlICs9ICdwb3NpdGlvbjonICsgb3B0aW9ucy5wb3NpdGlvbiArICc7JztcclxuICAgICAgICBpZiAob3B0aW9ucy53aWR0aCkgb3B0aW9uU3R5bGUgKz0gJ3dpZHRoOicgKyBvcHRpb25zLndpZHRoICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLm1pbldpZHRoKSBvcHRpb25TdHlsZSArPSAnbWluLXdpZHRoOicgKyBvcHRpb25zLm1pbldpZHRoICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLm1heFdpZHRoKSBvcHRpb25TdHlsZSArPSAnbWF4LXdpZHRoOicgKyBvcHRpb25zLm1heFdpZHRoICsgJzsnO1xyXG5cclxuICAgICAgICBsZXQgdG9wID0gJycsIGZyYW1lID0gJycsIGVkaXRvciA9ICcnO1xyXG4gICAgICAgIGRlZmF1bHRTdHlsZSA9IG9wdGlvblN0eWxlICsgZGVmYXVsdFN0eWxlO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlQXJyID0gZGVmYXVsdFN0eWxlLnNwbGl0KCc7Jyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlQXJyLmxlbmd0aCwgczsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBzdHlsZUFycltpXS50cmltKCk7XHJcbiAgICAgICAgICAgIGlmICghcykgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICgvXihtaW4tfG1heC0pP3dpZHRoXFxzKjovLnRlc3QocykgfHwgL14oei1pbmRleHxwb3NpdGlvbilcXHMqOi8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgdG9wICs9IHMgKyAnOyc7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoL14obWluLXxtYXgtKT9oZWlnaHRcXHMqOi8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9eaGVpZ2h0Ly50ZXN0KHMpICYmIHMuc3BsaXQoJzonKVsxXS50cmltKCkgPT09ICdhdXRvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVpZ2h0ID0gJ2F1dG8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZnJhbWUgKz0gcyArICc7JztcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVkaXRvciArPSBzICsgJzsnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiB0b3AsXHJcbiAgICAgICAgICAgIGZyYW1lOiBmcmFtZSxcclxuICAgICAgICAgICAgZWRpdG9yOiBlZGl0b3JcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0SWZyYW1lRG9jdW1lbnQ6IGZ1bmN0aW9uIChmcmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGZyYW1lLnNldEF0dHJpYnV0ZSgnc2Nyb2xsaW5nJywgJ2F1dG8nKTtcclxuICAgICAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuaGVhZC5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8bWV0YSBjaGFyc2V0PVwidXRmLThcIiAvPicgK1xyXG4gICAgICAgICAgICAnPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xXCI+JyArXHJcbiAgICAgICAgICAgIHRoaXMuX3NldElmcmFtZUNzc1RhZ3Mob3B0aW9ucyk7XHJcbiAgICAgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gb3B0aW9ucy5fZWRpdGFibGVDbGFzcztcclxuICAgICAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0SWZyYW1lQ3NzVGFnczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBsaW5rTmFtZXMgPSBvcHRpb25zLmlmcmFtZUNTU0ZpbGVOYW1lO1xyXG4gICAgICAgIGNvbnN0IHdSZWdFeHAgPSB0aGlzLl93LlJlZ0V4cDtcclxuICAgICAgICBsZXQgdGFnU3RyaW5nID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGYgPSAwLCBsZW4gPSBsaW5rTmFtZXMubGVuZ3RoLCBwYXRoOyBmIDwgbGVuOyBmKyspIHtcclxuICAgICAgICAgICAgcGF0aCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKC8oXmh0dHBzPzpcXC9cXC8pfCheZGF0YTp0ZXh0XFwvY3NzLCkvLnRlc3QobGlua05hbWVzW2ZdKSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGxpbmtOYW1lc1tmXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBDU1NGaWxlTmFtZSA9IG5ldyB3UmVnRXhwKCcoXnwuKltcXFxcL10pJyArIGxpbmtOYW1lc1tmXSArICcoXFxcXC4uKyk/XFxcXC5jc3MoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKSwgaSA9IDAsIGxlbiA9IGMubGVuZ3RoLCBzdHlsZVRhZzsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVUYWcgPSBjW2ldLmhyZWYubWF0Y2goQ1NTRmlsZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVRhZykgcGF0aC5wdXNoKHN0eWxlVGFnWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXRoIHx8IHBhdGgubGVuZ3RoID09PSAwKSB0aHJvdyAnW1NVTkVESVRPUi5jb25zdHJ1Y3Rvci5pZnJhbWUuZmFpbF0gVGhlIHN1bmVkaXRvciBDU1MgZmlsZXMgaW5zdGFsbGF0aW9uIHBhdGggY291bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuIFBsZWFzZSBzZXQgdGhlIG9wdGlvbiBwcm9wZXJ0eSBcImlmcmFtZUNTU0ZpbGVOYW1lXCIgYmVmb3JlIGNyZWF0aW5nIGVkaXRvciBpbnN0YW5jZXMuJztcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXRoLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0YWdTdHJpbmcgKz0gJzxsaW5rIGhyZWY9XCInICsgcGF0aFtpXSArICdcIiByZWw9XCJzdHlsZXNoZWV0XCI+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhZ1N0cmluZyArIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nID8gJzxzdHlsZT5cXG4vKiogSWZyYW1lIGhlaWdodCBhdXRvICovXFxuYm9keXtoZWlnaHQ6IG1pbi1jb250ZW50OyBvdmVyZmxvdzogaGlkZGVuO31cXG48L3N0eWxlPicgOiAnJyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1dGlsOyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQgX2ljb25zIGZyb20gJy4uL2Fzc2V0cy9kZWZhdWx0SWNvbnMnO1xyXG5pbXBvcnQgX2RlZmF1bHRMYW5nIGZyb20gJy4uL2xhbmcvZW4nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL3V0aWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gZG9jdW1lbnQgY3JlYXRlXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGV4dGFyZWFcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnNcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgICBjb25zdCBkb2MgPSBkb2N1bWVudDtcclxuXHJcbiAgICAgICAgLyoqIC0tLSBpbml0IG9wdGlvbnMgLS0tICovXHJcbiAgICAgICAgdGhpcy5faW5pdE9wdGlvbnMoZWxlbWVudCwgb3B0aW9ucyk7XHJcbiAgICBcclxuICAgICAgICAvLyBzdW5lZGl0b3IgZGl2XHJcbiAgICAgICAgY29uc3QgdG9wX2RpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICB0b3BfZGl2LmNsYXNzTmFtZSA9ICdzdW4tZWRpdG9yJyArIChvcHRpb25zLnJ0bCA/ICcgc2UtcnRsJyA6ICcnKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgdG9wX2Rpdi5pZCA9ICdzdW5lZGl0b3JfJyArIGVsZW1lbnQuaWQ7XHJcbiAgICBcclxuICAgICAgICAvLyByZWxhdGl2ZSBkaXZcclxuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICByZWxhdGl2ZS5jbGFzc05hbWUgPSAnc2UtY29udGFpbmVyJztcclxuICAgIFxyXG4gICAgICAgIC8vIHRvb2xiYXJcclxuICAgICAgICBjb25zdCB0b29sX2JhciA9IHRoaXMuX2NyZWF0ZVRvb2xCYXIoZG9jLCBvcHRpb25zLmJ1dHRvbkxpc3QsIG9wdGlvbnMucGx1Z2lucywgb3B0aW9ucyk7XHJcbiAgICAgICAgdG9vbF9iYXIuZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgaWYgKHRvb2xfYmFyLnBsdWdpbkNhbGxCdXR0b25zLm1hdGgpIHRoaXMuX2NoZWNrS2F0ZXhNYXRoKG9wdGlvbnMua2F0ZXgpO1xyXG4gICAgICAgIGNvbnN0IGFycm93ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGFycm93LmNsYXNzTmFtZSA9ICdzZS1hcnJvdyc7XHJcblxyXG4gICAgICAgIC8vIHN0aWNreSB0b29sYmFyIGR1bW15XHJcbiAgICAgICAgY29uc3Qgc3RpY2t5X2R1bW15ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIHN0aWNreV9kdW1teS5jbGFzc05hbWUgPSAnc2UtdG9vbGJhci1zdGlja3ktZHVtbXknO1xyXG4gICAgXHJcbiAgICAgICAgLy8gaW5uZXIgZWRpdG9yIGRpdlxyXG4gICAgICAgIGNvbnN0IGVkaXRvcl9kaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgZWRpdG9yX2Rpdi5jbGFzc05hbWUgPSAnc2Utd3JhcHBlcic7XHJcblxyXG4gICAgICAgIC8qKiAtLS0gaW5pdCBlbGVtZW50cyBhbmQgY3JlYXRlIGJvdHRvbSBiYXIgLS0tICovXHJcbiAgICAgICAgY29uc3QgaW5pdEVsZW1lbnRzID0gdGhpcy5faW5pdEVsZW1lbnRzKG9wdGlvbnMsIHRvcF9kaXYsIHRvb2xfYmFyLmVsZW1lbnQsIGFycm93KTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQmFyID0gaW5pdEVsZW1lbnRzLmJvdHRvbUJhcjtcclxuICAgICAgICBjb25zdCB3eXNpd3lnX2RpdiA9IGluaXRFbGVtZW50cy53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJfc3BhbiA9IGluaXRFbGVtZW50cy5wbGFjZWhvbGRlcjtcclxuICAgICAgICBsZXQgdGV4dGFyZWEgPSBpbml0RWxlbWVudHMuY29kZVZpZXc7XHJcblxyXG4gICAgICAgIC8vIHJlc2l6aW5nIGJhclxyXG4gICAgICAgIGNvbnN0IHJlc2l6aW5nX2JhciA9IGJvdHRvbUJhci5yZXNpemluZ0JhcjtcclxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gYm90dG9tQmFyLm5hdmlnYXRpb247XHJcbiAgICAgICAgY29uc3QgY2hhcl93cmFwcGVyID0gYm90dG9tQmFyLmNoYXJXcmFwcGVyO1xyXG4gICAgICAgIGNvbnN0IGNoYXJfY291bnRlciA9IGJvdHRvbUJhci5jaGFyQ291bnRlcjtcclxuICAgIFxyXG4gICAgICAgIC8vIGxvYWRpbmcgYm94XHJcbiAgICAgICAgY29uc3QgbG9hZGluZ19ib3ggPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbG9hZGluZ19ib3guY2xhc3NOYW1lID0gJ3NlLWxvYWRpbmctYm94IHN1bi1lZGl0b3ItY29tbW9uJztcclxuICAgICAgICBsb2FkaW5nX2JveC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInNlLWxvYWRpbmctZWZmZWN0XCI+PC9kaXY+JztcclxuXHJcbiAgICAgICAgLy8gZW50ZXIgbGluZVxyXG4gICAgICAgIGNvbnN0IGxpbmVfYnJlYWtlciA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBsaW5lX2JyZWFrZXIuY2xhc3NOYW1lID0gJ3NlLWxpbmUtYnJlYWtlcic7XHJcbiAgICAgICAgbGluZV9icmVha2VyLmlubmVySFRNTCA9ICc8YnV0dG9uIGNsYXNzPVwic2UtYnRuXCI+JyArIG9wdGlvbnMuaWNvbnMubGluZV9icmVhayArICc8L2J1dHRvbj4nO1xyXG4gICAgICAgIGNvbnN0IGxpbmVfYnJlYWtlcl90ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpbmVfYnJlYWtlcl90LmNsYXNzTmFtZSArPSAnc2UtbGluZS1icmVha2VyLWNvbXBvbmVudCc7XHJcbiAgICAgICAgY29uc3QgbGluZV9icmVha2VyX2IgPSBsaW5lX2JyZWFrZXJfdC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgbGluZV9icmVha2VyX3QuaW5uZXJIVE1MID0gbGluZV9icmVha2VyX2IuaW5uZXJIVE1MID0gb3B0aW9ucy5pY29ucy5saW5lX2JyZWFrO1xyXG4gICAgXHJcbiAgICAgICAgLy8gcmVzaXplIG9wZXJhdGlvbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAgY29uc3QgcmVzaXplX2JhY2sgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgcmVzaXplX2JhY2suY2xhc3NOYW1lID0gJ3NlLXJlc2l6aW5nLWJhY2snO1xyXG5cclxuICAgICAgICAvLyB0b29sYmFyIGNvbnRhaW5lclxyXG4gICAgICAgIGNvbnN0IHRvb2xiYXJDb250YWluZXIgPSBvcHRpb25zLnRvb2xiYXJDb250YWluZXI7XHJcbiAgICAgICAgaWYgKHRvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdG9vbGJhckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b29sX2Jhci5lbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBlZGl0b3JfZGl2LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcclxuICAgICAgICBpZiAocGxhY2Vob2xkZXJfc3BhbikgZWRpdG9yX2Rpdi5hcHBlbmRDaGlsZChwbGFjZWhvbGRlcl9zcGFuKTtcclxuICAgICAgICBpZiAoIXRvb2xiYXJDb250YWluZXIpIHJlbGF0aXZlLmFwcGVuZENoaWxkKHRvb2xfYmFyLmVsZW1lbnQpO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKHN0aWNreV9kdW1teSk7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQoZWRpdG9yX2Rpdik7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXplX2JhY2spO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKGxvYWRpbmdfYm94KTtcclxuICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5lX2JyZWFrZXIpO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKGxpbmVfYnJlYWtlcl90KTtcclxuICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5lX2JyZWFrZXJfYik7XHJcbiAgICAgICAgaWYgKHJlc2l6aW5nX2JhcikgcmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXppbmdfYmFyKTtcclxuICAgICAgICB0b3BfZGl2LmFwcGVuZENoaWxkKHJlbGF0aXZlKTtcclxuXHJcbiAgICAgICAgdGV4dGFyZWEgPSB0aGlzLl9jaGVja0NvZGVNaXJyb3Iob3B0aW9ucywgdGV4dGFyZWEpO1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29uc3RydWN0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIF90b3A6IHRvcF9kaXYsXHJcbiAgICAgICAgICAgICAgICBfcmVsYXRpdmU6IHJlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgX3Rvb2xCYXI6IHRvb2xfYmFyLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBfbWVudVRyYXk6IHRvb2xfYmFyLl9tZW51VHJheSxcclxuICAgICAgICAgICAgICAgIF9lZGl0b3JBcmVhOiBlZGl0b3JfZGl2LFxyXG4gICAgICAgICAgICAgICAgX3d5c2l3eWdBcmVhOiB3eXNpd3lnX2RpdixcclxuICAgICAgICAgICAgICAgIF9jb2RlQXJlYTogdGV4dGFyZWEsXHJcbiAgICAgICAgICAgICAgICBfcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyX3NwYW4sXHJcbiAgICAgICAgICAgICAgICBfcmVzaXppbmdCYXI6IHJlc2l6aW5nX2JhcixcclxuICAgICAgICAgICAgICAgIF9uYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgX2NoYXJXcmFwcGVyOiBjaGFyX3dyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBfY2hhckNvdW50ZXI6IGNoYXJfY291bnRlcixcclxuICAgICAgICAgICAgICAgIF9sb2FkaW5nOiBsb2FkaW5nX2JveCxcclxuICAgICAgICAgICAgICAgIF9saW5lQnJlYWtlcjogbGluZV9icmVha2VyLFxyXG4gICAgICAgICAgICAgICAgX2xpbmVCcmVha2VyX3Q6IGxpbmVfYnJlYWtlcl90LFxyXG4gICAgICAgICAgICAgICAgX2xpbmVCcmVha2VyX2I6IGxpbmVfYnJlYWtlcl9iLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZUJhY2s6IHJlc2l6ZV9iYWNrLFxyXG4gICAgICAgICAgICAgICAgX3N0aWNreUR1bW15OiBzdGlja3lfZHVtbXksXHJcbiAgICAgICAgICAgICAgICBfYXJyb3c6IGFycm93XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6IHRvb2xfYmFyLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIHBsdWdpbkNhbGxCdXR0b25zOiB0b29sX2Jhci5wbHVnaW5DYWxsQnV0dG9ucyxcclxuICAgICAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zOiB0b29sX2Jhci5yZXNwb25zaXZlQnV0dG9uc1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBDb2RlTWlycm9yIG9wdGlvbiB0byBhcHBseSB0aGUgQ29kZU1pcnJvciBhbmQgcmV0dXJuIHRoZSBDb2RlTWlycm9yIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRleHRhcmVhIHRleHRhcmVhIGVsZW1lbnRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jaGVja0NvZGVNaXJyb3I6IGZ1bmN0aW9uIChvcHRpb25zLCB0ZXh0YXJlYSkge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY21PcHRpb25zID0gW3tcclxuICAgICAgICAgICAgICAgIG1vZGU6ICdodG1sbWl4ZWQnLFxyXG4gICAgICAgICAgICAgICAgaHRtbE1vZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZVxyXG4gICAgICAgICAgICB9LCAob3B0aW9ucy5jb2RlTWlycm9yLm9wdGlvbnMgfHwge30pXS5yZWR1Y2UoZnVuY3Rpb24gKGluaXQsIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmhhc093bihvcHRpb24sIGtleSkpIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluaXQ7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICBjbU9wdGlvbnMudmlld3BvcnRNYXJnaW4gPSBJbmZpbml0eTtcclxuICAgICAgICAgICAgICAgIGNtT3B0aW9ucy5oZWlnaHQgPSAnYXV0byc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNtID0gb3B0aW9ucy5jb2RlTWlycm9yLnNyYy5mcm9tVGV4dEFyZWEodGV4dGFyZWEsIGNtT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gdGV4dGFyZWEuc3R5bGUuY3NzVGV4dDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvciA9IGNtO1xyXG4gICAgICAgICAgICB0ZXh0YXJlYSA9IGNtLmRpc3BsYXkud3JhcHBlcjtcclxuICAgICAgICAgICAgdGV4dGFyZWEuY2xhc3NOYW1lICs9ICcgc2Utd3JhcHBlci1jb2RlLW1pcnJvcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dGFyZWE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIGZvciBhIGthdGV4IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBrYXRleCBrYXRleCBvYmplY3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jaGVja0thdGV4TWF0aDogZnVuY3Rpb24gKGthdGV4KSB7XHJcbiAgICAgICAgaWYgKCFrYXRleCkgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLmZhaWxdIFRvIHVzZSB0aGUgbWF0aCBidXR0b24geW91IG5lZWQgdG8gYWRkIGEgXCJrYXRleFwiIG9iamVjdCB0byB0aGUgb3B0aW9ucy4nKTtcclxuXHJcbiAgICAgICAgY29uc3Qga2F0ZXhPcHRpb25zID0gW3tcclxuICAgICAgICAgICAgdGhyb3dPbkVycm9yOiBmYWxzZSxcclxuICAgICAgICB9LCAoa2F0ZXgub3B0aW9ucyB8fCB7fSldLnJlZHVjZShmdW5jdGlvbiAoaW5pdCwgb3B0aW9uKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmhhc093bihvcHRpb24sIGtleSkpIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpbml0O1xyXG4gICAgICAgIH0sIHt9KTtcclxuXHJcbiAgICAgICAga2F0ZXgub3B0aW9ucyA9IGthdGV4T3B0aW9ucztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQWRkIG9yIHJlc2V0IG9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtZXJnZU9wdGlvbnMgTmV3IG9wdGlvbnMgcHJvcGVydHlcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0IG9mIGNvcmVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcmlnaW5PcHRpb25zIE9yaWdpbiBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBwbHVnaW5DYWxsQnV0dG9uc1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3NldE9wdGlvbnM6IGZ1bmN0aW9uIChtZXJnZU9wdGlvbnMsIGNvbnRleHQsIG9yaWdpbk9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLl9pbml0T3B0aW9ucyhjb250ZXh0LmVsZW1lbnQub3JpZ2luRWxlbWVudCwgbWVyZ2VPcHRpb25zKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBlbC5yZWxhdGl2ZTtcclxuICAgICAgICBjb25zdCBlZGl0b3JBcmVhID0gZWwuZWRpdG9yQXJlYTtcclxuICAgICAgICBjb25zdCBpc05ld1Rvb2xiYXJDb250YWluZXIgPSBtZXJnZU9wdGlvbnMudG9vbGJhckNvbnRhaW5lciAmJiBtZXJnZU9wdGlvbnMudG9vbGJhckNvbnRhaW5lciAhPT0gb3JpZ2luT3B0aW9ucy50b29sYmFyQ29udGFpbmVyO1xyXG4gICAgICAgIGNvbnN0IGlzTmV3VG9vbGJhciA9IG1lcmdlT3B0aW9ucy5sYW5nICE9PSBvcmlnaW5PcHRpb25zLmxhbmcgfHwgbWVyZ2VPcHRpb25zLmJ1dHRvbkxpc3QgIT09IG9yaWdpbk9wdGlvbnMuYnV0dG9uTGlzdCB8fCBtZXJnZU9wdGlvbnMubW9kZSAhPT0gb3JpZ2luT3B0aW9ucy5tb2RlIHx8IGlzTmV3VG9vbGJhckNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgY29uc3QgdG9vbF9iYXIgPSB0aGlzLl9jcmVhdGVUb29sQmFyKGRvY3VtZW50LCAoaXNOZXdUb29sYmFyID8gbWVyZ2VPcHRpb25zLmJ1dHRvbkxpc3QgOiBvcmlnaW5PcHRpb25zLmJ1dHRvbkxpc3QpLCBtZXJnZU9wdGlvbnMucGx1Z2lucywgbWVyZ2VPcHRpb25zKTtcclxuICAgICAgICBpZiAodG9vbF9iYXIucGx1Z2luQ2FsbEJ1dHRvbnMubWF0aCkgdGhpcy5fY2hlY2tLYXRleE1hdGgobWVyZ2VPcHRpb25zLmthdGV4KTtcclxuICAgICAgICBjb25zdCBhcnJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGFycm93LmNsYXNzTmFtZSA9ICdzZS1hcnJvdyc7XHJcblxyXG4gICAgICAgIGlmIChpc05ld1Rvb2xiYXIpIHtcclxuICAgICAgICAgICAgdG9vbF9iYXIuZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIC8vIHRvb2xiYXIgY29udGFpbmVyXHJcbiAgICAgICAgICAgIGlmIChpc05ld1Rvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIG1lcmdlT3B0aW9ucy50b29sYmFyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2xfYmFyLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgZWwudG9vbGJhci5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsLnRvb2xiYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWwudG9vbGJhci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZCh0b29sX2Jhci5lbGVtZW50LCBlbC50b29sYmFyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWwudG9vbGJhciA9IHRvb2xfYmFyLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGVsLl9tZW51VHJheSA9IHRvb2xfYmFyLl9tZW51VHJheTtcclxuICAgICAgICAgICAgZWwuX2Fycm93ID0gYXJyb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGluaXRFbGVtZW50cyA9IHRoaXMuX2luaXRFbGVtZW50cyhtZXJnZU9wdGlvbnMsIGVsLnRvcEFyZWEsIChpc05ld1Rvb2xiYXIgPyB0b29sX2Jhci5lbGVtZW50IDogZWwudG9vbGJhciksIGFycm93KTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQmFyID0gaW5pdEVsZW1lbnRzLmJvdHRvbUJhcjtcclxuICAgICAgICBjb25zdCB3eXNpd3lnRnJhbWUgPSBpbml0RWxlbWVudHMud3lzaXd5Z0ZyYW1lO1xyXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyX3NwYW4gPSBpbml0RWxlbWVudHMucGxhY2Vob2xkZXI7XHJcbiAgICAgICAgbGV0IGNvZGUgPSBpbml0RWxlbWVudHMuY29kZVZpZXc7XHJcblxyXG4gICAgICAgIGlmIChlbC5yZXNpemluZ0JhcikgcmVsYXRpdmUucmVtb3ZlQ2hpbGQoZWwucmVzaXppbmdCYXIpO1xyXG4gICAgICAgIGlmIChib3R0b21CYXIucmVzaXppbmdCYXIpIHJlbGF0aXZlLmFwcGVuZENoaWxkKGJvdHRvbUJhci5yZXNpemluZ0Jhcik7XHJcblxyXG4gICAgICAgIGVkaXRvckFyZWEuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChjb2RlKTtcclxuICAgICAgICBpZiAocGxhY2Vob2xkZXJfc3BhbikgZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChwbGFjZWhvbGRlcl9zcGFuKTtcclxuXHJcbiAgICAgICAgY29kZSA9IHRoaXMuX2NoZWNrQ29kZU1pcnJvcihtZXJnZU9wdGlvbnMsIGNvZGUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGVsLnJlc2l6aW5nQmFyID0gYm90dG9tQmFyLnJlc2l6aW5nQmFyO1xyXG4gICAgICAgIGVsLm5hdmlnYXRpb24gPSBib3R0b21CYXIubmF2aWdhdGlvbjtcclxuICAgICAgICBlbC5jaGFyV3JhcHBlciA9IGJvdHRvbUJhci5jaGFyV3JhcHBlcjtcclxuICAgICAgICBlbC5jaGFyQ291bnRlciA9IGJvdHRvbUJhci5jaGFyQ291bnRlcjtcclxuICAgICAgICBlbC53eXNpd3lnRnJhbWUgPSB3eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgZWwuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgZWwucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcl9zcGFuO1xyXG5cclxuICAgICAgICBpZiAobWVyZ2VPcHRpb25zLnJ0bCkgdXRpbC5hZGRDbGFzcyhlbC50b3BBcmVhLCAnc2UtcnRsJyk7XHJcbiAgICAgICAgZWxzZSB1dGlsLnJlbW92ZUNsYXNzKGVsLnRvcEFyZWEsICdzZS1ydGwnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY2FsbEJ1dHRvbnM6IHRvb2xfYmFyLnBsdWdpbkNhbGxCdXR0b25zLFxyXG4gICAgICAgICAgICBwbHVnaW5zOiB0b29sX2Jhci5wbHVnaW5zLFxyXG4gICAgICAgICAgICB0b29sYmFyOiB0b29sX2JhclxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemUgcHJvcGVydHkgb2Ygc3VuZWRpdG9yIGVsZW1lbnRzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRvcERpdiBTdW5lZGl0b3IgdG9wIGRpdlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSB0b29sQmFyIFRvb2wgYmFyXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRvb2xCYXJBcnJvdyBUb29sIGJhciBhcnJvdyAoYmFsbG9vbiBlZGl0b3IpXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBCb3R0b20gYmFyIGVsZW1lbnRzIChyZXNpemluZ0JhciwgbmF2aWdhdGlvbiwgY2hhcldyYXBwZXIsIGNoYXJDb3VudGVyKVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2luaXRFbGVtZW50czogZnVuY3Rpb24gKG9wdGlvbnMsIHRvcERpdiwgdG9vbEJhciwgdG9vbEJhckFycm93KSB7XHJcbiAgICAgICAgLyoqIHRvcCBkaXYgKi9cclxuICAgICAgICB0b3BEaXYuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy50b3A7XHJcblxyXG4gICAgICAgIC8qKiB0b29sYmFyICovXHJcbiAgICAgICAgaWYgKC9pbmxpbmUvaS50ZXN0KG9wdGlvbnMubW9kZSkpIHtcclxuICAgICAgICAgICAgdG9vbEJhci5jbGFzc05hbWUgKz0gJyBzZS10b29sYmFyLWlubGluZSc7XHJcbiAgICAgICAgICAgIHRvb2xCYXIuc3R5bGUud2lkdGggPSBvcHRpb25zLnRvb2xiYXJXaWR0aDtcclxuICAgICAgICB9IGVsc2UgaWYgKC9iYWxsb29uL2kudGVzdChvcHRpb25zLm1vZGUpKSB7XHJcbiAgICAgICAgICAgIHRvb2xCYXIuY2xhc3NOYW1lICs9ICcgc2UtdG9vbGJhci1iYWxsb29uJztcclxuICAgICAgICAgICAgdG9vbEJhci5zdHlsZS53aWR0aCA9IG9wdGlvbnMudG9vbGJhcldpZHRoO1xyXG4gICAgICAgICAgICB0b29sQmFyLmFwcGVuZENoaWxkKHRvb2xCYXJBcnJvdyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogZWRpdG9yICovXHJcbiAgICAgICAgLy8gd3lzaXd5ZyBkaXYgb3IgaWZyYW1lXHJcbiAgICAgICAgY29uc3Qgd3lzaXd5Z0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIW9wdGlvbnMuaWZyYW1lID8gJ0RJVicgOiAnSUZSQU1FJyk7XHJcbiAgICAgICAgd3lzaXd5Z0Rpdi5jbGFzc05hbWUgPSAnc2Utd3JhcHBlci1pbm5lciBzZS13cmFwcGVyLXd5c2l3eWcnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghb3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LnNldEF0dHJpYnV0ZSgnc2Nyb2xsaW5nJywgJ2F1dG8nKTtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5jbGFzc05hbWUgKz0gJyAnICsgb3B0aW9ucy5fZWRpdGFibGVDbGFzcztcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmZyYW1lICsgb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmVkaXRvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LmFsbG93RnVsbHNjcmVlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHd5c2l3eWdEaXYuZnJhbWVCb3JkZXIgPSAwO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LnN0eWxlLmNzc1RleHQgPSBvcHRpb25zLl9lZGl0b3JTdHlsZXMuZnJhbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0ZXh0YXJlYSBmb3IgY29kZSB2aWV3XHJcbiAgICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURVhUQVJFQScpO1xyXG4gICAgICAgIHRleHRhcmVhLmNsYXNzTmFtZSA9ICdzZS13cmFwcGVyLWlubmVyIHNlLXdyYXBwZXItY29kZSc7XHJcbiAgICAgICAgdGV4dGFyZWEuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy5mcmFtZTtcclxuICAgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICAgICAgICAvKiogcmVzaXplIGJhciAqL1xyXG4gICAgICAgIGxldCByZXNpemluZ0JhciA9IG51bGw7XHJcbiAgICAgICAgbGV0IG5hdmlnYXRpb24gPSBudWxsO1xyXG4gICAgICAgIGxldCBjaGFyV3JhcHBlciA9IG51bGw7XHJcbiAgICAgICAgbGV0IGNoYXJDb3VudGVyID0gbnVsbDtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZXNpemluZ0Jhcikge1xyXG4gICAgICAgICAgICByZXNpemluZ0JhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICByZXNpemluZ0Jhci5jbGFzc05hbWUgPSAnc2UtcmVzaXppbmctYmFyIHN1bi1lZGl0b3ItY29tbW9uJztcclxuXHJcbiAgICAgICAgICAgIC8qKiBuYXZpZ2F0aW9uICovXHJcbiAgICAgICAgICAgIG5hdmlnYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgbmF2aWdhdGlvbi5jbGFzc05hbWUgPSAnc2UtbmF2aWdhdGlvbiBzdW4tZWRpdG9yLWNvbW1vbic7XHJcbiAgICAgICAgICAgIHJlc2l6aW5nQmFyLmFwcGVuZENoaWxkKG5hdmlnYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgLyoqIGNoYXIgY291bnRlciAqL1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFyQ291bnRlcikge1xyXG4gICAgICAgICAgICAgICAgY2hhcldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgICAgIGNoYXJXcmFwcGVyLmNsYXNzTmFtZSA9ICdzZS1jaGFyLWNvdW50ZXItd3JhcHBlcic7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyTGFiZWwuY2xhc3NOYW1lID0gJ3NlLWNoYXItbGFiZWwnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYXJMYWJlbC50ZXh0Q29udGVudCA9IG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyV3JhcHBlci5hcHBlbmRDaGlsZChjaGFyTGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBjaGFyQ291bnRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgICAgIGNoYXJDb3VudGVyLmNsYXNzTmFtZSA9ICdzZS1jaGFyLWNvdW50ZXInO1xyXG4gICAgICAgICAgICAgICAgY2hhckNvdW50ZXIudGV4dENvbnRlbnQgPSAnMCc7XHJcbiAgICAgICAgICAgICAgICBjaGFyV3JhcHBlci5hcHBlbmRDaGlsZChjaGFyQ291bnRlcik7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1heENoYXJDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX21heCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGFyX21heC50ZXh0Q29udGVudCA9ICcgLyAnICsgb3B0aW9ucy5tYXhDaGFyQ291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hhcl9tYXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc2l6aW5nQmFyLmFwcGVuZENoaWxkKGNoYXJXcmFwcGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXIgPSBudWxsO1xyXG4gICAgICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlci5jbGFzc05hbWUgPSAnc2UtcGxhY2Vob2xkZXInO1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlci5pbm5lclRleHQgPSBvcHRpb25zLnBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYm90dG9tQmFyOiB7XHJcbiAgICAgICAgICAgICAgICByZXNpemluZ0JhcjogcmVzaXppbmdCYXIsXHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgY2hhcldyYXBwZXI6IGNoYXJXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgY2hhckNvdW50ZXI6IGNoYXJDb3VudGVyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHd5c2l3eWdGcmFtZTogd3lzaXd5Z0RpdixcclxuICAgICAgICAgICAgY29kZVZpZXc6IHRleHRhcmVhLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplIG9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBPcHRpb25zIG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pbml0T3B0aW9uczogZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICAvKiogVmFsdWVzICovXHJcbiAgICAgICAgb3B0aW9ucy5sYW5nID0gb3B0aW9ucy5sYW5nIHx8IF9kZWZhdWx0TGFuZztcclxuICAgICAgICBvcHRpb25zLmRlZmF1bHRUYWcgPSB0eXBlb2Ygb3B0aW9ucy5kZWZhdWx0VGFnID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuZGVmYXVsdFRhZyA6ICdwJztcclxuICAgICAgICBjb25zdCB0ZXh0VGFncyA9IG9wdGlvbnMudGV4dFRhZ3MgPSBbe2JvbGQ6ICdTVFJPTkcnLCB1bmRlcmxpbmU6ICdVJywgaXRhbGljOiAnRU0nLCBzdHJpa2U6ICdERUwnLCBzdWI6ICdTVUInLCBzdXA6ICdTVVAnfSwgKG9wdGlvbnMudGV4dFRhZ3MgfHwge30pXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBfZGVmYXVsdFtrZXldID0gX25ld1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgb3B0aW9ucy5fdGV4dFRhZ3NNYXAgPSB7XHJcbiAgICAgICAgICAgICdzdHJvbmcnOiB0ZXh0VGFncy5ib2xkLFxyXG4gICAgICAgICAgICAnYic6IHRleHRUYWdzLmJvbGQsXHJcbiAgICAgICAgICAgICd1JzogdGV4dFRhZ3MudW5kZXJsaW5lLFxyXG4gICAgICAgICAgICAnaW5zJzogdGV4dFRhZ3MudW5kZXJsaW5lLFxyXG4gICAgICAgICAgICAnZW0nOiB0ZXh0VGFncy5pdGFsaWMsXHJcbiAgICAgICAgICAgICdpJzogdGV4dFRhZ3MuaXRhbGljLFxyXG4gICAgICAgICAgICAnZGVsJzogdGV4dFRhZ3Muc3RyaWtlLFxyXG4gICAgICAgICAgICAnc3RyaWtlJzogdGV4dFRhZ3Muc3RyaWtlLFxyXG4gICAgICAgICAgICAncyc6IHRleHRUYWdzLnN0cmlrZSxcclxuICAgICAgICAgICAgJ3N1Yic6IHRleHRUYWdzLnN1YixcclxuICAgICAgICAgICAgJ3N1cCc6IHRleHRUYWdzLnN1cFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IHR5cGVvZiBvcHRpb25zLnZhbHVlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudmFsdWUgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuaGlzdG9yeVN0YWNrRGVsYXlUaW1lID0gdHlwZW9mIG9wdGlvbnMuaGlzdG9yeVN0YWNrRGVsYXlUaW1lID09PSAnbnVtYmVyJyA/IG9wdGlvbnMuaGlzdG9yeVN0YWNrRGVsYXlUaW1lIDogNDAwO1xyXG4gICAgICAgIC8qKiBXaGl0ZWxpc3QgKi9cclxuICAgICAgICBjb25zdCB3aGl0ZWxpc3QgPSAnYnJ8cHxkaXZ8cHJlfGJsb2NrcXVvdGV8aDF8aDJ8aDN8aDR8aDV8aDZ8b2x8dWx8bGl8aHJ8ZmlndXJlfGZpZ2NhcHRpb258aW1nfGlmcmFtZXxhdWRpb3x2aWRlb3xzb3VyY2V8dGFibGV8dGhlYWR8dGJvZHl8dHJ8dGh8dGR8YXxifHN0cm9uZ3x2YXJ8aXxlbXx1fGluc3xzfHNwYW58c3RyaWtlfGRlbHxzdWJ8c3VwfGNvZGV8c3ZnfHBhdGgnO1xyXG4gICAgICAgIG9wdGlvbnMuX2RlZmF1bHRUYWdzV2hpdGVsaXN0ID0gdHlwZW9mIG9wdGlvbnMuX2RlZmF1bHRUYWdzV2hpdGVsaXN0ID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuX2RlZmF1bHRUYWdzV2hpdGVsaXN0IDogd2hpdGVsaXN0O1xyXG4gICAgICAgIG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QgPSB0aGlzLl9zZXRXaGl0ZWxpc3Qob3B0aW9ucy5fZGVmYXVsdFRhZ3NXaGl0ZWxpc3QgKyAodHlwZW9mIG9wdGlvbnMuYWRkVGFnc1doaXRlbGlzdCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5hZGRUYWdzV2hpdGVsaXN0Lmxlbmd0aCA+IDAgPyAnfCcgKyBvcHRpb25zLmFkZFRhZ3NXaGl0ZWxpc3QgOiAnJyksIG9wdGlvbnMudGFnc0JsYWNrbGlzdCk7XHJcbiAgICAgICAgb3B0aW9ucy5wYXN0ZVRhZ3NXaGl0ZWxpc3QgPSB0aGlzLl9zZXRXaGl0ZWxpc3QodHlwZW9mIG9wdGlvbnMucGFzdGVUYWdzV2hpdGVsaXN0ID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucGFzdGVUYWdzV2hpdGVsaXN0IDogb3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdCwgb3B0aW9ucy5wYXN0ZVRhZ3NCbGFja2xpc3QpO1xyXG4gICAgICAgIG9wdGlvbnMuYXR0cmlidXRlc1doaXRlbGlzdCA9ICghb3B0aW9ucy5hdHRyaWJ1dGVzV2hpdGVsaXN0IHx8IHR5cGVvZiBvcHRpb25zLmF0dHJpYnV0ZXNXaGl0ZWxpc3QgIT09ICdvYmplY3QnKSA/IG51bGwgOiBvcHRpb25zLmF0dHJpYnV0ZXNXaGl0ZWxpc3Q7XHJcbiAgICAgICAgLyoqIExheW91dCAqL1xyXG4gICAgICAgIG9wdGlvbnMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCAnY2xhc3NpYyc7IC8vIGNsYXNzaWMsIGlubGluZSwgYmFsbG9vbiwgYmFsbG9vbi1hbHdheXNcclxuICAgICAgICBvcHRpb25zLnJ0bCA9ICEhb3B0aW9ucy5ydGw7XHJcbiAgICAgICAgb3B0aW9ucy5fZWRpdGFibGVDbGFzcyA9ICdzdW4tZWRpdG9yLWVkaXRhYmxlJyArIChvcHRpb25zLnJ0bCA/ICcgc2UtcnRsJyA6ICcnKTtcclxuICAgICAgICBvcHRpb25zLl9wcmludENsYXNzID0gdHlwZW9mIG9wdGlvbnMuX3ByaW50Q2xhc3MgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5fcHJpbnRDbGFzcyA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy50b29sYmFyV2lkdGggPSBvcHRpb25zLnRvb2xiYXJXaWR0aCA/ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMudG9vbGJhcldpZHRoKSA/IG9wdGlvbnMudG9vbGJhcldpZHRoICsgJ3B4JyA6IG9wdGlvbnMudG9vbGJhcldpZHRoKSA6ICdhdXRvJztcclxuICAgICAgICBvcHRpb25zLnRvb2xiYXJDb250YWluZXIgPSB0eXBlb2Ygb3B0aW9ucy50b29sYmFyQ29udGFpbmVyID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucy50b29sYmFyQ29udGFpbmVyKSA6IG9wdGlvbnMudG9vbGJhckNvbnRhaW5lcjtcclxuICAgICAgICBvcHRpb25zLnN0aWNreVRvb2xiYXIgPSAoL2JhbGxvb24vaS50ZXN0KG9wdGlvbnMubW9kZSkgfHwgISFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpID8gLTEgOiBvcHRpb25zLnN0aWNreVRvb2xiYXIgPT09IHVuZGVmaW5lZCA/IDAgOiAoL15cXGQrLy50ZXN0KG9wdGlvbnMuc3RpY2t5VG9vbGJhcikgPyB1dGlsLmdldE51bWJlcihvcHRpb25zLnN0aWNreVRvb2xiYXIsIDApIDogLTEpO1xyXG4gICAgICAgIG9wdGlvbnMuZnVsbFNjcmVlbk9mZnNldCA9IG9wdGlvbnMuZnVsbFNjcmVlbk9mZnNldCA9PT0gdW5kZWZpbmVkID8gMCA6ICgvXlxcZCsvLnRlc3Qob3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0KSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMuZnVsbFNjcmVlbk9mZnNldCwgMCkgOiAwKTtcclxuICAgICAgICBvcHRpb25zLmlmcmFtZSA9IG9wdGlvbnMuZnVsbFBhZ2UgfHwgb3B0aW9ucy5pZnJhbWU7XHJcbiAgICAgICAgb3B0aW9ucy5mdWxsUGFnZSA9ICEhb3B0aW9ucy5mdWxsUGFnZTtcclxuICAgICAgICBvcHRpb25zLmlmcmFtZUNTU0ZpbGVOYW1lID0gb3B0aW9ucy5pZnJhbWUgPyB0eXBlb2Ygb3B0aW9ucy5pZnJhbWVDU1NGaWxlTmFtZSA9PT0gJ3N0cmluZycgPyBbb3B0aW9ucy5pZnJhbWVDU1NGaWxlTmFtZV0gOiAob3B0aW9ucy5pZnJhbWVDU1NGaWxlTmFtZSB8fCBbJ3N1bmVkaXRvciddKSA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgPSB0eXBlb2Ygb3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMucHJpbnRUZW1wbGF0ZSA9IHR5cGVvZiBvcHRpb25zLnByaW50VGVtcGxhdGUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5wcmludFRlbXBsYXRlIDogbnVsbDtcclxuICAgICAgICAvKiogQ29kZU1pcnJvciBvYmplY3QgKi9cclxuICAgICAgICBvcHRpb25zLmNvZGVNaXJyb3IgPSBvcHRpb25zLmNvZGVNaXJyb3IgPyBvcHRpb25zLmNvZGVNaXJyb3Iuc3JjID8gb3B0aW9ucy5jb2RlTWlycm9yIDoge3NyYzogb3B0aW9ucy5jb2RlTWlycm9yfSA6IG51bGw7XHJcbiAgICAgICAgLyoqIGthdGV4IG9iamVjdCAoTWF0aCBwbHVnaW4pICovXHJcbiAgICAgICAgb3B0aW9ucy5rYXRleCA9IG9wdGlvbnMua2F0ZXggPyBvcHRpb25zLmthdGV4LnNyYyA/IG9wdGlvbnMua2F0ZXggOiB7c3JjOiBvcHRpb25zLmthdGV4fSA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5tYXRoRm9udFNpemUgPSAhIW9wdGlvbnMubWF0aEZvbnRTaXplID8gb3B0aW9ucy5tYXRoRm9udFNpemUgOiBbXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMScsIHZhbHVlOiAnMWVtJ30sXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMS41JywgdmFsdWU6ICcxLjVlbSd9LFxyXG4gICAgICAgICAgICB7dGV4dDogJzInLCB2YWx1ZTogJzJlbSd9LFxyXG4gICAgICAgICAgICB7dGV4dDogJzIuNScsIHZhbHVlOiAnMi41ZW0nfVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgLyoqIERpc3BsYXkgKi9cclxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uID0gdHlwZW9mIG9wdGlvbnMucG9zaXRpb24gPT09ICdzdHJpbmcnID8gb3B0aW9ucy5wb3NpdGlvbiA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5kaXNwbGF5ID0gb3B0aW9ucy5kaXNwbGF5IHx8IChlbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyB8fCAhZWxlbWVudC5zdHlsZS5kaXNwbGF5ID8gJ2Jsb2NrJyA6IGVsZW1lbnQuc3R5bGUuZGlzcGxheSk7XHJcbiAgICAgICAgb3B0aW9ucy5wb3B1cERpc3BsYXkgPSBvcHRpb25zLnBvcHVwRGlzcGxheSB8fCAnZnVsbCc7XHJcbiAgICAgICAgLyoqIEJvdHRvbSByZXNpemluZyBiYXIgKi9cclxuICAgICAgICBvcHRpb25zLnJlc2l6aW5nQmFyID0gb3B0aW9ucy5yZXNpemluZ0JhciA9PT0gdW5kZWZpbmVkID8gKC9pbmxpbmV8YmFsbG9vbi9pLnRlc3Qob3B0aW9ucy5tb2RlKSA/IGZhbHNlIDogdHJ1ZSkgOiBvcHRpb25zLnJlc2l6aW5nQmFyO1xyXG4gICAgICAgIG9wdGlvbnMuc2hvd1BhdGhMYWJlbCA9ICFvcHRpb25zLnJlc2l6aW5nQmFyID8gZmFsc2UgOiB0eXBlb2Ygb3B0aW9ucy5zaG93UGF0aExhYmVsID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnNob3dQYXRoTGFiZWwgOiB0cnVlO1xyXG4gICAgICAgIC8qKiBDaGFyYWN0ZXIgY291bnQgKi9cclxuICAgICAgICBvcHRpb25zLmNoYXJDb3VudGVyID0gb3B0aW9ucy5tYXhDaGFyQ291bnQgPiAwID8gdHJ1ZSA6IHR5cGVvZiBvcHRpb25zLmNoYXJDb3VudGVyID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmNoYXJDb3VudGVyIDogZmFsc2U7XHJcbiAgICAgICAgb3B0aW9ucy5jaGFyQ291bnRlclR5cGUgPSB0eXBlb2Ygb3B0aW9ucy5jaGFyQ291bnRlclR5cGUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5jaGFyQ291bnRlclR5cGUgOiAnY2hhcic7XHJcbiAgICAgICAgb3B0aW9ucy5jaGFyQ291bnRlckxhYmVsID0gdHlwZW9mIG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmNoYXJDb3VudGVyTGFiZWwudHJpbSgpIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLm1heENoYXJDb3VudCA9IHV0aWwuaXNOdW1iZXIob3B0aW9ucy5tYXhDaGFyQ291bnQpICYmIG9wdGlvbnMubWF4Q2hhckNvdW50ID4gLTEgPyBvcHRpb25zLm1heENoYXJDb3VudCAqIDEgOiBudWxsO1xyXG4gICAgICAgIC8qKiBXaWR0aCBzaXplICovXHJcbiAgICAgICAgb3B0aW9ucy53aWR0aCA9IG9wdGlvbnMud2lkdGggPyAodXRpbC5pc051bWJlcihvcHRpb25zLndpZHRoKSA/IG9wdGlvbnMud2lkdGggKyAncHgnIDogb3B0aW9ucy53aWR0aCkgOiAoZWxlbWVudC5jbGllbnRXaWR0aCA/IGVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnIDogJzEwMCUnKTtcclxuICAgICAgICBvcHRpb25zLm1pbldpZHRoID0gKHV0aWwuaXNOdW1iZXIob3B0aW9ucy5taW5XaWR0aCkgPyBvcHRpb25zLm1pbldpZHRoICsgJ3B4JyA6IG9wdGlvbnMubWluV2lkdGgpIHx8ICcnO1xyXG4gICAgICAgIG9wdGlvbnMubWF4V2lkdGggPSAodXRpbC5pc051bWJlcihvcHRpb25zLm1heFdpZHRoKSA/IG9wdGlvbnMubWF4V2lkdGggKyAncHgnIDogb3B0aW9ucy5tYXhXaWR0aCkgfHwgJyc7XHJcbiAgICAgICAgLyoqIEhlaWdodCBzaXplICovXHJcbiAgICAgICAgb3B0aW9ucy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodCA/ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMuaGVpZ2h0KSA/IG9wdGlvbnMuaGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMuaGVpZ2h0KSA6IChlbGVtZW50LmNsaWVudEhlaWdodCA/IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgJ3B4JyA6ICdhdXRvJyk7XHJcbiAgICAgICAgb3B0aW9ucy5taW5IZWlnaHQgPSAodXRpbC5pc051bWJlcihvcHRpb25zLm1pbkhlaWdodCkgPyBvcHRpb25zLm1pbkhlaWdodCArICdweCcgOiBvcHRpb25zLm1pbkhlaWdodCkgfHwgJyc7XHJcbiAgICAgICAgb3B0aW9ucy5tYXhIZWlnaHQgPSAodXRpbC5pc051bWJlcihvcHRpb25zLm1heEhlaWdodCkgPyBvcHRpb25zLm1heEhlaWdodCArICdweCcgOiBvcHRpb25zLm1heEhlaWdodCkgfHwgJyc7XHJcbiAgICAgICAgLyoqIEVkaXRpbmcgYXJlYSBkZWZhdWx0IHN0eWxlICovXHJcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0U3R5bGUgPSB0eXBlb2Ygb3B0aW9ucy5kZWZhdWx0U3R5bGUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5kZWZhdWx0U3R5bGUgOiAnJztcclxuICAgICAgICAvKiogRGVmaW5pbmcgbWVudSBpdGVtcyAqL1xyXG4gICAgICAgIG9wdGlvbnMuZm9udCA9ICFvcHRpb25zLmZvbnQgPyBudWxsIDogb3B0aW9ucy5mb250O1xyXG4gICAgICAgIG9wdGlvbnMuZm9udFNpemUgPSAhb3B0aW9ucy5mb250U2l6ZSA/IG51bGwgOiBvcHRpb25zLmZvbnRTaXplO1xyXG4gICAgICAgIG9wdGlvbnMuZm9ybWF0cyA9ICFvcHRpb25zLmZvcm1hdHMgPyBudWxsIDogb3B0aW9ucy5mb3JtYXRzO1xyXG4gICAgICAgIG9wdGlvbnMuY29sb3JMaXN0ID0gIW9wdGlvbnMuY29sb3JMaXN0ID8gbnVsbCA6IG9wdGlvbnMuY29sb3JMaXN0O1xyXG4gICAgICAgIG9wdGlvbnMubGluZUhlaWdodHMgPSAhb3B0aW9ucy5saW5lSGVpZ2h0cyA/IG51bGwgOiBvcHRpb25zLmxpbmVIZWlnaHRzO1xyXG4gICAgICAgIG9wdGlvbnMucGFyYWdyYXBoU3R5bGVzID0gIW9wdGlvbnMucGFyYWdyYXBoU3R5bGVzID8gbnVsbCA6IG9wdGlvbnMucGFyYWdyYXBoU3R5bGVzO1xyXG4gICAgICAgIG9wdGlvbnMudGV4dFN0eWxlcyA9ICFvcHRpb25zLnRleHRTdHlsZXMgPyBudWxsIDogb3B0aW9ucy50ZXh0U3R5bGVzO1xyXG4gICAgICAgIG9wdGlvbnMuZm9udFNpemVVbml0ID0gdHlwZW9mIG9wdGlvbnMuZm9udFNpemVVbml0ID09PSAnc3RyaW5nJyA/IChvcHRpb25zLmZvbnRTaXplVW5pdC50cmltKCkgfHwgJ3B4JykgOiAncHgnO1xyXG4gICAgICAgIC8qKiBJbWFnZSAqL1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VSZXNpemluZyA9IG9wdGlvbnMuaW1hZ2VSZXNpemluZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuaW1hZ2VSZXNpemluZztcclxuICAgICAgICBvcHRpb25zLmltYWdlSGVpZ2h0U2hvdyA9IG9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLmltYWdlSGVpZ2h0U2hvdztcclxuICAgICAgICBvcHRpb25zLmltYWdlV2lkdGggPSAhb3B0aW9ucy5pbWFnZVdpZHRoID8gJ2F1dG8nIDogdXRpbC5pc051bWJlcihvcHRpb25zLmltYWdlV2lkdGgpID8gb3B0aW9ucy5pbWFnZVdpZHRoICsgJ3B4JyA6IG9wdGlvbnMuaW1hZ2VXaWR0aDtcclxuICAgICAgICBvcHRpb25zLmltYWdlSGVpZ2h0ID0gIW9wdGlvbnMuaW1hZ2VIZWlnaHQgPyAnYXV0bycgOiB1dGlsLmlzTnVtYmVyKG9wdGlvbnMuaW1hZ2VIZWlnaHQpID8gb3B0aW9ucy5pbWFnZUhlaWdodCArICdweCcgOiBvcHRpb25zLmltYWdlSGVpZ2h0O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UgPSAhIW9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2U7XHJcbiAgICAgICAgb3B0aW9ucy5faW1hZ2VTaXplVW5pdCA9IG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UgPyAnJScgOiAncHgnO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VSb3RhdGlvbiA9IG9wdGlvbnMuaW1hZ2VSb3RhdGlvbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbWFnZVJvdGF0aW9uIDogIShvcHRpb25zLmltYWdlU2l6ZU9ubHlQZXJjZW50YWdlIHx8ICFvcHRpb25zLmltYWdlSGVpZ2h0U2hvdyk7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZUZpbGVJbnB1dCA9IG9wdGlvbnMuaW1hZ2VGaWxlSW5wdXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmltYWdlRmlsZUlucHV0O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VVcmxJbnB1dCA9IChvcHRpb25zLmltYWdlVXJsSW5wdXQgPT09IHVuZGVmaW5lZCB8fCAhb3B0aW9ucy5pbWFnZUZpbGVJbnB1dCkgPyB0cnVlIDogb3B0aW9ucy5pbWFnZVVybElucHV0O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VVcGxvYWRIZWFkZXIgPSBvcHRpb25zLmltYWdlVXBsb2FkSGVhZGVyIHx8IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVVwbG9hZFVybCA9IHR5cGVvZiBvcHRpb25zLmltYWdlVXBsb2FkVXJsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuaW1hZ2VVcGxvYWRVcmwgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VVcGxvYWRTaXplTGltaXQgPSAvXFxkKy8udGVzdChvcHRpb25zLmltYWdlVXBsb2FkU2l6ZUxpbWl0KSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMuaW1hZ2VVcGxvYWRTaXplTGltaXQsIDApIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmltYWdlTXVsdGlwbGVGaWxlID0gISFvcHRpb25zLmltYWdlTXVsdGlwbGVGaWxlO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VBY2NlcHQgPSAodHlwZW9mIG9wdGlvbnMuaW1hZ2VBY2NlcHQgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMuaW1hZ2VBY2NlcHQudHJpbSgpID09PSBcIipcIikgPyAnaW1hZ2UvKicgOiBvcHRpb25zLmltYWdlQWNjZXB0LnRyaW0oKSB8fCAnaW1hZ2UvKic7XHJcbiAgICAgICAgLyoqIEltYWdlIC0gaW1hZ2UgZ2FsbGVyeSAqL1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VHYWxsZXJ5VXJsID0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VHYWxsZXJ5VXJsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuaW1hZ2VHYWxsZXJ5VXJsIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmltYWdlR2FsbGVyeUhlYWRlciA9IG9wdGlvbnMuaW1hZ2VHYWxsZXJ5SGVhZGVyIHx8IG51bGw7XHJcbiAgICAgICAgLyoqIFZpZGVvICovXHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1Jlc2l6aW5nID0gb3B0aW9ucy52aWRlb1Jlc2l6aW5nID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy52aWRlb1Jlc2l6aW5nO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9IZWlnaHRTaG93ID0gb3B0aW9ucy52aWRlb0hlaWdodFNob3cgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMudmlkZW9IZWlnaHRTaG93O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9SYXRpb1Nob3cgPSBvcHRpb25zLnZpZGVvUmF0aW9TaG93ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnZpZGVvUmF0aW9TaG93O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9XaWR0aCA9ICFvcHRpb25zLnZpZGVvV2lkdGggfHwgIXV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMudmlkZW9XaWR0aCwgMCkgPyAnJyA6IHV0aWwuaXNOdW1iZXIob3B0aW9ucy52aWRlb1dpZHRoKSA/IG9wdGlvbnMudmlkZW9XaWR0aCArICdweCcgOiBvcHRpb25zLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb0hlaWdodCA9ICFvcHRpb25zLnZpZGVvSGVpZ2h0IHx8ICF1dGlsLmdldE51bWJlcihvcHRpb25zLnZpZGVvSGVpZ2h0LCAwKSA/ICcnIDogdXRpbC5pc051bWJlcihvcHRpb25zLnZpZGVvSGVpZ2h0KSA/IG9wdGlvbnMudmlkZW9IZWlnaHQgKyAncHgnIDogb3B0aW9ucy52aWRlb0hlaWdodDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlID0gISFvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlO1xyXG4gICAgICAgIG9wdGlvbnMuX3ZpZGVvU2l6ZVVuaXQgPSBvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlID8gJyUnIDogJ3B4JztcclxuICAgICAgICBvcHRpb25zLnZpZGVvUm90YXRpb24gPSBvcHRpb25zLnZpZGVvUm90YXRpb24gIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudmlkZW9Sb3RhdGlvbiA6ICEob3B0aW9ucy52aWRlb1NpemVPbmx5UGVyY2VudGFnZSB8fCAhb3B0aW9ucy52aWRlb0hlaWdodFNob3cpO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9SYXRpbyA9ICh1dGlsLmdldE51bWJlcihvcHRpb25zLnZpZGVvUmF0aW8sIDQpIHx8IDAuNTYyNSk7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1JhdGlvTGlzdCA9ICFvcHRpb25zLnZpZGVvUmF0aW9MaXN0ID8gbnVsbCA6IG9wdGlvbnMudmlkZW9SYXRpb0xpc3Q7XHJcbiAgICAgICAgb3B0aW9ucy55b3V0dWJlUXVlcnkgPSAob3B0aW9ucy55b3V0dWJlUXVlcnkgfHwgJycpLnJlcGxhY2UoJz8nLCAnJyk7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb0ZpbGVJbnB1dCA9ICEhb3B0aW9ucy52aWRlb0ZpbGVJbnB1dDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvVXJsSW5wdXQgPSAob3B0aW9ucy52aWRlb1VybElucHV0ID09PSB1bmRlZmluZWQgfHwgIW9wdGlvbnMudmlkZW9GaWxlSW5wdXQpID8gdHJ1ZSA6IG9wdGlvbnMudmlkZW9VcmxJbnB1dDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvVXBsb2FkSGVhZGVyID0gb3B0aW9ucy52aWRlb1VwbG9hZEhlYWRlciB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcGxvYWRVcmwgPSB0eXBlb2Ygb3B0aW9ucy52aWRlb1VwbG9hZFVybCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnZpZGVvVXBsb2FkVXJsIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvVXBsb2FkU2l6ZUxpbWl0ID0gL1xcZCsvLnRlc3Qob3B0aW9ucy52aWRlb1VwbG9hZFNpemVMaW1pdCkgPyB1dGlsLmdldE51bWJlcihvcHRpb25zLnZpZGVvVXBsb2FkU2l6ZUxpbWl0LCAwKSA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb011bHRpcGxlRmlsZSA9ICEhb3B0aW9ucy52aWRlb011bHRpcGxlRmlsZTtcclxuICAgICAgICBvcHRpb25zLnZpZGVvVGFnQXR0cnMgPSBvcHRpb25zLnZpZGVvVGFnQXR0cnMgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvSWZyYW1lQXR0cnMgPSBvcHRpb25zLnZpZGVvSWZyYW1lQXR0cnMgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvQWNjZXB0ID0gKHR5cGVvZiBvcHRpb25zLnZpZGVvQWNjZXB0ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLnZpZGVvQWNjZXB0LnRyaW0oKSA9PT0gXCIqXCIpID8gJ3ZpZGVvLyonIDogb3B0aW9ucy52aWRlb0FjY2VwdC50cmltKCkgfHwgJ3ZpZGVvLyonO1xyXG4gICAgICAgIC8qKiBBdWRpbyAqL1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW9XaWR0aCA9ICFvcHRpb25zLmF1ZGlvV2lkdGggPyAnJyA6IHV0aWwuaXNOdW1iZXIob3B0aW9ucy5hdWRpb1dpZHRoKSA/IG9wdGlvbnMuYXVkaW9XaWR0aCArICdweCcgOiBvcHRpb25zLmF1ZGlvV2lkdGg7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb0hlaWdodCA9ICFvcHRpb25zLmF1ZGlvSGVpZ2h0ID8gJycgOiB1dGlsLmlzTnVtYmVyKG9wdGlvbnMuYXVkaW9IZWlnaHQpID8gb3B0aW9ucy5hdWRpb0hlaWdodCArICdweCcgOiBvcHRpb25zLmF1ZGlvSGVpZ2h0O1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW9GaWxlSW5wdXQgPSAhIW9wdGlvbnMuYXVkaW9GaWxlSW5wdXQ7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb1VybElucHV0ID0gKG9wdGlvbnMuYXVkaW9VcmxJbnB1dCA9PT0gdW5kZWZpbmVkIHx8ICFvcHRpb25zLmF1ZGlvRmlsZUlucHV0KSA/IHRydWUgOiBvcHRpb25zLmF1ZGlvVXJsSW5wdXQ7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb1VwbG9hZEhlYWRlciA9IG9wdGlvbnMuYXVkaW9VcGxvYWRIZWFkZXIgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXBsb2FkVXJsID0gdHlwZW9mIG9wdGlvbnMuYXVkaW9VcGxvYWRVcmwgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5hdWRpb1VwbG9hZFVybCA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdCA9IC9cXGQrLy50ZXN0KG9wdGlvbnMuYXVkaW9VcGxvYWRTaXplTGltaXQpID8gdXRpbC5nZXROdW1iZXIob3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdCwgMCkgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW9NdWx0aXBsZUZpbGUgPSAhIW9wdGlvbnMuYXVkaW9NdWx0aXBsZUZpbGU7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb1RhZ0F0dHJzID0gb3B0aW9ucy5hdWRpb1RhZ0F0dHJzIHx8IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb0FjY2VwdCA9ICh0eXBlb2Ygb3B0aW9ucy5hdWRpb0FjY2VwdCAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5hdWRpb0FjY2VwdC50cmltKCkgPT09IFwiKlwiKSA/ICdhdWRpby8qJyA6IG9wdGlvbnMuYXVkaW9BY2NlcHQudHJpbSgpIHx8ICdhdWRpby8qJztcclxuICAgICAgICAvKiogVGFibGUgKi9cclxuICAgICAgICBvcHRpb25zLnRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiA9IHR5cGVvZiBvcHRpb25zLnRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbi50b0xvd2VyQ2FzZSgpIDogJ2NlbGwnO1xyXG4gICAgICAgIC8qKiBMaW5rICovXHJcbiAgICAgICAgb3B0aW9ucy5saW5rUHJvdG9jb2wgPSB0eXBlb2Ygb3B0aW9ucy5saW5rUHJvdG9jb2wgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5saW5rUHJvdG9jb2wgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMubGlua1JlbCA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5saW5rUmVsKSA/IG9wdGlvbnMubGlua1JlbCA6IFtdO1xyXG4gICAgICAgIG9wdGlvbnMubGlua1JlbERlZmF1bHQgPSBvcHRpb25zLmxpbmtSZWxEZWZhdWx0IHx8IHt9O1xyXG4gICAgICAgIC8qKiBLZXkgYWN0aW9ucyAqL1xyXG4gICAgICAgIG9wdGlvbnMudGFiRGlzYWJsZSA9ICEhb3B0aW9ucy50YWJEaXNhYmxlO1xyXG4gICAgICAgIG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZSA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlKSA/IG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZSA6IFtdO1xyXG4gICAgICAgIG9wdGlvbnMuc2hvcnRjdXRzSGludCA9IG9wdGlvbnMuc2hvcnRjdXRzSGludCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0aW9ucy5zaG9ydGN1dHNIaW50O1xyXG4gICAgICAgIC8qKiBEZWZpbmluZyBzYXZlIGJ1dHRvbiAqL1xyXG4gICAgICAgIG9wdGlvbnMuY2FsbEJhY2tTYXZlID0gIW9wdGlvbnMuY2FsbEJhY2tTYXZlID8gbnVsbCA6IG9wdGlvbnMuY2FsbEJhY2tTYXZlO1xyXG4gICAgICAgIC8qKiBUZW1wbGF0ZXMgQXJyYXkgKi9cclxuICAgICAgICBvcHRpb25zLnRlbXBsYXRlcyA9ICFvcHRpb25zLnRlbXBsYXRlcyA/IG51bGwgOiBvcHRpb25zLnRlbXBsYXRlcztcclxuICAgICAgICAvKiogRVRDICovXHJcbiAgICAgICAgb3B0aW9ucy5wbGFjZWhvbGRlciA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucGxhY2Vob2xkZXIgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMubWVkaWFBdXRvU2VsZWN0ID0gb3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMubWVkaWFBdXRvU2VsZWN0O1xyXG4gICAgICAgIC8qKiBCdXR0b25zICovXHJcbiAgICAgICAgb3B0aW9ucy5idXR0b25MaXN0ID0gISFvcHRpb25zLmJ1dHRvbkxpc3QgPyBvcHRpb25zLmJ1dHRvbkxpc3QgOiBbXHJcbiAgICAgICAgICAgIFsndW5kbycsICdyZWRvJ10sXHJcbiAgICAgICAgICAgIFsnYm9sZCcsICd1bmRlcmxpbmUnLCAnaXRhbGljJywgJ3N0cmlrZScsICdzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnXSxcclxuICAgICAgICAgICAgWydyZW1vdmVGb3JtYXQnXSxcclxuICAgICAgICAgICAgWydvdXRkZW50JywgJ2luZGVudCddLFxyXG4gICAgICAgICAgICBbJ2Z1bGxTY3JlZW4nLCAnc2hvd0Jsb2NrcycsICdjb2RlVmlldyddLFxyXG4gICAgICAgICAgICBbJ3ByZXZpZXcnLCAncHJpbnQnXVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8qKiBSVEwgLSBidXR0b25zICovXHJcbiAgICAgICAgaWYgKG9wdGlvbnMucnRsKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuYnV0dG9uTGlzdCA9IG9wdGlvbnMuYnV0dG9uTGlzdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogLS0tIERlZmluZSBpY29ucyAtLS0gKi9cclxuICAgICAgICAvLyBjdXN0b20gaWNvbnNcclxuICAgICAgICBvcHRpb25zLmljb25zID0gKCFvcHRpb25zLmljb25zIHx8IHR5cGVvZiBvcHRpb25zLmljb25zICE9PSAnb2JqZWN0JykgPyBfaWNvbnMgOiBbX2ljb25zLCBvcHRpb25zLmljb25zXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5oYXNPd24oX25ldywga2V5KSkgX2RlZmF1bHRba2V5XSA9IF9uZXdba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIC8vIHJ0bCBpY29uc1xyXG4gICAgICAgIG9wdGlvbnMuaWNvbnMgPSAhb3B0aW9ucy5ydGwgPyBvcHRpb25zLmljb25zIDogW29wdGlvbnMuaWNvbnMsIG9wdGlvbnMuaWNvbnMucnRsXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5oYXNPd24oX25ldywga2V5KSkgX2RlZmF1bHRba2V5XSA9IF9uZXdba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XHJcbiAgICAgICAgfSwge30pO1xyXG5cclxuICAgICAgICAvKiogX2luaXQgb3B0aW9ucyAqL1xyXG4gICAgICAgIG9wdGlvbnMuX2VkaXRvclN0eWxlcyA9IHV0aWwuX3NldERlZmF1bHRPcHRpb25TdHlsZShvcHRpb25zLCBvcHRpb25zLmRlZmF1bHRTdHlsZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRXaGl0ZWxpc3Q6IGZ1bmN0aW9uICh3aGl0ZWxpc3QsIGJsYWNrbGlzdCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYmxhY2tsaXN0ICE9PSAnc3RyaW5nJykgcmV0dXJuIHdoaXRlbGlzdDtcclxuICAgICAgICBibGFja2xpc3QgPSBibGFja2xpc3Quc3BsaXQoJ3wnKTtcclxuICAgICAgICB3aGl0ZWxpc3QgPSB3aGl0ZWxpc3Quc3BsaXQoJ3wnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYmxhY2tsaXN0Lmxlbmd0aCwgaW5kZXg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpbmRleCA9IHdoaXRlbGlzdC5pbmRleE9mKGJsYWNrbGlzdFtpXSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB3aGl0ZWxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdoaXRlbGlzdC5qb2luKCd8Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFN1bmVkaXRvcidzIERlZmF1bHQgYnV0dG9uIGxpc3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnNcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9kZWZhdWx0QnV0dG9uczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBpY29ucyA9IG9wdGlvbnMuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IG9wdGlvbnMubGFuZztcclxuICAgICAgICBjb25zdCBjbWQgPSB1dGlsLmlzT1NYX0lPUyA/ICfijJgnIDogJ0NUUkwnO1xyXG4gICAgICAgIGNvbnN0IGFkZFNoaWZ0ID0gdXRpbC5pc09TWF9JT1MgPyAn4oenJyA6ICcrU0hJRlQnO1xyXG4gICAgICAgIGNvbnN0IHNob3J0Y3V0c0Rpc2FibGUgPSAhb3B0aW9ucy5zaG9ydGN1dHNIaW50ID8gWydib2xkJywgJ3N0cmlrZScsICd1bmRlcmxpbmUnLCAnaXRhbGljJywgJ3VuZG8nLCAnaW5kZW50JywgJ3NhdmUnXSA6IG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZTtcclxuICAgICAgICBjb25zdCBpbmRlbnRLZXkgPSBvcHRpb25zLnJ0bCA/IFsnWycsJ10nXSA6IFsnXScsJ1snXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLyoqIGRlZmF1bHQgY29tbWFuZCAqL1xyXG4gICAgICAgICAgICBib2xkOiBbJ19zZV9jb21tYW5kX2JvbGQnLCBsYW5nLnRvb2xiYXIuYm9sZCArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2JvbGQnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+Qjwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ2JvbGQnLCAnJywgaWNvbnMuYm9sZF0sXHJcbiAgICAgICAgICAgIHVuZGVybGluZTogWydfc2VfY29tbWFuZF91bmRlcmxpbmUnLCBsYW5nLnRvb2xiYXIudW5kZXJsaW5lICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kZXJsaW5lJykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlU8L3NwYW4+JykgKyAnPC9zcGFuPicsICd1bmRlcmxpbmUnLCAnJywgaWNvbnMudW5kZXJsaW5lXSxcclxuICAgICAgICAgICAgaXRhbGljOiBbJ19zZV9jb21tYW5kX2l0YWxpYycsIGxhbmcudG9vbGJhci5pdGFsaWMgKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdpdGFsaWMnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+STwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ2l0YWxpYycsICcnLCBpY29ucy5pdGFsaWNdLFxyXG4gICAgICAgICAgICBzdHJpa2U6IFsnX3NlX2NvbW1hbmRfc3RyaWtlJywgbGFuZy50b29sYmFyLnN0cmlrZSArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3N0cmlrZScpID4gLTEgPyAnJyA6IGNtZCArIGFkZFNoaWZ0ICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlM8L3NwYW4+JykgKyAnPC9zcGFuPicsICdzdHJpa2UnLCAnJywgaWNvbnMuc3RyaWtlXSxcclxuICAgICAgICAgICAgc3Vic2NyaXB0OiBbJ19zZV9jb21tYW5kX3N1YnNjcmlwdCcsIGxhbmcudG9vbGJhci5zdWJzY3JpcHQsICdTVUInLCAnJywgaWNvbnMuc3Vic2NyaXB0XSxcclxuICAgICAgICAgICAgc3VwZXJzY3JpcHQ6IFsnX3NlX2NvbW1hbmRfc3VwZXJzY3JpcHQnLCBsYW5nLnRvb2xiYXIuc3VwZXJzY3JpcHQsICdTVVAnLCAnJywgaWNvbnMuc3VwZXJzY3JpcHRdLFxyXG4gICAgICAgICAgICByZW1vdmVGb3JtYXQ6IFsnJywgbGFuZy50b29sYmFyLnJlbW92ZUZvcm1hdCwgJ3JlbW92ZUZvcm1hdCcsICcnLCBpY29ucy5lcmFzZV0sXHJcbiAgICAgICAgICAgIGluZGVudDogWydfc2VfY29tbWFuZF9pbmRlbnQnLCBsYW5nLnRvb2xiYXIuaW5kZW50ICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignaW5kZW50JykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPicgKyBpbmRlbnRLZXlbMF0gKyAnPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAnaW5kZW50JywgJycsIGljb25zLm91dGRlbnRdLFxyXG4gICAgICAgICAgICBvdXRkZW50OiBbJ19zZV9jb21tYW5kX291dGRlbnQnLCBsYW5nLnRvb2xiYXIub3V0ZGVudCArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2luZGVudCcpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj4nICsgaW5kZW50S2V5WzFdICsgJzwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ291dGRlbnQnLCAnJywgaWNvbnMuaW5kZW50XSxcclxuICAgICAgICAgICAgZnVsbFNjcmVlbjogWydzZS1jb2RlLXZpZXctZW5hYmxlZCBzZS1yZXNpemluZy1lbmFibGVkIF9zZV9jb21tYW5kX2Z1bGxTY3JlZW4nLCBsYW5nLnRvb2xiYXIuZnVsbFNjcmVlbiwgJ2Z1bGxTY3JlZW4nLCAnJywgaWNvbnMuZXhwYW5zaW9uXSxcclxuICAgICAgICAgICAgc2hvd0Jsb2NrczogWydfc2VfY29tbWFuZF9zaG93QmxvY2tzJywgbGFuZy50b29sYmFyLnNob3dCbG9ja3MsICdzaG93QmxvY2tzJywgJycsIGljb25zLnNob3dfYmxvY2tzXSxcclxuICAgICAgICAgICAgY29kZVZpZXc6IFsnc2UtY29kZS12aWV3LWVuYWJsZWQgc2UtcmVzaXppbmctZW5hYmxlZCBfc2VfY29tbWFuZF9jb2RlVmlldycsIGxhbmcudG9vbGJhci5jb2RlVmlldywgJ2NvZGVWaWV3JywgJycsIGljb25zLmNvZGVfdmlld10sXHJcbiAgICAgICAgICAgIHVuZG86IFsnX3NlX2NvbW1hbmRfdW5kbyBzZS1yZXNpemluZy1lbmFibGVkJywgbGFuZy50b29sYmFyLnVuZG8gKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCd1bmRvJykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlo8L3NwYW4+JykgKyAnPC9zcGFuPicsICd1bmRvJywgJycsIGljb25zLnVuZG9dLFxyXG4gICAgICAgICAgICByZWRvOiBbJ19zZV9jb21tYW5kX3JlZG8gc2UtcmVzaXppbmctZW5hYmxlZCcsIGxhbmcudG9vbGJhci5yZWRvICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kbycpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj5ZPC9zcGFuPiAvICcgKyBjbWQgKyBhZGRTaGlmdCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj5aPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAncmVkbycsICcnLCBpY29ucy5yZWRvXSxcclxuICAgICAgICAgICAgcHJldmlldzogWydzZS1yZXNpemluZy1lbmFibGVkJywgbGFuZy50b29sYmFyLnByZXZpZXcsICdwcmV2aWV3JywgJycsIGljb25zLnByZXZpZXddLFxyXG4gICAgICAgICAgICBwcmludDogWydzZS1yZXNpemluZy1lbmFibGVkJywgbGFuZy50b29sYmFyLnByaW50LCAncHJpbnQnLCAnJywgaWNvbnMucHJpbnRdLFxyXG4gICAgICAgICAgICBzYXZlOiBbJ19zZV9jb21tYW5kX3NhdmUgc2UtcmVzaXppbmctZW5hYmxlZCcsIGxhbmcudG9vbGJhci5zYXZlICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignc2F2ZScpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj5TPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAnc2F2ZScsICcnLCBpY29ucy5zYXZlXSxcclxuICAgICAgICAgICAgLyoqIHBsdWdpbnMgLSBjb21tYW5kICovXHJcbiAgICAgICAgICAgIGJsb2NrcXVvdGU6IFsnJywgbGFuZy50b29sYmFyLnRhZ19ibG9ja3F1b3RlLCAnYmxvY2txdW90ZScsICdjb21tYW5kJywgaWNvbnMuYmxvY2txdW90ZV0sXHJcbiAgICAgICAgICAgIC8qKiBwbHVnaW5zIC0gc3VibWVudSAqL1xyXG4gICAgICAgICAgICBmb250OiBbJ3NlLWJ0bi1zZWxlY3Qgc2UtYnRuLXRvb2wtZm9udCcsIGxhbmcudG9vbGJhci5mb250LCAnZm9udCcsICdzdWJtZW51JywgJzxzcGFuIGNsYXNzPVwidHh0XCI+JyArIGxhbmcudG9vbGJhci5mb250ICsgJzwvc3Bhbj4nICsgaWNvbnMuYXJyb3dfZG93bl0sXHJcbiAgICAgICAgICAgIGZvcm1hdEJsb2NrOiBbJ3NlLWJ0bi1zZWxlY3Qgc2UtYnRuLXRvb2wtZm9ybWF0JywgbGFuZy50b29sYmFyLmZvcm1hdHMsICdmb3JtYXRCbG9jaycsICdzdWJtZW51JywgJzxzcGFuIGNsYXNzPVwidHh0XCI+JyArIGxhbmcudG9vbGJhci5mb3JtYXRzICsgJzwvc3Bhbj4nICsgaWNvbnMuYXJyb3dfZG93bl0sXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBbJ3NlLWJ0bi1zZWxlY3Qgc2UtYnRuLXRvb2wtc2l6ZScsIGxhbmcudG9vbGJhci5mb250U2l6ZSwgJ2ZvbnRTaXplJywgJ3N1Ym1lbnUnLCAnPHNwYW4gY2xhc3M9XCJ0eHRcIj4nICsgbGFuZy50b29sYmFyLmZvbnRTaXplICsgJzwvc3Bhbj4nICsgaWNvbnMuYXJyb3dfZG93bl0sXHJcbiAgICAgICAgICAgIGZvbnRDb2xvcjogWycnLCBsYW5nLnRvb2xiYXIuZm9udENvbG9yLCAnZm9udENvbG9yJywgJ3N1Ym1lbnUnLCBpY29ucy5mb250X2NvbG9yXSxcclxuICAgICAgICAgICAgaGlsaXRlQ29sb3I6IFsnJywgbGFuZy50b29sYmFyLmhpbGl0ZUNvbG9yLCAnaGlsaXRlQ29sb3InLCAnc3VibWVudScsIGljb25zLmhpZ2hsaWdodF9jb2xvcl0sXHJcbiAgICAgICAgICAgIGFsaWduOiBbJ3NlLWJ0bi1hbGlnbicsIGxhbmcudG9vbGJhci5hbGlnbiwgJ2FsaWduJywgJ3N1Ym1lbnUnLCAob3B0aW9ucy5ydGwgPyBpY29ucy5hbGlnbl9yaWdodCA6IGljb25zLmFsaWduX2xlZnQpXSxcclxuICAgICAgICAgICAgbGlzdDogWycnLCBsYW5nLnRvb2xiYXIubGlzdCwgJ2xpc3QnLCAnc3VibWVudScsIGljb25zLmxpc3RfbnVtYmVyXSxcclxuICAgICAgICAgICAgaG9yaXpvbnRhbFJ1bGU6IFsnYnRuX2xpbmUnLCBsYW5nLnRvb2xiYXIuaG9yaXpvbnRhbFJ1bGUsICdob3Jpem9udGFsUnVsZScsICdzdWJtZW51JywgaWNvbnMuaG9yaXpvbnRhbF9ydWxlXSxcclxuICAgICAgICAgICAgdGFibGU6IFsnJywgbGFuZy50b29sYmFyLnRhYmxlLCAndGFibGUnLCAnc3VibWVudScsIGljb25zLnRhYmxlXSxcclxuICAgICAgICAgICAgbGluZUhlaWdodDogWycnLCBsYW5nLnRvb2xiYXIubGluZUhlaWdodCwgJ2xpbmVIZWlnaHQnLCAnc3VibWVudScsIGljb25zLmxpbmVfaGVpZ2h0XSxcclxuICAgICAgICAgICAgdGVtcGxhdGU6IFsnJywgbGFuZy50b29sYmFyLnRlbXBsYXRlLCAndGVtcGxhdGUnLCAnc3VibWVudScsIGljb25zLnRlbXBsYXRlXSxcclxuICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGU6IFsnJywgbGFuZy50b29sYmFyLnBhcmFncmFwaFN0eWxlLCAncGFyYWdyYXBoU3R5bGUnLCAnc3VibWVudScsIGljb25zLnBhcmFncmFwaF9zdHlsZV0sXHJcbiAgICAgICAgICAgIHRleHRTdHlsZTogWycnLCBsYW5nLnRvb2xiYXIudGV4dFN0eWxlLCAndGV4dFN0eWxlJywgJ3N1Ym1lbnUnLCBpY29ucy50ZXh0X3N0eWxlXSxcclxuICAgICAgICAgICAgLyoqIHBsdWdpbnMgLSBkaWFsb2cgKi9cclxuICAgICAgICAgICAgbGluazogWycnLCBsYW5nLnRvb2xiYXIubGluaywgJ2xpbmsnLCAnZGlhbG9nJywgaWNvbnMubGlua10sXHJcbiAgICAgICAgICAgIGltYWdlOiBbJycsIGxhbmcudG9vbGJhci5pbWFnZSwgJ2ltYWdlJywgJ2RpYWxvZycsIGljb25zLmltYWdlXSxcclxuICAgICAgICAgICAgdmlkZW86IFsnJywgbGFuZy50b29sYmFyLnZpZGVvLCAndmlkZW8nLCAnZGlhbG9nJywgaWNvbnMudmlkZW9dLFxyXG4gICAgICAgICAgICBhdWRpbzogWycnLCBsYW5nLnRvb2xiYXIuYXVkaW8sICdhdWRpbycsICdkaWFsb2cnLCBpY29ucy5hdWRpb10sXHJcbiAgICAgICAgICAgIG1hdGg6IFsnJywgbGFuZy50b29sYmFyLm1hdGgsICdtYXRoJywgJ2RpYWxvZycsIGljb25zLm1hdGhdLFxyXG4gICAgICAgICAgICAvKiogcGx1Z2lucyAtIGZpbGVCcm93c2VyICovXHJcbiAgICAgICAgICAgIGltYWdlR2FsbGVyeTogWycnLCBsYW5nLnRvb2xiYXIuaW1hZ2VHYWxsZXJ5LCAnaW1hZ2VHYWxsZXJ5JywgJ2ZpbGVCcm93c2VyJywgaWNvbnMuaW1hZ2VfZ2FsbGVyeV1cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgYSBncm91cCBkaXYgY29udGFpbmluZyBlYWNoIG1vZHVsZVxyXG4gICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9jcmVhdGVNb2R1bGVHcm91cDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IG9EaXYgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIG9EaXYuY2xhc3NOYW1lID0gJ3NlLWJ0bi1tb2R1bGUgc2UtYnRuLW1vZHVsZS1ib3JkZXInO1xyXG5cclxuICAgICAgICBjb25zdCBvVWwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ1VMJyk7XHJcbiAgICAgICAgb1VsLmNsYXNzTmFtZSA9ICdzZS1tZW51LWxpc3QnO1xyXG4gICAgICAgIG9EaXYuYXBwZW5kQ2hpbGQob1VsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ2Rpdic6IG9EaXYsXHJcbiAgICAgICAgICAgICd1bCc6IG9VbFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhIGJ1dHRvbiBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYnV0dG9uQ2xhc3MgY2xhc3NOYW1lIGluIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIFRpdGxlIGluIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFDb21tYW5kIFRoZSBkYXRhLWNvbW1hbmQgcHJvcGVydHkgb2YgdGhlIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFEaXNwbGF5IFRoZSBkYXRhLWRpc3BsYXkgcHJvcGVydHkgb2YgdGhlIGJ1dHRvbiAoJ2RpYWxvZycsICdzdWJtZW51JywgJ2NvbW1hbmQnKVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlubmVySFRNTCBIdG1sIGluIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IF9kaXNhYmxlZCBCdXR0b24gZGlzYWJsZWRcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBfaWNvbnMgSWNvbnNcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfY3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoYnV0dG9uQ2xhc3MsIHRpdGxlLCBkYXRhQ29tbWFuZCwgZGF0YURpc3BsYXksIGlubmVySFRNTCwgX2Rpc2FibGVkLCBfaWNvbnMpIHtcclxuICAgICAgICBjb25zdCBvTGkgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0xJJyk7XHJcbiAgICAgICAgY29uc3Qgb0J1dHRvbiA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7XHJcblxyXG4gICAgICAgIG9CdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xyXG4gICAgICAgIG9CdXR0b24uc2V0QXR0cmlidXRlKCdjbGFzcycsICdzZS1idG4nICsgKGJ1dHRvbkNsYXNzID8gJyAnICsgYnV0dG9uQ2xhc3MgOiAnJykgKyAnIHNlLXRvb2x0aXAnKTtcclxuICAgICAgICBvQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJywgZGF0YUNvbW1hbmQpO1xyXG4gICAgICAgIG9CdXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWRpc3BsYXknLCBkYXRhRGlzcGxheSk7XHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCFpbm5lckhUTUwpIGlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cInNlLWljb24tdGV4dFwiPiE8L3NwYW4+JztcclxuICAgICAgICBpZiAoL15kZWZhdWx0XFwuL2kudGVzdChpbm5lckhUTUwpKSB7XHJcbiAgICAgICAgICAgIGlubmVySFRNTCA9IF9pY29uc1tpbm5lckhUTUwucmVwbGFjZSgvXmRlZmF1bHRcXC4vaSwgJycpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9edGV4dFxcLi9pLnRlc3QoaW5uZXJIVE1MKSkge1xyXG4gICAgICAgICAgICBpbm5lckhUTUwgPSBpbm5lckhUTUwucmVwbGFjZSgvXnRleHRcXC4vaSwgJycpO1xyXG4gICAgICAgICAgICBvQnV0dG9uLmNsYXNzTmFtZSArPSAnIHNlLWJ0bi1tb3JlLXRleHQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5uZXJIVE1MICs9ICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyAodGl0bGUgfHwgZGF0YUNvbW1hbmQpICsgJzwvc3Bhbj48L3NwYW4+JztcclxuXHJcbiAgICAgICAgaWYgKF9kaXNhYmxlZCkgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgb0J1dHRvbi5pbm5lckhUTUwgPSBpbm5lckhUTUw7XHJcbiAgICAgICAgb0xpLmFwcGVuZENoaWxkKG9CdXR0b24pO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnbGknOiBvTGksXHJcbiAgICAgICAgICAgICdidXR0b24nOiBvQnV0dG9uXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGVkaXRvciBIVE1MXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkb2MgZG9jdW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBidXR0b25MaXN0IG9wdGlvbi5idXR0b25MaXN0XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxudWxsfSBfcGx1Z2lucyBQbHVnaW5zXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zIG9wdGlvbnNcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgZWxlbWVudDogKEVsZW1lbnQpIFRvb2xiYXIgZWxlbWVudCwgcGx1Z2luczogKEFycmF5fG51bGwpIFBsdWdpbnMgQXJyYXksIHBsdWdpbkNhbGxCdXR0b25zOiAoT2JqZWN0KSwgcmVzcG9uc2l2ZUJ1dHRvbnM6IChBcnJheSkgfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2NyZWF0ZVRvb2xCYXI6IGZ1bmN0aW9uIChkb2MsIGJ1dHRvbkxpc3QsIF9wbHVnaW5zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yX3ZlcnRpY2FsID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIHNlcGFyYXRvcl92ZXJ0aWNhbC5jbGFzc05hbWUgPSAnc2UtdG9vbGJhci1zZXBhcmF0b3ItdmVydGljYWwnO1xyXG5cclxuICAgICAgICBjb25zdCB0b29sX2JhciA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICB0b29sX2Jhci5jbGFzc05hbWUgPSAnc2UtdG9vbGJhciBzdW4tZWRpdG9yLWNvbW1vbic7XHJcblxyXG4gICAgICAgIGNvbnN0IF9idXR0b25UcmF5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIF9idXR0b25UcmF5LmNsYXNzTmFtZSA9ICdzZS1idG4tdHJheSc7XHJcbiAgICAgICAgdG9vbF9iYXIuYXBwZW5kQ2hpbGQoX2J1dHRvblRyYXkpO1xyXG5cclxuICAgICAgICAvKiogY3JlYXRlIGJ1dHRvbiBsaXN0ICovXHJcbiAgICAgICAgYnV0dG9uTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYnV0dG9uTGlzdCkpO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gb3B0aW9ucy5pY29ucztcclxuICAgICAgICBjb25zdCBkZWZhdWx0QnV0dG9uTGlzdCA9IHRoaXMuX2RlZmF1bHRCdXR0b25zKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbkNhbGxCdXR0b25zID0ge307XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2l2ZUJ1dHRvbnMgPSBbXTtcclxuICAgICAgICBjb25zdCBwbHVnaW5zID0ge307XHJcbiAgICAgICAgaWYgKF9wbHVnaW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbnNWYWx1ZXMgPSBfcGx1Z2lucy5sZW5ndGggPyBfcGx1Z2lucyA6IE9iamVjdC5rZXlzKF9wbHVnaW5zKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gX3BsdWdpbnNbbmFtZV07IH0pO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGx1Z2luc1ZhbHVlcy5sZW5ndGgsIHA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcCA9IHBsdWdpbnNWYWx1ZXNbaV0uZGVmYXVsdCB8fCBwbHVnaW5zVmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luc1twLm5hbWVdID0gcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1vZHVsZSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGJ1dHRvbiA9IG51bGw7XHJcbiAgICAgICAgbGV0IG1vZHVsZUVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBidXR0b25FbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgcGx1Z2luTmFtZSA9ICcnO1xyXG4gICAgICAgIGxldCB2ZXJ0aWNhbCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1vcmVMYXllciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbW9yZUxheWVyLmNsYXNzTmFtZSA9ICdzZS10b29sYmFyLW1vcmUtbGF5ZXInO1xyXG5cclxuICAgICAgICBidXR0b25Hcm91cExvb3A6XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1vcmUsIG1vcmVDb250YWluZXIsIG1vcmVDb21tYW5kLCBidXR0b25Hcm91cCwgYWxpZ247IGkgPCBidXR0b25MaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1vcmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgYWxpZ24gPSAnJztcclxuICAgICAgICAgICAgYnV0dG9uR3JvdXAgPSBidXR0b25MaXN0W2ldO1xyXG4gICAgICAgICAgICBtb2R1bGVFbGVtZW50ID0gdGhpcy5fY3JlYXRlTW9kdWxlR3JvdXAoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGJ1dHRvbiBvYmplY3RcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBidXR0b25Hcm91cCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJ1dHRvbnMgbG9vcFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDAsIG1vcmVCdXR0b247IGogPCBidXR0b25Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGJ1dHRvbkdyb3VwW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vcmVCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFwlXFxkKy8udGVzdChidXR0b24pICYmIGogPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uR3JvdXBbMF0gPSBidXR0b24ucmVwbGFjZSgvW15cXGRdL2csICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZUJ1dHRvbnMucHVzaChidXR0b25Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxpc3Quc3BsaWNlKGktLSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGJ1dHRvbkdyb3VwTG9vcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidXR0b24gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnV0dG9uLmFkZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZSA9IGJ1dHRvbi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gZGVmYXVsdEJ1dHRvbkxpc3RbcGx1Z2luTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zW3BsdWdpbk5hbWVdID0gYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZSA9IGJ1dHRvbi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gW2J1dHRvbi5idXR0b25DbGFzcywgYnV0dG9uLnRpdGxlLCBidXR0b24ubmFtZSwgYnV0dG9uLmRhdGFEaXNwbGF5LCBidXR0b24uaW5uZXJIVE1MLCBidXR0b24uX2Rpc2FibGVkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWduXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcLS8udGVzdChidXR0b24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbiA9IGJ1dHRvbi5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVFbGVtZW50LmRpdi5zdHlsZS5mbG9hdCA9IGFsaWduO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcOi8udGVzdChidXR0b24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBidXR0b24ubWF0Y2goL15cXDooW15cXC1dKylcXC0oW15cXC1dKylcXC0oW15cXC1dKykvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVDb21tYW5kID0gJ19fc2VfXycgKyBtYXRjaGVkWzFdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gbWF0Y2hlZFsyXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckhUTUwgPSBtYXRjaGVkWzNdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IFsnc2UtYnRuLW1vcmUnLCB0aXRsZSwgbW9yZUNvbW1hbmQsICdNT1JFJywgaW5uZXJIVE1MXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBidXR0b25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gZGVmYXVsdEJ1dHRvbkxpc3RbYnV0dG9uXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZSA9IGJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbSA9IHBsdWdpbnNbcGx1Z2luTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbSkgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLnRvb2xiYXIuZmFpbF0gVGhlIGJ1dHRvbiBuYW1lIG9mIGEgcGx1Z2luIHRoYXQgZG9lcyBub3QgZXhpc3QuIFsnICsgcGx1Z2luTmFtZSArICddJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBbY3VzdG9tLmJ1dHRvbkNsYXNzLCBjdXN0b20udGl0bGUsIGN1c3RvbS5uYW1lLCBjdXN0b20uZGlzcGxheSwgY3VzdG9tLmlubmVySFRNTCwgY3VzdG9tLl9kaXNhYmxlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkVsZW1lbnQgPSB0aGlzLl9jcmVhdGVCdXR0b24obW9kdWxlWzBdLCBtb2R1bGVbMV0sIG1vZHVsZVsyXSwgbW9kdWxlWzNdLCBtb2R1bGVbNF0sIG1vZHVsZVs1XSwgaWNvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIChtb3JlID8gbW9yZUNvbnRhaW5lciA6IG1vZHVsZUVsZW1lbnQudWwpLmFwcGVuZENoaWxkKGJ1dHRvbkVsZW1lbnQubGkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luc1twbHVnaW5OYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5DYWxsQnV0dG9uc1twbHVnaW5OYW1lXSA9IGJ1dHRvbkVsZW1lbnQuYnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbW9yZSBidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9yZUJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUNvbnRhaW5lciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVDb250YWluZXIuY2xhc3NOYW1lID0gJ3NlLW1vcmUtbGF5ZXIgJyArIG1vcmVDb21tYW5kO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlQ29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwic2UtbW9yZS1mb3JtXCI+PHVsIGNsYXNzPVwic2UtbWVudS1saXN0XCInICsgKGFsaWduID8gJyBzdHlsZT1cImZsb2F0OiAnICsgYWxpZ24gKyAnO1wiJyA6ICcnKSArICc+PC91bD48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlTGF5ZXIuYXBwZW5kQ2hpbGQobW9yZUNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVDb250YWluZXIgPSBtb3JlQ29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkLmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdiA9ICBzZXBhcmF0b3JfdmVydGljYWwuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBfYnV0dG9uVHJheS5hcHBlbmRDaGlsZChzdik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIF9idXR0b25UcmF5LmFwcGVuZENoaWxkKG1vZHVsZUVsZW1lbnQuZGl2KTtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvKiogbGluZSBicmVhayAgKi9cclxuICAgICAgICAgICAgZWxzZSBpZiAoL15cXC8kLy50ZXN0KGJ1dHRvbkdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW50ZXJEaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICBlbnRlckRpdi5jbGFzc05hbWUgPSAnc2UtYnRuLW1vZHVsZS1lbnRlcic7XHJcbiAgICAgICAgICAgICAgICBfYnV0dG9uVHJheS5hcHBlbmRDaGlsZChlbnRlckRpdik7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKF9idXR0b25UcmF5LmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBfYnV0dG9uVHJheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoX2J1dHRvblRyYXkuZmlyc3RFbGVtZW50Q2hpbGQsICdzZS1idG4tbW9kdWxlLWJvcmRlcicpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ydGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdiA9ICBzZXBhcmF0b3JfdmVydGljYWwuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBzdi5zdHlsZS5mbG9hdCA9IF9idXR0b25UcmF5Lmxhc3RFbGVtZW50Q2hpbGQuc3R5bGUuZmxvYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J1dHRvblRyYXkuYXBwZW5kQ2hpbGQoc3YpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNpdmVCdXR0b25zLmxlbmd0aCA+IDApIHJlc3BvbnNpdmVCdXR0b25zLnVuc2hpZnQoYnV0dG9uTGlzdCk7XHJcbiAgICAgICAgaWYgKG1vcmVMYXllci5jaGlsZHJlbi5sZW5ndGggPiAwKSBfYnV0dG9uVHJheS5hcHBlbmRDaGlsZChtb3JlTGF5ZXIpO1xyXG5cclxuICAgICAgICAvLyBtZW51IHRyYXlcclxuICAgICAgICBjb25zdCBfbWVudVRyYXkgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgX21lbnVUcmF5LmNsYXNzTmFtZSA9ICdzZS1tZW51LXRyYXknO1xyXG4gICAgICAgIHRvb2xfYmFyLmFwcGVuZENoaWxkKF9tZW51VHJheSk7XHJcblxyXG4gICAgICAgIC8vIGNvdmVyXHJcbiAgICAgICAgY29uc3QgdG9vbF9jb3ZlciA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICB0b29sX2NvdmVyLmNsYXNzTmFtZSA9ICdzZS10b29sYmFyLWNvdmVyJztcclxuICAgICAgICB0b29sX2Jhci5hcHBlbmRDaGlsZCh0b29sX2NvdmVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ2VsZW1lbnQnOiB0b29sX2JhcixcclxuICAgICAgICAgICAgJ3BsdWdpbnMnOiBwbHVnaW5zLFxyXG4gICAgICAgICAgICAncGx1Z2luQ2FsbEJ1dHRvbnMnOiBwbHVnaW5DYWxsQnV0dG9ucyxcclxuICAgICAgICAgICAgJ3Jlc3BvbnNpdmVCdXR0b25zJzogcmVzcG9uc2l2ZUJ1dHRvbnMsXHJcbiAgICAgICAgICAgICdfbWVudVRyYXknOiBfbWVudVRyYXksXHJcbiAgICAgICAgICAgICdfYnV0dG9uVHJheSc6IF9idXR0b25UcmF5XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBFbGVtZW50cyBhbmQgdmFyaWFibGVzIHlvdSBzaG91bGQgaGF2ZVxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgdGV4dGFyZWEgZWxlbWVudFxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29ucyBUb29sYmFyIGVsZW1lbnQgeW91IGNyZWF0ZWRcclxuICogQHBhcmFtIHtKU09OfE9iamVjdH0gb3B0aW9ucyBJbnNlcnRlZCBvcHRpb25zXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IHtFbGVtZW50cywgdmFyaWFibGVzIG9mIHRoZSBlZGl0b3IsIG9wdGlvbn1cclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IF9Db250ZXh0ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbnMsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZWxlbWVudDoge1xyXG4gICAgICAgICAgICBvcmlnaW5FbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICB0b3BBcmVhOiBjb25zLl90b3AsXHJcbiAgICAgICAgICAgIHJlbGF0aXZlOiBjb25zLl9yZWxhdGl2ZSxcclxuICAgICAgICAgICAgdG9vbGJhcjogY29ucy5fdG9vbEJhcixcclxuICAgICAgICAgICAgX2J1dHRvblRyYXk6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLnNlLWJ0bi10cmF5JyksXHJcbiAgICAgICAgICAgIF9tZW51VHJheTogY29ucy5fbWVudVRyYXksXHJcbiAgICAgICAgICAgIHJlc2l6aW5nQmFyOiBjb25zLl9yZXNpemluZ0JhcixcclxuICAgICAgICAgICAgbmF2aWdhdGlvbjogY29ucy5fbmF2aWdhdGlvbixcclxuICAgICAgICAgICAgY2hhcldyYXBwZXI6IGNvbnMuX2NoYXJXcmFwcGVyLFxyXG4gICAgICAgICAgICBjaGFyQ291bnRlcjogY29ucy5fY2hhckNvdW50ZXIsXHJcbiAgICAgICAgICAgIGVkaXRvckFyZWE6IGNvbnMuX2VkaXRvckFyZWEsXHJcbiAgICAgICAgICAgIHd5c2l3eWdGcmFtZTogY29ucy5fd3lzaXd5Z0FyZWEsXHJcbiAgICAgICAgICAgIHd5c2l3eWc6IGNvbnMuX3d5c2l3eWdBcmVhLCAvLyBpZiAob3B0aW9ucy5pZnJhbWUpIGNvbnMuX3d5c2l3eWdBcmVhLmNvbnRlbnREb2N1bWVudC5ib2R5XHJcbiAgICAgICAgICAgIGNvZGU6IGNvbnMuX2NvZGVBcmVhLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogY29ucy5fcGxhY2Vob2xkZXIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IGNvbnMuX2xvYWRpbmcsXHJcbiAgICAgICAgICAgIGxpbmVCcmVha2VyOiBjb25zLl9saW5lQnJlYWtlcixcclxuICAgICAgICAgICAgbGluZUJyZWFrZXJfdDogY29ucy5fbGluZUJyZWFrZXJfdCxcclxuICAgICAgICAgICAgbGluZUJyZWFrZXJfYjogY29ucy5fbGluZUJyZWFrZXJfYixcclxuICAgICAgICAgICAgcmVzaXplQmFja2dyb3VuZDogY29ucy5fcmVzaXplQmFjayxcclxuICAgICAgICAgICAgX3N0aWNreUR1bW15OiBjb25zLl9zdGlja3lEdW1teSxcclxuICAgICAgICAgICAgX2Fycm93OiBjb25zLl9hcnJvd1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9vbDoge1xyXG4gICAgICAgICAgICBjb3ZlcjogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuc2UtdG9vbGJhci1jb3ZlcicpLFxyXG4gICAgICAgICAgICBib2xkOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9ib2xkJyksXHJcbiAgICAgICAgICAgIHVuZGVybGluZTogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfdW5kZXJsaW5lJyksXHJcbiAgICAgICAgICAgIGl0YWxpYzogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfaXRhbGljJyksXHJcbiAgICAgICAgICAgIHN0cmlrZTogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfc3RyaWtlJyksXHJcbiAgICAgICAgICAgIHN1YnNjcmlwdDogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfc3Vic2NyaXB0JyksXHJcbiAgICAgICAgICAgIHN1cGVyc2NyaXB0OiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9zdXBlcnNjcmlwdCcpLFxyXG4gICAgICAgICAgICB1bmRvOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF91bmRvJyksXHJcbiAgICAgICAgICAgIHJlZG86IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLl9zZV9jb21tYW5kX3JlZG8nKSxcclxuICAgICAgICAgICAgc2F2ZTogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfc2F2ZScpLFxyXG4gICAgICAgICAgICBvdXRkZW50OiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfY29tbWFuZF9vdXRkZW50JyksXHJcbiAgICAgICAgICAgIGluZGVudDogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfaW5kZW50JyksXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLl9zZV9jb21tYW5kX2Z1bGxTY3JlZW4nKSxcclxuICAgICAgICAgICAgc2hvd0Jsb2NrczogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfc2hvd0Jsb2NrcycpLFxyXG4gICAgICAgICAgICBjb2RlVmlldzogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbW1hbmRfY29kZVZpZXcnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcclxuICAgICAgICBvcHRpb246IG9wdGlvbnNcclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBfQ29udGV4dDsiLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdub3RpY2UnLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0IFxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcbiAgICAgICAgY29udGV4dC5ub3RpY2UgPSB7fTtcblxuICAgICAgICAvKiogZGlhbG9nICovXG4gICAgICAgIGxldCBub3RpY2VfZGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICBsZXQgbm90aWNlX3NwYW4gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xuICAgICAgICBsZXQgbm90aWNlX2J1dHRvbiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdCVVRUT04nKTtcblxuICAgICAgICBub3RpY2VfZGl2LmNsYXNzTmFtZSA9ICdzZS1ub3RpY2UnO1xuICAgICAgICBub3RpY2VfYnV0dG9uLmNsYXNzTmFtZSA9ICdjbG9zZSc7XG4gICAgICAgIG5vdGljZV9idXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlJyk7XG4gICAgICAgIG5vdGljZV9idXR0b24uc2V0QXR0cmlidXRlKCd0aXRsZScsIGNvcmUubGFuZy5kaWFsb2dCb3guY2xvc2UpO1xuICAgICAgICBub3RpY2VfYnV0dG9uLmlubmVySFRNTCA9IGNvcmUuaWNvbnMuY2FuY2VsO1xuICAgICAgICBcbiAgICAgICAgbm90aWNlX2Rpdi5hcHBlbmRDaGlsZChub3RpY2Vfc3Bhbik7XG4gICAgICAgIG5vdGljZV9kaXYuYXBwZW5kQ2hpbGQobm90aWNlX2J1dHRvbik7XG5cbiAgICAgICAgY29udGV4dC5ub3RpY2UubW9kYWwgPSBub3RpY2VfZGl2O1xuICAgICAgICBjb250ZXh0Lm5vdGljZS5tZXNzYWdlID0gbm90aWNlX3NwYW47XG5cbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cbiAgICAgICAgbm90aWNlX2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja19jYW5jZWwuYmluZChjb3JlKSk7XG4gICAgICAgIFxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cbiAgICAgICAgY29udGV4dC5lbGVtZW50LmVkaXRvckFyZWEuYXBwZW5kQ2hpbGQobm90aWNlX2Rpdik7XG4gICAgICAgIFxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXG4gICAgICAgIG5vdGljZV9kaXYgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZSBFdmVudCBvYmplY3RcbiAgICAgKi9cbiAgICBvbkNsaWNrX2NhbmNlbDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnBsdWdpbnMubm90aWNlLmNsb3NlLmNhbGwodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiAgT3BlbiB0aGUgbm90aWNlIHBhbmVsXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgTm90aWNlIG1lc3NhZ2VcbiAgICAgKi9cbiAgICBvcGVuOiBmdW5jdGlvbiAodGV4dCkgIHtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm5vdGljZS5tZXNzYWdlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm5vdGljZS5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uICBPcGVuIHRoZSBub3RpY2UgcGFuZWxcbiAgICAgKi9cbiAgICBjbG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQubm90aWNlLm1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxufTtcbiIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgY29yZSBmcm9tICcuL2xpYi9jb3JlJztcbmltcG9ydCB1dGlsIGZyb20gJy4vbGliL3V0aWwnO1xuaW1wb3J0IF9Db25zdHJ1Y3RvciBmcm9tICcuL2xpYi9jb25zdHJ1Y3Rvcic7XG5pbXBvcnQgX0NvbnRleHQgZnJvbSAnLi9saWIvY29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgY3JlYXRlIGZ1bmN0aW9uIHdpdGggcHJlc2V0IG9wdGlvbnMuXG4gICAgICogSWYgdGhlIG9wdGlvbnMgb3ZlcmxhcCwgdGhlIG9wdGlvbnMgb2YgdGhlICdjcmVhdGUnIGZ1bmN0aW9uIHRha2UgcHJlY2VkZW5jZS5cbiAgICAgKiBAcGFyYW0ge0pzb259IG9wdGlvbnMgSW5pdGlhbGl6YXRpb24gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICovXG4gICAgaW5pdDogZnVuY3Rpb24gKGluaXRfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoaWRPckVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoaWRPckVsZW1lbnQsIG9wdGlvbnMsIGluaXRfb3B0aW9ucyk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSB0aGUgc3VuZWRpdG9yXG4gICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudH0gaWRPckVsZW1lbnQgdGV4dGFyZWEgSWQgb3IgdGV4dGFyZWEgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SlNPTnxPYmplY3R9IG9wdGlvbnMgdXNlciBvcHRpb25zXG4gICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAgKi9cbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChpZE9yRWxlbWVudCwgb3B0aW9ucywgX2luaXRfb3B0aW9ucykge1xuICAgICAgICB1dGlsLl9wcm9wZXJ0aWVzSW5pdCgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgaWYgKF9pbml0X29wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSAgW19pbml0X29wdGlvbnMsIG9wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAoaW5pdCwgb3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzT3duKG9wdGlvbiwga2V5KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdwbHVnaW5zJyAmJiBvcHRpb25ba2V5XSAmJiBpbml0W2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5pdFtrZXldLCBvID0gb3B0aW9uW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaS5sZW5ndGggPyBpIDogT2JqZWN0LmtleXMoaSkubWFwKGZ1bmN0aW9uKG5hbWUpIHsgcmV0dXJuIGlbbmFtZV07IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG8ubGVuZ3RoID8gbyA6IE9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbihuYW1lKSB7IHJldHVybiBvW25hbWVdOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IChvLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0dXJuIGkuaW5kZXhPZih2YWwpID09PSAtMTsgfSkpLmNvbmNhdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdHlwZW9mIGlkT3JFbGVtZW50ID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkT3JFbGVtZW50KSA6IGlkT3JFbGVtZW50O1xuXG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZE9yRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jcmVhdGUuZmFpbF0gVGhlIGVsZW1lbnQgZm9yIHRoYXQgaWQgd2FzIG5vdCBmb3VuZCAoSUQ6XCInICsgaWRPckVsZW1lbnQgKyAnXCIpJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNyZWF0ZS5mYWlsXSBzdW5lZGl0b3IgcmVxdWlyZXMgdGV4dGFyZWFcXCdzIGVsZW1lbnQgb3IgaWQgdmFsdWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnMgPSBfQ29uc3RydWN0b3IuaW5pdChlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoY29ucy5jb25zdHJ1Y3RlZC5fdG9wLmlkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnMuY29uc3RydWN0ZWQuX3RvcC5pZCkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNyZWF0ZS5mYWlsXSBUaGUgSUQgb2YgdGhlIHN1bmVkaXRvciB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYWxyZWFkeSBleGlzdHMgKElEOlwiJyArIGNvbnMuY29uc3RydWN0ZWQuX3RvcC5pZCArICdcIiknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb3JlKF9Db250ZXh0KGVsZW1lbnQsIGNvbnMuY29uc3RydWN0ZWQsIGNvbnMub3B0aW9ucyksIGNvbnMucGx1Z2luQ2FsbEJ1dHRvbnMsIGNvbnMucGx1Z2lucywgY29ucy5vcHRpb25zLmxhbmcsIG9wdGlvbnMsIGNvbnMuX3Jlc3BvbnNpdmVCdXR0b25zKTtcbiAgICB9XG59O1xuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBfQ29uc3RydWN0b3IgZnJvbSAnLi9jb25zdHJ1Y3Rvcic7XHJcbmltcG9ydCBfQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xyXG5pbXBvcnQgX2hpc3RvcnkgZnJvbSAnLi9oaXN0b3J5JztcclxuaW1wb3J0IF91dGlsIGZyb20gJy4vdXRpbCc7XHJcbmltcG9ydCBfbm90aWNlIGZyb20gJy4uL3BsdWdpbnMvbW9kdWxlcy9fbm90aWNlJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gU3VuRWRpdG9yIGNvbnN0dWN0b3IgZnVuY3Rpb24uXHJcbiAqIGNyZWF0ZSBjb3JlIG9iamVjdCBhbmQgZXZlbnQgcmVnaXN0cmF0aW9uLlxyXG4gKiBjb3JlLCBldmVudCwgZnVuY3Rpb25zXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5DYWxsQnV0dG9uc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gcGx1Z2lucyBcclxuICogQHBhcmFtIHtPYmplY3R9IGxhbmdcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtIHtPYmplY3R9IF9yZXNwb25zaXZlQnV0dG9uc1xyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBmdW5jdGlvbnMgT2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY29udGV4dCwgcGx1Z2luQ2FsbEJ1dHRvbnMsIHBsdWdpbnMsIGxhbmcsIG9wdGlvbnMsIF9yZXNwb25zaXZlQnV0dG9ucykge1xyXG4gICAgY29uc3QgX2QgPSBjb250ZXh0LmVsZW1lbnQub3JpZ2luRWxlbWVudC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xyXG4gICAgY29uc3QgX3cgPSBfZC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XHJcbiAgICBjb25zdCB1dGlsID0gX3V0aWw7XHJcbiAgICBjb25zdCBpY29ucyA9IG9wdGlvbnMuaWNvbnM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gZWRpdG9yIGNvcmUgb2JqZWN0XHJcbiAgICAgKiBzaG91bGQgYWx3YXlzIGJpbmQgdGhpcyBvYmplY3Qgd2hlbiByZWdpc3RlcmluZyBhbiBldmVudCBpbiB0aGUgcGx1Zy1pbi5cclxuICAgICAqL1xyXG4gICAgY29uc3QgY29yZSA9IHtcclxuICAgICAgICBfZDogX2QsXHJcbiAgICAgICAgX3c6IF93LFxyXG4gICAgICAgIF9wYXJzZXI6IG5ldyBfdy5ET01QYXJzZXIoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERvY3VtZW50IG9iamVjdCBvZiB0aGUgaWZyYW1lIGlmIGNyZWF0ZWQgYXMgYW4gaWZyYW1lIHx8IF9kXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfd2Q6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBXaW5kb3cgb2JqZWN0IG9mIHRoZSBpZnJhbWUgaWYgY3JlYXRlZCBhcyBhbiBpZnJhbWUgfHwgX3dcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF93dzogbnVsbCxcclxuICAgICAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2VzdCBTaGFkb3dSb290IHRvIGVkaXRvciBpZiBmb3VuZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NoYWRvd1Jvb3Q6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBCbG9jayBjb250cm9sbGVyIG1vdXNlZG93biBldmVudHMgaW4gXCJzaGFkb3dSb290XCIgZW52aXJvbm1lbnRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zaGFkb3dSb290Q29udHJvbGxlckV2ZW50VGFyZ2V0OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVXRpbCBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB1dGlsOiB1dGlsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb25zIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVkaXRvciBvcHRpb25zXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3B0aW9uczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbXB1dGVkIHN0eWxlIG9mIHRoZSB3eXNpd3lnIGFyZWEgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnKSlcclxuICAgICAgICAgKi9cclxuICAgICAgICB3d0NvbXB1dGVkU3R5bGU6IF93LmdldENvbXB1dGVkU3R5bGUoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTm90aWNlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5vdGljZTogX25vdGljZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlZmF1bHQgaWNvbnMgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWNvbnM6IGljb25zLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSGlzdG9yeSBvYmplY3QgZm9yIHVuZG8sIHJlZG9cclxuICAgICAgICAgKi9cclxuICAgICAgICBoaXN0b3J5OiBudWxsLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbGVtZW50cyBhbmQgdXNlciBvcHRpb25zIHBhcmFtZXRlcnMgb2YgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBQbHVnaW4gYnV0dG9uc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBsdWdpbkNhbGxCdXR0b25zOiBwbHVnaW5DYWxsQnV0dG9ucyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIExvYWRlZCBwbHVnaW5zXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGx1Z2luczogcGx1Z2lucyB8fCB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdGhlIHBsdWdpbiBpcyBpbml0aWFsaXplZFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluaXRQbHVnaW5zOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE9iamVjdCBmb3IgbWFuYWdpbmcgc3VibWVudSBlbGVtZW50c1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3RhcmdldFBsdWdpbnM6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2F2ZSByZW5kZXJlZCBzdWJtZW51cyBhbmQgY29udGFpbmVyc1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21lbnVUcmF5OiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGxvYWRlZCBsYW5ndWFnZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxhbmc6IGxhbmcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VsZWN0aW9uIG5vZGUgKGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpKSB0byB3aGljaCB0aGUgZWZmZWN0IHdhcyBsYXN0IGFwcGxpZWRcclxuICAgICAgICAgKi9cclxuICAgICAgICBlZmZlY3ROb2RlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gc3VibWVudSBlbGVtZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3VibWVudTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGNvbnRhaW5lciBlbGVtZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udGFpbmVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gY3VycmVudCBzdWJtZW50IG5hbWVcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zdWJtZW51TmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBiaW5kZWQgc3VibWVudU9mZiBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9iaW5kZWRTdWJtZW51T2ZmOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYmluZGVkIGNvbnRhaW5lck9mZiBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9iaW5kZWRDb250YWluZXJPZmY6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBhY3RpdmUgYnV0dG9uIGVsZW1lbnQgaW4gc3VibWVudVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN1Ym1lbnVBY3RpdmVCdXR0b246IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBhY3RpdmUgYnV0dG9uIGVsZW1lbnQgaW4gY29udGFpbmVyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udGFpbmVyQWN0aXZlQnV0dG9uOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGVsZW1lbnRzIGFycmF5IHRvIGJlIHByb2Nlc3NlZCB1bnZpc2libGUgd2hlbiB0aGUgY29udHJvbGxlcnNPZmYgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgKHJlc2l6aW5nLCBsaW5rIG1vZGlmaWVkIGJ1dHRvbiwgdGFibGUgY29udHJvbGxlcilcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250cm9sbGVyQXJyYXk6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNhbGxlZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250cm9sbGVyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY3VycmVudENvbnRyb2xsZXJOYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSB0YXJnZXQgZWxlbWVudCBvZiBjdXJyZW50IGNvbnRyb2xsZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjdXJyZW50Q29udHJvbGxlclRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBmaWxlIGNvbXBvbmVudCBvYmplY3Qgb2YgY3VycmVudCBzZWxlY3RlZCBmaWxlIHRhZyAoZ2V0RmlsZUNvbXBvbmVudClcclxuICAgICAgICAgKi9cclxuICAgICAgICBjdXJyZW50RmlsZUNvbXBvbmVudEluZm86IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBbiBhcnJheSBvZiBidXR0b25zIHdob3NlIGNsYXNzIG5hbWUgaXMgbm90IFwic2UtY29kZS12aWV3LWVuYWJsZWRcIlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvZGVWaWV3RGlzYWJsZWRCdXR0b25zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQW4gYXJyYXkgb2YgYnV0dG9ucyB3aG9zZSBjbGFzcyBuYW1lIGlzIG5vdCBcInNlLXJlc2l6aW5nLWVuYWJsZWRcIlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlc2l6aW5nRGlzYWJsZWRCdXR0b25zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYWN0aXZlIG1vcmUgbGF5ZXIgZWxlbWVudCBpbiBzdWJtZW51XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbW9yZUxheWVyQWN0aXZlQnV0dG9uOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGFnIHdoaXRlbGlzdCBSZWdFeHAgb2JqZWN0IHVzZWQgaW4gXCJfY29uc2lzdGVuY3lDaGVja09mSFRNTFwiIG1ldGhvZFxyXG4gICAgICAgICAqIF4ob3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdCkkXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVnRXhwIHdoZW4gdXNpbmcgY2hlY2sgZGlzYWxsb3dkIHRhZ3MuIChiLCBpLCBpbnMsIHN0cmlrZSwgcylcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9kaXNhbGxvd2VkVGV4dFRhZ3NSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFZGl0b3IgdGFncyB3aGl0ZWxpc3QgKFJlZ0V4cCBvYmplY3QpXHJcbiAgICAgICAgICogdXRpbC5jcmVhdGVUYWdzV2hpdGVsaXN0KG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZWRpdG9yVGFnc1doaXRlbGlzdFJlZ0V4cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRhZyB3aGl0ZWxpc3Qgd2hlbiBwYXN0aW5nIChSZWdFeHAgb2JqZWN0KVxyXG4gICAgICAgICAqIHV0aWwuY3JlYXRlVGFnc1doaXRlbGlzdChvcHRpb25zLnBhc3RlVGFnc1doaXRlbGlzdClcclxuICAgICAgICAgKi9cclxuICAgICAgICBwYXN0ZVRhZ3NXaGl0ZWxpc3RSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBCb29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgdGhlIGVkaXRvciBoYXMgZm9jdXNcclxuICAgICAgICAgKi9cclxuICAgICAgICBoYXNGb2N1czogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBCb29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgdGhlIGVkaXRvciBpcyBkaXNhYmxlZFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlzRGlzYWJsZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXR0cmlidXRlcyB3aGl0ZWxpc3QgdXNlZCBieSB0aGUgY2xlYW5IVE1MIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2F0dHJpYnV0ZXNXaGl0ZWxpc3RSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBdHRyaWJ1dGVzIG9mIHRhZ3Mgd2hpdGVsaXN0IHVzZWQgYnkgdGhlIGNsZWFuSFRNTCBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9hdHRyaWJ1dGVzVGFnc1doaXRlbGlzdDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGJpbmRlZCBjb250cm9sbGVyc09mZiBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9iaW5kQ29udHJvbGxlcnNPZmY6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJcyBpbmxpbmUgbW9kZT9cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9pc0lubGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElzIGJhbGxvb258YmFsbG9vbi1hbHdheXMgbW9kZT9cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9pc0JhbGxvb246IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJcyBiYWxsb29uLWFsd2F5cyBtb2RlP1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzQmFsbG9vbkFsd2F5czogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlcXVpcmVkIHZhbHVlIHdoZW4gdXNpbmcgaW5saW5lIG1vZGUgdG8gc3RpY2t5IHRvb2xiYXJcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9pbmxpbmVUb29sYmFyQXR0cjoge3RvcDogJycsIHdpZHRoOiAnJywgaXNTaG93OiBmYWxzZX0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBWYXJpYWJsZSB0aGF0IGNvbnRyb2xzIHRoZSBcImJsdXJcIiBldmVudCBpbiB0aGUgZWRpdG9yIG9mIGlubGluZSBvciBiYWxsb29uIG1vZGUgd2hlbiB0aGUgZm9jdXMgaXMgbW92ZWQgdG8gc3VibWVudVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX25vdEhpZGVUb29sYmFyOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlIHZhbHVlIHRoYXQgc3RpY2t5IHRvb2xiYXIgbW9kZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3N0aWNreTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBWYXJpYWJsZXMgZm9yIGNvbnRyb2xsaW5nIGZvY3VzIGFuZCBibHVyIGV2ZW50c1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2FudGlCbHVyOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBsaW5lIGJyZWFrZXIgZWxlbWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2xpbmVCcmVha2VyOiBudWxsLFxyXG4gICAgICAgIF9saW5lQnJlYWtlckJ1dHRvbjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRydWUsIChpbml0aWFsaXplLCByZXNldCkgYWxsIGluZGV4ZXMgb2YgaW1hZ2UsIHZpZGVvIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY29tcG9uZW50c0luZm9Jbml0OiB0cnVlLFxyXG4gICAgICAgIF9jb21wb25lbnRzSW5mb1Jlc2V0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFBsdWdpbnMgYXJyYXkgd2l0aCBcImFjdGl2ZVwiIG1ldGhvZC5cclxuICAgICAgICAgKiBcImFjdGl2ZVBsdWdpbnNcIiBydW5zIHRoZSBcImFkZFwiIG1ldGhvZCB3aGVuIGNyZWF0aW5nIHRoZSBlZGl0b3IuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWN0aXZlUGx1Z2luczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluZm9ybWF0aW9uIG9mIHRhZ3MgdGhhdCBzaG91bGQgbWFpbnRhaW4gSFRNTCBzdHJ1Y3R1cmUsIHN0eWxlLCBjbGFzcyBuYW1lLCBldGMuIChJbiB1c2UgYnkgXCJtYXRoXCIgcGx1Z2luKVxyXG4gICAgICAgICAqIFdoZW4gaW5zZXJ0aW5nIFwiaHRtbFwiIHN1Y2ggYXMgcGFzdGUsIGl0IGlzIGV4ZWN1dGVkIG9uIHRoZSBcImh0bWxcIiB0byBiZSBpbnNlcnRlZC4gKGNvcmUuY2xlYW5IVE1MKVxyXG4gICAgICAgICAqIEJhc2ljIEVkaXRvciBBY3Rpb25zOlxyXG4gICAgICAgICAqIDEuIEFsbCBjbGFzc2VzIG5vdCBzdGFydGluZyB3aXRoIFwiX19zZV9fXCIgb3IgXCJzZS1cIiBpbiB0aGUgZWRpdG9yIGFyZSByZW1vdmVkLlxyXG4gICAgICAgICAqIDIuIFRoZSBzdHlsZSBvZiBhbGwgdGFncyBleGNlcHQgdGhlIFwic3BhblwiIHRhZyBpcyByZW1vdmVkIGZyb20gdGhlIGVkaXRvci5cclxuICAgICAgICAgKiBcIm1hbmFnZWRUYWdzSW5mb1wiIHN0cnVjdHVyZSBleDpcclxuICAgICAgICAgKiBtYW5hZ2VkVGFnc0luZm86IHtcclxuICAgICAgICAgKiAgIHF1ZXJ5OiAnLl9fc2VfX3h4eCwgc2UteHh4J1xyXG4gICAgICAgICAqICAgbWFwOiB7XHJcbiAgICAgICAgICogICAgICdfX3NlX194eHgnOiBtZXRob2QuYmluZChjb3JlKSxcclxuICAgICAgICAgKiAgICAgJ3NlLXh4eCc6IG1ldGhvZC5iaW5kKGNvcmUpLFxyXG4gICAgICAgICAqICAgfVxyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIERlZmluZSBpbiB0aGUgZm9sbG93aW5nIHJldHVybiBmb3JtYXQgaW4gdGhlIFwibWFuYWdlZFRhZ0luZm9cIiBmdW5jdGlvbiBvZiB0aGUgcGx1Z2luLlxyXG4gICAgICAgICAqIG1hbmFnZWRUYWdJbmZvKCkgPT4ge1xyXG4gICAgICAgICAqICByZXR1cm4ge1xyXG4gICAgICAgICAqICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIENsYXNzIG5hbWUgdG8gaWRlbnRpZnkgdGhlIHRhZy4gKFwiX19zZV9feHh4XCIsIFwic2UteHh4XCIpXHJcbiAgICAgICAgICogICAgLy8gQ2hhbmdlIHRoZSBodG1sIG9mIHRoZSBcImVsZW1lbnRcIi4gKFwiZWxlbWVudFwiIGlzIHRoZSBlbGVtZW50IGZvdW5kIHdpdGggXCJjbGFzc05hbWVcIi4pXHJcbiAgICAgICAgICogICAgLy8gXCJtZXRob2RcIiBpcyBleGVjdXRlZCBieSBiaW5kaW5nIFwiY29yZVwiLlxyXG4gICAgICAgICAqICAgIG1ldGhvZDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgKiAgICAgIC8vIHRoaXMgPT09IGNvcmVcclxuICAgICAgICAgKiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gLy8gKHJlbmRlcmVkIGh0bWwpO1xyXG4gICAgICAgICAqICAgIH1cclxuICAgICAgICAgKiAgfVxyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYW5hZ2VkVGFnc0luZm86IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjYXNoaW5nOiBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA9PT0gJ2J5dGUtaHRtbCdcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jaGFyVHlwZUhUTUw6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgXCJjaGVja0ZpbGVJbmZvXCIgZnVuY3Rpb25zIHdpdGggdGhlIGNvcmUgYm91bmRcclxuICAgICAgICAgKiAoUGx1Z2lucyB3aXRoIFwiY2hlY2tGaWxlSW5mb1wiIGFuZCBcInJlc2V0RmlsZUluZm9cIiBtZXRob2RzKVxyXG4gICAgICAgICAqIFwiZmlsZUluZm9QbHVnaW5zXCIgcnVucyB0aGUgXCJhZGRcIiBtZXRob2Qgd2hlbiBjcmVhdGluZyB0aGUgZWRpdG9yLlxyXG4gICAgICAgICAqIFwiY2hlY2tGaWxlSW5mb1wiIG1ldGhvZCBpcyBhbHdheXMgY2FsbCBqdXN0IGJlZm9yZSB0aGUgXCJjaGFuZ2VcIiBldmVudC5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9maWxlSW5mb1BsdWdpbnNDaGVjazogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIFwicmVzZXRGaWxlSW5mb1wiIGZ1bmN0aW9ucyB3aXRoIHRoZSBjb3JlIGJvdW5kXHJcbiAgICAgICAgICogKFBsdWdpbnMgd2l0aCBcImNoZWNrRmlsZUluZm9cIiBhbmQgXCJyZXNldEZpbGVJbmZvXCIgbWV0aG9kcylcclxuICAgICAgICAgKiBcImNoZWNrRmlsZUluZm9cIiBtZXRob2QgaXMgYWx3YXlzIGNhbGwganVzdCBiZWZvcmUgdGhlIFwiZnVuY3Rpb25zLnNldE9wdGlvbnNcIiBtZXRob2QuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZmlsZUluZm9QbHVnaW5zUmVzZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBWYXJpYWJsZXMgZm9yIGZpbGUgY29tcG9uZW50IG1hbmFnZW1lbnRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9maWxlTWFuYWdlcjoge1xyXG4gICAgICAgICAgICB0YWdzOiBudWxsLFxyXG4gICAgICAgICAgICByZWdFeHA6IG51bGwsXHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nOiBudWxsLFxyXG4gICAgICAgICAgICBwbHVnaW5SZWdFeHA6IG51bGwsXHJcbiAgICAgICAgICAgIHBsdWdpbk1hcDogbnVsbFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlIHRleHQgb3IgY2xhc3NOYW1lIGZvciBlYWNoIHNlbGVjdGlvbiBjaGFuZ2VcclxuICAgICAgICAgKiBBZnRlciBjcmVhdGluZyB0aGUgZWRpdG9yLCBcImFjdGl2ZVBsdWdpbnNcIiBhcmUgYWRkZWQuXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBTVFJPTkcgYm9sZCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IFUgdW5kZXJsaW5lIGJ1dHRvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gRU0gaXRhbGljIGJ1dHRvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gREVMIHN0cmlrZSBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IFNVQiBzdWJzY3JpcHQgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBTVVAgc3VwZXJzY3JpcHQgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBPVVRERU5UIG91dGRlbnQgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBJTkRFTlQgaW5kZW50IGJ1dHRvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbW1hbmRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTdHlsZSBidXR0b24gcmVsYXRlZCB0byBlZGl0IGFyZWFcclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IGZ1bGxTY3JlZW4gZnVsbFNjcmVlbiBidXR0b24gZWxlbWVudFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gc2hvd0Jsb2NrcyBzaG93QmxvY2tzIGJ1dHRvbiBlbGVtZW50XHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBjb2RlVmlldyBjb2RlVmlldyBidXR0b24gZWxlbWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3N0eWxlQ29tbWFuZE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE1hcCBvZiBkZWZhdWx0IGNvbW1hbmRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9kZWZhdWx0Q29tbWFuZDoge1xyXG4gICAgICAgICAgICBib2xkOiBvcHRpb25zLnRleHRUYWdzLmJvbGQsXHJcbiAgICAgICAgICAgIHVuZGVybGluZTogb3B0aW9ucy50ZXh0VGFncy51bmRlcmxpbmUsXHJcbiAgICAgICAgICAgIGl0YWxpYzogb3B0aW9ucy50ZXh0VGFncy5pdGFsaWMsXHJcbiAgICAgICAgICAgIHN0cmlrZTogb3B0aW9ucy50ZXh0VGFncy5zdHJpa2UsXHJcbiAgICAgICAgICAgIHN1YnNjcmlwdDogb3B0aW9ucy50ZXh0VGFncy5zdWIsXHJcbiAgICAgICAgICAgIHN1cGVyc2NyaXB0OiBvcHRpb25zLnRleHRUYWdzLnN1cFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBWYXJpYWJsZXMgdXNlZCBpbnRlcm5hbGx5IGluIGVkaXRvciBvcGVyYXRpb25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzQ29kZVZpZXcgU3RhdGUgb2YgY29kZSB2aWV3XHJcbiAgICAgICAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc0Z1bGxTY3JlZW4gU3RhdGUgb2YgZnVsbCBzY3JlZW5cclxuICAgICAgICAgKiBAcHJvcGVydHkge051bWJlcn0gaW5uZXJIZWlnaHRfZnVsbFNjcmVlbiBJbm5lckhlaWdodCBpbiBlZGl0b3Igd2hlbiBpbiBmdWxsIHNjcmVlblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSByZXNpemVDbGllbnRZIFJlbWVtYmVyIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBlZGl0b3IgYmVmb3JlIHJlc2l6aW5nIHRoZSBlZGl0b3IgKFVzZWQgd2hlbiBjYWxjdWxhdGluZyBkdXJpbmcgcmVzaXplIG9wZXJhdGlvbilcclxuICAgICAgICAgKiBAcHJvcGVydHkge051bWJlcn0gdGFiU2l6ZSBJbmRlbnQgc2l6ZSBvZiB0YWIgKDQpXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvZGVJbmRlbnQgSW5kZW50IHNpemUgb2YgQ29kZSB2aWV3IG1vZGUgKDIpXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IG1pblJlc2l6aW5nU2l6ZSBNaW5pbXVtIHNpemUgb2YgZWRpdGluZyBhcmVhIHdoZW4gcmVzaXplZCB7TnVtYmVyfSAoLnNlLXdyYXBwZXItaW5uZXIge21pbi1oZWlnaHQ6IDY1cHg7fSB8fCA2NSlcclxuICAgICAgICAgKiBAcHJvcGVydHkge0FycmF5fSBjdXJyZW50Tm9kZXMgIEFuIGFycmF5IG9mIHRoZSBjdXJyZW50IGN1cnNvcidzIG5vZGUgc3RydWN0dXJlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfdmFyaWFibGU6IHtcclxuICAgICAgICAgICAgaXNDaGFuZ2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNDb2RlVmlldzogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzRnVsbFNjcmVlbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGlubmVySGVpZ2h0X2Z1bGxTY3JlZW46IDAsXHJcbiAgICAgICAgICAgIHJlc2l6ZUNsaWVudFk6IDAsXHJcbiAgICAgICAgICAgIHRhYlNpemU6IDQsXHJcbiAgICAgICAgICAgIGNvZGVJbmRlbnQ6IDIsXHJcbiAgICAgICAgICAgIG1pblJlc2l6aW5nU2l6ZTogdXRpbC5nZXROdW1iZXIoKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUubWluSGVpZ2h0IHx8ICc2NScpLCAwKSxcclxuICAgICAgICAgICAgY3VycmVudE5vZGVzOiBbXSxcclxuICAgICAgICAgICAgY3VycmVudE5vZGVzTWFwOiBbXSxcclxuICAgICAgICAgICAgX3JhbmdlOiBudWxsLFxyXG4gICAgICAgICAgICBfc2VsZWN0aW9uTm9kZTogbnVsbCxcclxuICAgICAgICAgICAgX29yaWdpbkNzc1RleHQ6IGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlLmNzc1RleHQsXHJcbiAgICAgICAgICAgIF9ib2R5T3ZlcmZsb3c6ICcnLFxyXG4gICAgICAgICAgICBfZWRpdG9yQXJlYU9yaWdpbkNzc1RleHQ6ICcnLFxyXG4gICAgICAgICAgICBfd3lzaXd5Z09yaWdpbkNzc1RleHQ6ICcnLFxyXG4gICAgICAgICAgICBfY29kZU9yaWdpbkNzc1RleHQ6ICcnLFxyXG4gICAgICAgICAgICBfZnVsbFNjcmVlbkF0dHJzOiB7c3RpY2t5OiBmYWxzZSwgYmFsbG9vbjogZmFsc2UsIGlubGluZTogZmFsc2V9LFxyXG4gICAgICAgICAgICBfbGluZUJyZWFrQ29tcDogbnVsbCxcclxuICAgICAgICAgICAgX2xpbmVCcmVha0RpcjogJydcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSWYgdGhlIHBsdWdpbiBpcyBub3QgYWRkZWQsIGFkZCB0aGUgcGx1Z2luIGFuZCBjYWxsIHRoZSAnYWRkJyBmdW5jdGlvbi5cclxuICAgICAgICAgKiBJZiB0aGUgcGx1Z2luIGlzIGFkZGVkIGNhbGwgY2FsbEJhY2sgZnVuY3Rpb24uXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0byBjYWxsXHJcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbEJhY2tGdW5jdGlvbiBGdW5jdGlvbiB0byBiZSBleGVjdXRlZCBpbW1lZGlhdGVseSBhZnRlciBtb2R1bGUgY2FsbFxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBfdGFyZ2V0IFBsdWdpbiB0YXJnZXQgYnV0dG9uIChUaGlzIGlzIG5vdCBuZWNlc3NhcnkgaWYgeW91IGhhdmUgYSBidXR0b24gbGlzdCB3aGVuIGNyZWF0aW5nIHRoZSBlZGl0b3IpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGNhbGxCYWNrRnVuY3Rpb24sIF90YXJnZXQpIHtcclxuICAgICAgICAgICAgX3RhcmdldCA9IF90YXJnZXQgfHwgcGx1Z2luQ2FsbEJ1dHRvbnNbcGx1Z2luTmFtZV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucGx1Z2luc1twbHVnaW5OYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY29yZS5jYWxsUGx1Z2luLmZhaWxdIFRoZSBjYWxsZWQgcGx1Z2luIGRvZXMgbm90IGV4aXN0IG9yIGlzIGluIGFuIGludmFsaWQgZm9ybWF0LiAocGx1Z2luTmFtZTpcIicgKyBwbHVnaW5OYW1lICsgJ1wiKScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmluaXRQbHVnaW5zW3BsdWdpbk5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV0uYWRkKHRoaXMsIF90YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UGx1Z2luc1twbHVnaW5OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX3RhcmdldFBsdWdpbnNbcGx1Z2luTmFtZV0gPT09ICdvYmplY3QnICYmICEhX3RhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0TWVudVRhcmdldChwbHVnaW5OYW1lLCBfdGFyZ2V0LCB0aGlzLl90YXJnZXRQbHVnaW5zW3BsdWdpbk5hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXS5hY3RpdmUgJiYgIXRoaXMuY29tbWFuZE1hcFtwbHVnaW5OYW1lXSAmJiAhIV90YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZE1hcFtwbHVnaW5OYW1lXSA9IF90YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBsdWdpbnMucHVzaChwbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbEJhY2tGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykgY2FsbEJhY2tGdW5jdGlvbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBhZGRlZCwgYWRkIHRoZSBtb2R1bGUgYW5kIGNhbGwgdGhlICdhZGQnIGZ1bmN0aW9uXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gbW9kdWxlQXJyYXkgbW9kdWxlIG9iamVjdCdzIEFycmF5IFtkaWFsb2csIHJlc2l6aW5nXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFkZE1vZHVsZTogZnVuY3Rpb24gKG1vZHVsZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBtb2R1bGVBcnJheS5sZW5ndGgsIG1vZHVsZU5hbWU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZUFycmF5W2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGx1Z2luc1ttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1ttb2R1bGVOYW1lXSA9IG1vZHVsZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRQbHVnaW5zW21vZHVsZU5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UGx1Z2luc1ttb2R1bGVOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpbnNbbW9kdWxlTmFtZV0uYWRkID09PSAnZnVuY3Rpb24nKSB0aGlzLnBsdWdpbnNbbW9kdWxlTmFtZV0uYWRkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGN1cnJlbnQgZWRpdG9yLXJlbGF0aXZlIHNjcm9sbCBvZmZzZXQuXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0ge3RvcCwgbGVmdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRHbG9iYWxTY3JvbGxPZmZzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IHQgPSAwLCBsID0gMDtcclxuICAgICAgICAgICAgbGV0IGVsID0gY29udGV4dC5lbGVtZW50LnRvcEFyZWE7XHJcbiAgICAgICAgICAgIHdoaWxlIChlbCkge1xyXG4gICAgICAgICAgICAgICAgdCArPSBlbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBsICs9IGVsLnNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGVsID0gdGhpcy5fc2hhZG93Um9vdCA/IHRoaXMuX3NoYWRvd1Jvb3QuaG9zdCA6IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlIChlbCkge1xyXG4gICAgICAgICAgICAgICAgdCArPSBlbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBsICs9IGVsLnNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IHQsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE1ldGhvZCBmb3IgbWFuYWdpbmcgc3VibWVudSBlbGVtZW50LlxyXG4gICAgICAgICAqIFlvdSBtdXN0IGFkZCB0aGUgXCJzdWJtZW51XCIgZWxlbWVudCB1c2luZyB0aGUgdGhpcyBtZXRob2QgYXQgY3VzdG9tIHBsdWdpbi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSB0YXJnZXQgVGFyZ2V0IGJ1dHRvblxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbWVudSBTdWJtZW51IGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbml0TWVudVRhcmdldDogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIHRhcmdldCwgbWVudSkge1xyXG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0UGx1Z2luc1twbHVnaW5OYW1lXSA9IG1lbnU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX21lbnVUcmF5LmFwcGVuZENoaWxkKG1lbnUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0UGx1Z2luc1twbHVnaW5OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZW51VHJheVt0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKV0gPSBtZW51O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVuYWJsZWQgc3VibWVudVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBTdWJtZW51J3MgYnV0dG9uIGVsZW1lbnQgdG8gY2FsbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN1Ym1lbnVPbjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRlZFN1Ym1lbnVPZmYpIHRoaXMuX2JpbmRlZFN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRDb250cm9sbGVyc09mZikgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3VibWVudU5hbWUgPSB0aGlzLl9zdWJtZW51TmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc3VibWVudSA9IHRoaXMuX21lbnVUcmF5W3N1Ym1lbnVOYW1lXTtcclxuICAgICAgICAgICAgdGhpcy5zdWJtZW51QWN0aXZlQnV0dG9uID0gZWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudVBvc2l0aW9uKGVsZW1lbnQsIG1lbnUpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5fYmluZGVkU3VibWVudU9mZiA9IHRoaXMuc3VibWVudU9mZi5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdtb3VzZWRvd24nLCB0aGlzLl9iaW5kZWRTdWJtZW51T2ZmLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zW3N1Ym1lbnVOYW1lXS5vbikgdGhpcy5wbHVnaW5zW3N1Ym1lbnVOYW1lXS5vbi5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERpc2FibGUgc3VibWVudVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN1Ym1lbnVPZmY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnbW91c2Vkb3duJywgdGhpcy5fYmluZGVkU3VibWVudU9mZik7XHJcbiAgICAgICAgICAgIHRoaXMuX2JpbmRlZFN1Ym1lbnVPZmYgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWVudSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VibWVudU5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtZW51ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5zdWJtZW51QWN0aXZlQnV0dG9uLCAnb24nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudUFjdGl2ZUJ1dHRvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RIaWRlVG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbmFibGVkIGNvbnRhaW5lclxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBDb250YWluZXIncyBidXR0b24gZWxlbWVudCB0byBjYWxsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udGFpbmVyT246IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9iaW5kZWRDb250YWluZXJPZmYpIHRoaXMuX2JpbmRlZENvbnRhaW5lck9mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IHRoaXMuX2NvbnRhaW5lck5hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLmNvbnRhaW5lciA9IHRoaXMuX21lbnVUcmF5W2NvbnRhaW5lck5hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbiA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE1lbnVQb3NpdGlvbihlbGVtZW50LCBtZW51KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX2JpbmRlZENvbnRhaW5lck9mZiA9IHRoaXMuY29udGFpbmVyT2ZmLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuX2JpbmRlZENvbnRhaW5lck9mZiwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2luc1tjb250YWluZXJOYW1lXS5vbikgdGhpcy5wbHVnaW5zW2NvbnRhaW5lck5hbWVdLm9uLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FudGlCbHVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGlzYWJsZSBjb250YWluZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXJPZmY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnbW91c2Vkb3duJywgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmKTtcclxuICAgICAgICAgICAgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5jb250YWluZXJBY3RpdmVCdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJBY3RpdmVCdXR0b24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90SGlkZVRvb2xiYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fYW50aUJsdXIgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHRoZSBtZW51IHBvc2l0aW9uLiAoc3VibWVudSwgY29udGFpbmVyKVxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gZWxlbWVudCBCdXR0b24gZWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbWVudSBNZW51IGVsZW1lbnRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRNZW51UG9zaXRpb246IGZ1bmN0aW9uIChlbGVtZW50LCBtZW51KSB7XHJcbiAgICAgICAgICAgIG1lbnUuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICBtZW51LnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgICAgICB1dGlsLmFkZENsYXNzKGVsZW1lbnQsICdvbicpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IHRoaXMuY29udGV4dC5lbGVtZW50LnRvb2xiYXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJXID0gdG9vbGJhci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhck9mZnNldCA9IGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKGNvbnRleHQuZWxlbWVudC50b29sYmFyKTtcclxuICAgICAgICAgICAgY29uc3QgbWVudVcgPSBtZW51Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCBsID0gZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgKyAzO1xyXG5cclxuICAgICAgICAgICAgLy8gcnRsXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJ0bCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFcgPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnRsVyA9IG1lbnVXID4gZWxlbWVudFcgPyBtZW51VyAtIGVsZW1lbnRXIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0bEwgPSBydGxXID4gMCA/IDAgOiBlbGVtZW50VyAtIG1lbnVXO1xyXG4gICAgICAgICAgICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gKGwgLSBydGxXICsgcnRsTCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRvb2xiYXJPZmZzZXQubGVmdCA+IGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKG1lbnUpLmxlZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZW51LnN0eWxlLmxlZnQgPSAnMHB4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJMZWZ0ID0gdG9vbGJhclcgPD0gbWVudVcgPyAwIDogdG9vbGJhclcgLSAobCArIG1lbnVXKTtcclxuICAgICAgICAgICAgICAgIGlmIChvdmVyTGVmdCA8IDApIG1lbnUuc3R5bGUubGVmdCA9IChsICsgb3ZlckxlZnQpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGVsc2UgbWVudS5zdHlsZS5sZWZ0ID0gbCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBlbGVtZW50IHRvcFxyXG4gICAgICAgICAgICBsZXQgdCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBvZmZzZXRFbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXRFbCAmJiBvZmZzZXRFbCAhPT0gdG9vbGJhcikge1xyXG4gICAgICAgICAgICAgICAgdCArPSBvZmZzZXRFbC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXRFbCA9IG9mZnNldEVsLm9mZnNldFBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYnQgPSB0O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNCYWxsb29uKSB7XHJcbiAgICAgICAgICAgICAgICB0ICs9IHRvb2xiYXIub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0IC09IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgbWVudSBwb3NpdGlvblxyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyVG9wID0gdG9vbGJhck9mZnNldC50b3A7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5nZXRHbG9iYWxTY3JvbGxPZmZzZXQoKS50b3A7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtZW51SGVpZ2h0X2JvdHRvbSA9IF93LmlubmVySGVpZ2h0IC0gKHRvb2xiYXJUb3AgLSBzY3JvbGxUb3AgKyBidCArIGVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAobWVudUhlaWdodF9ib3R0b20gPCBtZW51SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVudVRvcCA9IC0xICogKG1lbnVIZWlnaHQgLSBidCArIDMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zVG9wID0gdG9vbGJhclRvcCAtIHNjcm9sbFRvcCArIG1lbnVUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZW51SGVpZ2h0X3RvcCA9IG1lbnVIZWlnaHQgKyAoaW5zVG9wIDwgMCA/IGluc1RvcCA6IDApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAobWVudUhlaWdodF90b3AgPiBtZW51SGVpZ2h0X2JvdHRvbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUuaGVpZ2h0ID0gbWVudUhlaWdodF90b3AgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnVUb3AgPSAtMSAqIChtZW51SGVpZ2h0X3RvcCAtIGJ0ICsgMyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUuaGVpZ2h0ID0gbWVudUhlaWdodF9ib3R0b20gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnVUb3AgPSBidCArIGVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWVudS5zdHlsZS50b3AgPSBtZW51VG9wICsgJ3B4JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUudG9wID0gKGJ0ICsgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZW51LnN0eWxlLnZpc2liaWxpdHkgPSAnJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hvdyBjb250cm9sbGVyIGF0IGVkaXRvciBhcmVhIChjb250cm9sbGVyIGVsZW1lbnRzLCBmdW5jdGlvbiwgXCJjb250cm9sbGVyIHRhcmdldCBlbGVtZW50KEBSZXF1aXJlZClcIiwgXCJjb250cm9sbGVyIG5hbWUoQFJlcXVpcmVkKVwiLCBldGMuLilcclxuICAgICAgICAgKiBAcGFyYW0geyp9IGFyZ3VtZW50cyBjb250cm9sbGVyIGVsZW1lbnRzLCBmdW5jdGlvbnMuLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRyb2xsZXJzT246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRDb250cm9sbGVyc09mZikgdGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckFycmF5ID0gW107XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFyZykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lID0gYXJnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJBcnJheS5wdXNoKGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzQ2xhc3MoYXJnLCAnc2UtY29udHJvbGxlcicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlclRhcmdldCA9IGFyZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGaWxlQ29tcG9uZW50SW5mbyA9IHRoaXMuZ2V0RmlsZUNvbXBvbmVudChhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyZy5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hhZG93Um9vdCAmJiB0aGlzLl9zaGFkb3dSb290Q29udHJvbGxlckV2ZW50VGFyZ2V0LmluZGV4T2YoYXJnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQucHVzaChhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckFycmF5LnB1c2goYXJnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmID0gdGhpcy5jb250cm9sbGVyc09mZi5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdtb3VzZWRvd24nLCB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgna2V5ZG93bicsIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZiwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5zaG93Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLnNob3dDb250cm9sbGVyKHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lLCB0aGlzLmNvbnRyb2xsZXJBcnJheSwgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEhpZGUgY29udHJvbGxlciBhdCBlZGl0b3IgYXJlYSAobGluayBidXR0b24sIGltYWdlIHJlc2l6ZSBidXR0b24uLilcclxuICAgICAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR8TW91c2VFdmVudHxudWxsfSBlIEV2ZW50IG9iamVjdCB3aGVuIGNhbGxlZCBmcm9tIG1vdXNlZG93biBhbmQga2V5ZG93biBldmVudHMgcmVnaXN0ZXJlZCBpbiBcImNvcmUuY29udHJvbGxlcnNPblwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udHJvbGxlcnNPZmY6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpbmVCcmVha2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuY29udHJvbGxlckFycmF5Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udHJvbGxlckFycmF5W2ldLmNvbnRhaW5zID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29udHJvbGxlckFycmF5W2ldLmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luUmVnRXhwLnRlc3QodGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpICYmIGUgJiYgZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfdC5zdHlsZS5kaXNwbGF5ID0gY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX2Iuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2xpbmVCcmVha0NvbXAgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlclRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZpbGVDb21wb25lbnRJbmZvID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ2tleWRvd24nLCB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYpO1xyXG4gICAgICAgICAgICB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udHJvbGxlckFycmF5W2ldID09PSAnZnVuY3Rpb24nKSB0aGlzLmNvbnRyb2xsZXJBcnJheVtpXSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5jb250cm9sbGVyQXJyYXlbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTcGVjaWZ5IHRoZSBwb3NpdGlvbiBvZiB0aGUgY29udHJvbGxlci5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRyb2xsZXIgQ29udHJvbGxlciBlbGVtZW50LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJFbCBFbGVtZW50IHRoYXQgaXMgdGhlIGJhc2lzIG9mIHRoZSBjb250cm9sbGVyJ3MgcG9zaXRpb24uXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIFR5cGUgb2YgcG9zaXRpb24gKFwidG9wXCIgfCBcImJvdHRvbVwiKVxyXG4gICAgICAgICAqIFdoZW4gdXNpbmcgdGhlIFwidG9wXCIgcG9zaXRpb24sIHRoZXJlIHNob3VsZCBub3QgYmUgYW4gYXJyb3cgb24gdGhlIGNvbnRyb2xsZXIuXHJcbiAgICAgICAgICogV2hlbiB1c2luZyB0aGUgXCJib3R0b21cIiBwb3NpdGlvbiB0aGVyZSBzaG91bGQgYmUgYW4gYXJyb3cgb24gdGhlIGNvbnRyb2xsZXIuXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGFkZE9mZnNldCBUaGVzZSBhcmUgdGhlIGxlZnQgYW5kIHRvcCB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHNwZWNpYWxseS4gXHJcbiAgICAgICAgICogVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZC4gLSB7bGVmdDogMCwgdG9wOiAwfVxyXG4gICAgICAgICAqIFBsZWFzZSBlbnRlciB0aGUgdmFsdWUgYmFzZWQgb24gbHRyIG1vZGUuXHJcbiAgICAgICAgICogQ2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGluIHJ0bCBtb2RlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldENvbnRyb2xsZXJQb3NpdGlvbjogZnVuY3Rpb24gKGNvbnRyb2xsZXIsIHJlZmVyRWwsIHBvc2l0aW9uLCBhZGRPZmZzZXQpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucnRsKSBhZGRPZmZzZXQubGVmdCAqPSAtMTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHV0aWwuZ2V0T2Zmc2V0KHJlZmVyRWwsIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpO1xyXG4gICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgIC8vIEhlaWdodCB2YWx1ZSBvZiB0aGUgYXJyb3cgZWxlbWVudCBpcyAxMXB4XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcE1hcmdpbiA9IHBvc2l0aW9uID09PSAndG9wJyA/IC0oY29udHJvbGxlci5vZmZzZXRIZWlnaHQgKyAyKSA6IChyZWZlckVsLm9mZnNldEhlaWdodCArIDEyKTtcclxuICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS50b3AgPSAob2Zmc2V0LnRvcCArIHRvcE1hcmdpbiArIGFkZE9mZnNldC50b3ApICsgJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGwgPSBvZmZzZXQubGVmdCAtIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc2Nyb2xsTGVmdCArIGFkZE9mZnNldC5sZWZ0O1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyVyA9IGNvbnRyb2xsZXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyRWxXID0gcmVmZXJFbC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gdXRpbC5oYXNDbGFzcyhjb250cm9sbGVyLmZpcnN0RWxlbWVudENoaWxkLCAnc2UtYXJyb3cnKSA/IGNvbnRyb2xsZXIuZmlyc3RFbGVtZW50Q2hpbGQgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gcnRsIChXaWR0aCB2YWx1ZSBvZiB0aGUgYXJyb3cgZWxlbWVudCBpcyAyMnB4KVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5ydGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0bFcgPSAoY29udHJvbGxlclcgPiByZWZlckVsVykgPyBjb250cm9sbGVyVyAtIHJlZmVyRWxXIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0bEwgPSBydGxXID4gMCA/IDAgOiByZWZlckVsVyAtIGNvbnRyb2xsZXJXO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5sZWZ0ID0gKGwgLSBydGxXICsgcnRsTCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAocnRsVyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3cpIGFsbG93LnN0eWxlLmxlZnQgPSAoKGNvbnRyb2xsZXJXIC0gMTQgPCAxMCArIHJ0bFcpID8gKGNvbnRyb2xsZXJXIC0gMTQpIDogKDEwICsgcnRsVykpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlclNpemUgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLm9mZnNldExlZnQgLSBjb250cm9sbGVyLm9mZnNldExlZnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAob3ZlclNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5sZWZ0ID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93KSBhbGxvdy5zdHlsZS5sZWZ0ID0gb3ZlclNpemUgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5sZWZ0ID0gbCArICdweCc7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlclNpemUgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLm9mZnNldFdpZHRoIC0gKGNvbnRyb2xsZXIub2Zmc2V0TGVmdCArIGNvbnRyb2xsZXJXKTtcclxuICAgICAgICAgICAgICAgIGlmIChvdmVyU2l6ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLmxlZnQgPSAoY29udHJvbGxlci5vZmZzZXRMZWZ0ICsgb3ZlclNpemUpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3cpIGFsbG93LnN0eWxlLmxlZnQgPSAoMjAgLSBvdmVyU2l6ZSkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3cpIGFsbG93LnN0eWxlLmxlZnQgPSAnMjBweCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBqYXZhc2NyaXB0IGV4ZWNDb21tYW5kXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgamF2YXNjcmlwdCBleGVjQ29tbWFuZCBmdW5jdGlvbiBwcm9wZXJ0eVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbnx1bmRlZmluZWR9IHNob3dEZWZhdWx0VUkgamF2YXNjcmlwdCBleGVjQ29tbWFuZCBmdW5jdGlvbiBwcm9wZXJ0eVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gdmFsdWUgamF2YXNjcmlwdCBleGVjQ29tbWFuZCBmdW5jdGlvbiBwcm9wZXJ0eVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGV4ZWNDb21tYW5kOiBmdW5jdGlvbiAoY29tbWFuZCwgc2hvd0RlZmF1bHRVSSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QuZXhlY0NvbW1hbmQoY29tbWFuZCwgc2hvd0RlZmF1bHRVSSwgKGNvbW1hbmQgPT09ICdmb3JtYXRCbG9jaycgPyAnPCcgKyB2YWx1ZSArICc+JyA6IHZhbHVlKSk7XHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEZvY3VzIHRvIHd5c2l3eWcgYXJlYSB1c2luZyBcIm5hdGl2ZSBmb2N1cyBmdW5jdGlvblwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmF0aXZlRm9jdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FwdGlvbiA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgJ2ZpZ2NhcHRpb24nKTtcclxuICAgICAgICAgICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb24uZm9jdXMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEZvY3VzIHRvIHd5c2l3eWcgYXJlYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZvY3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHV0aWwuaXNXeXNpd3lnRGl2KHJhbmdlLnN0YXJ0Q29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmNoaWxkcmVuW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzRm9ybWF0RWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIXV0aWwuaXNDb21wb25lbnQoY3VycmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmluc2VydEJlZm9yZShmb3JtYXQsIGN1cnJlbnROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoYnIsIDAsIGJyLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNCYWxsb29uKSBldmVudC5fdG9nZ2xlVG9vbGJhckJhbGxvb24oKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSWYgXCJmb2N1c0VsXCIgaXMgYSBjb21wb25lbnQsIHRoZW4gdGhhdCBjb21wb25lbnQgaXMgc2VsZWN0ZWQ7IGlmIGl0IGlzIGEgZm9ybWF0IGVsZW1lbnQsIHRoZSBsYXN0IHRleHQgaXMgc2VsZWN0ZWRcclxuICAgICAgICAgKiBJZiBcImZvY3VzRWRnZVwiIGlzIG51bGwsIHRoZW4gc2VsZWN0ZWQgbGFzdCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IGZvY3VzRWwgRm9jdXMgZWxlbWVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZvY3VzRWRnZTogZnVuY3Rpb24gKGZvY3VzRWwpIHtcclxuICAgICAgICAgICAgaWYgKCFmb2N1c0VsKSBmb2N1c0VsID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcubGFzdEVsZW1lbnRDaGlsZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnRJbmZvID0gdGhpcy5nZXRGaWxlQ29tcG9uZW50KGZvY3VzRWwpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudEluZm8pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGZpbGVDb21wb25lbnRJbmZvLnRhcmdldCwgZmlsZUNvbXBvbmVudEluZm8ucGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNFbCkge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGZvY3VzRWwsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmb2N1c0VsKSB0aGlzLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2V0UmFuZ2UoZm9jdXNFbCwgZm9jdXNFbC50ZXh0Q29udGVudC5sZW5ndGgsIGZvY3VzRWwsIGZvY3VzRWwudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBGb2N1c291dCB0byB3eXNpd3lnIGFyZWEgKC5ibHVyKCkpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmx1cjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuYmx1cigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuYmx1cigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCBjdXJyZW50IGVkaXRvcidzIHJhbmdlIG9iamVjdCBhbmQgcmV0dXJuLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnRDb24gVGhlIHN0YXJ0Q29udGFpbmVyIHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydE9mZiBUaGUgc3RhcnRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbmRDb24gVGhlIGVuZENvbnRhaW5lciBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZW5kT2ZmIFRoZSBlbmRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gUmFuZ2Ugb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldFJhbmdlOiBmdW5jdGlvbiAoc3RhcnRDb24sIHN0YXJ0T2ZmLCBlbmRDb24sIGVuZE9mZikge1xyXG4gICAgICAgICAgICBpZiAoIXN0YXJ0Q29uIHx8ICFlbmRDb24pIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0T2ZmID4gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoKSBzdGFydE9mZiA9IHN0YXJ0Q29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGVuZE9mZiA+IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGgpIGVuZE9mZiA9IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChzdGFydENvbikpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gc3RhcnRDb24uY2hpbGROb2Rlc1tzdGFydE9mZl0gfHwgc3RhcnRDb247XHJcbiAgICAgICAgICAgICAgICBzdGFydE9mZiA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGVuZENvbikpIHtcclxuICAgICAgICAgICAgICAgIGVuZENvbiA9IGVuZENvbi5jaGlsZE5vZGVzW2VuZE9mZl0gfHwgZW5kQ29uO1xyXG4gICAgICAgICAgICAgICAgZW5kT2ZmID0gc3RhcnRPZmYgPiAxID8gc3RhcnRPZmYgOiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuX3dkLmNyZWF0ZVJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRDb24sIHN0YXJ0T2ZmKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLnNldEVuZChlbmRDb24sIGVuZE9mZik7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IuY29yZS5mb2N1cy5lcnJvcl0gJyArIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmUgcmFuZ2Ugb2JqZWN0IGFuZCBidXR0b24gZWZmZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVtb3ZlUmFuZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3JhbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3NlbGVjdGlvbk5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNGb2N1cykgdGhpcy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRNYXAgPSB0aGlzLmNvbW1hbmRNYXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVBsdWdpbnMgPSB0aGlzLmFjdGl2ZVBsdWdpbnM7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBjb21tYW5kTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzT3duKGNvbW1hbmRNYXAsIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVBsdWdpbnMuaW5kZXhPZihrZXkpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW5zW2tleV0uYWN0aXZlLmNhbGwodGhpcywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRNYXAuT1VUREVOVCAmJiAvXk9VVERFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5PVVRERU5ULnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZE1hcC5JTkRFTlQgJiYgL15JTkRFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5JTkRFTlQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvbW1hbmRNYXBba2V5XSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCBjdXJyZW50IGVkaXRvcidzIHJhbmdlIG9iamVjdFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl92YXJpYWJsZS5fcmFuZ2UgfHwgdGhpcy5fY3JlYXRlRGVmYXVsdFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQgPT09IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCB8fCAhY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuY29udGFpbnMoc2VsZWN0aW9uLmZvY3VzTm9kZSkpIHJldHVybiByYW5nZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsIGVjID0gc2VsZWN0aW9uLmZvY3VzTm9kZSwgc28gPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBlbyA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVWYWx1ZSA9IHV0aWwuY29tcGFyZUVsZW1lbnRzKHNjLCBlYyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodERpciA9IGNvbXBhcmVWYWx1ZS5hbmNlc3RvciAmJiAoY29tcGFyZVZhbHVlLnJlc3VsdCA9PT0gMCA/IHNvIDw9IGVvIDogY29tcGFyZVZhbHVlLnJlc3VsdCA+IDEgPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0UmFuZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHREaXIgPyBzYyA6IGVjLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0RGlyID8gc28gOiBlbyxcclxuICAgICAgICAgICAgICAgICAgICByaWdodERpciA/IGVjIDogc2MsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHREaXIgPyBlbyA6IHNvXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRoZSBcInJhbmdlXCIgb2JqZWN0IGlzIGEgbm9uLWVkaXRhYmxlIGFyZWEsIGFkZCBhIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdG9yIGFuZCB1cGRhdGUgdGhlIFwicmFuZ2VcIiBvYmplY3QuXHJcbiAgICAgICAgICogUmV0dXJucyBhIG5ldyBcInJhbmdlXCIgb3IgYXJndW1lbnQgXCJyYW5nZVwiLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSBjb3JlLmdldFJhbmdlKClcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gY29udGFpbmVyIElmIHRoZXJlIGlzIFwiY29udGFpbmVyXCIgYXJndW1lbnQsIGl0IGNyZWF0ZXMgYSBsaW5lIGluIGZyb250IG9mIHRoZSBjb250YWluZXIuXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gcmFuZ2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRSYW5nZV9hZGRMaW5lOiBmdW5jdGlvbiAocmFuZ2UsIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVm9pZChyYW5nZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gdXRpbC5jcmVhdGVFbGVtZW50KG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBvcC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICB3eXNpd3lnLmluc2VydEJlZm9yZShvcCwgY29udGFpbmVyICYmIGNvbnRhaW5lciAhPT0gd3lzaXd5ZyA/IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcgOiB3eXNpd3lnLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uob3AuZmlyc3RFbGVtZW50Q2hpbGQsIDAsIG9wLmZpcnN0RWxlbWVudENoaWxkLCAxKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fdmFyaWFibGUuX3JhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHdpbmRvdyBzZWxlY3Rpb24gb2JlamN0XHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRvd1Jvb3QgJiYgdGhpcy5fc2hhZG93Um9vdC5nZXRTZWxlY3Rpb24gPyB0aGlzLl9zaGFkb3dSb290LmdldFNlbGVjdGlvbigpIDogdGhpcy5fd3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCBjdXJyZW50IHNlbGVjdCBub2RlXHJcbiAgICAgICAgICogQHJldHVybnMge05vZGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0U2VsZWN0aW9uTm9kZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZsKgKCFjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5jb250YWlucyh0aGlzLl92YXJpYWJsZS5fc2VsZWN0aW9uTm9kZSkpwqB0aGlzLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Ob2RlID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZmlyc3RDaGlsZCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb25Ob2RlKcKge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGUuX3NlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNhdmluZyB0aGUgcmFuZ2Ugb2JqZWN0IGFuZCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgb2YgZWRpdG9yXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZWRpdG9yUmFuZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLl9jcmVhdGVEZWZhdWx0UmFuZ2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3JhbmdlID0gcmFuZ2U7XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSBzZWxlY3Rpb25Ob2RlID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuY2hpbGRyZW5bcmFuZ2Uuc3RhcnRPZmZzZXRdIHx8IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBzZWxlY3Rpb25Ob2RlID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uLmV4dGVudE5vZGUgfHwgc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJuIHRoZSByYW5nZSBvYmplY3Qgb2YgZWRpdG9yJ3MgZmlyc3QgY2hpbGQgbm9kZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY3JlYXRlRGVmYXVsdFJhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgd3lzaXd5Zy5mb2N1cygpO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuX3dkLmNyZWF0ZVJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZm9jdXNFbCA9IHd5c2l3eWcuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmICghZm9jdXNFbCkge1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICB3eXNpd3lnLmFwcGVuZENoaWxkKGZvY3VzRWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydChmb2N1c0VsLCAwKTtcclxuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGZvY3VzRWwsIDApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgbm8gdmFsaWQgXCJzZWxlY3Rpb25cIi5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgY29yZS5nZXRSYW5nZSgpXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gcmFuZ2VcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZWxlY3Rpb25Wb2lkOiBmdW5jdGlvbiAocmFuZ2UpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tbSA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gKHV0aWwuaXNXeXNpd3lnRGl2KHJhbmdlLnN0YXJ0Q29udGFpbmVyKSAmJiB1dGlsLmlzV3lzaXd5Z0RpdihyYW5nZS5lbmRDb250YWluZXIpKSB8fCAvRklHVVJFL2kudGVzdChjb21tLm5vZGVOYW1lKSB8fCB0aGlzLl9maWxlTWFuYWdlci5yZWdFeHAudGVzdChjb21tLm5vZGVOYW1lKSB8fCB1dGlsLmlzTWVkaWFDb21wb25lbnQoY29tbSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlc2V0IHJhbmdlIG9iamVjdCB0byB0ZXh0IG5vZGUgc2VsZWN0ZWQgc3RhdHVzLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHZhbGlkIHNlbGVjdGlvbi5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9yZXNldFJhbmdlVG9UZXh0Tm9kZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvblZvaWQocmFuZ2UpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCB0ZW1wQ29uLCB0ZW1wT2Zmc2V0LCB0ZW1wQ2hpbGQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoc3RhcnRDb24pKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydENvbiA9IHN0YXJ0Q29uLmNoaWxkTm9kZXNbc3RhcnRPZmZdIHx8IHN0YXJ0Q29uLmxhc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChlbmRDb24pKSB7XHJcbiAgICAgICAgICAgICAgICBlbmRDb24gPSBlbmRDb24uY2hpbGROb2Rlc1tlbmRPZmZdIHx8IGVuZENvbi5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBlbmRPZmYgPSBlbmRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzdGFydENvbnRhaW5lclxyXG4gICAgICAgICAgICB0ZW1wQ29uID0gdXRpbC5pc1d5c2l3eWdEaXYoc3RhcnRDb24pID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZmlyc3RDaGlsZCA6IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gc3RhcnRPZmY7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKHRlbXBDb24pIHx8ICh0ZW1wQ29uLm5vZGVUeXBlID09PSAxICYmIHRlbXBDb24uY2hpbGROb2Rlcy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seUJyZWFrID0gdXRpbC5pc0JyZWFrKHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbmx5QnJlYWspIHtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcENvbiAmJiAhdXRpbC5pc0JyZWFrKHRlbXBDb24pICYmIHRlbXBDb24ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbiA9IHRlbXBDb24uY2hpbGROb2Rlc1t0ZW1wT2Zmc2V0XSB8fCB0ZW1wQ29uLm5leHRFbGVtZW50U2libGluZyB8fCB0ZW1wQ29uLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHRlbXBDb24sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgPT09IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGZvcm1hdCwgbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0ZW1wQ29uLCB1dGlsLmlzQ2VsbCkgPyAnRElWJyA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZm9ybWF0LCB0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKHRlbXBDb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1wdHlUZXh0ID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVtcHR5VGV4dCwgdGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbiA9IGVtcHR5VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25seUJyZWFrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydENvbiA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb24gPSB0ZW1wQ29uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2ZmID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHN0YXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAgIHN0YXJ0Q29uID0gdGVtcENvbjtcclxuICAgICAgICAgICAgc3RhcnRPZmYgPSB0ZW1wT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgLy8gZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgIHRlbXBDb24gPSB1dGlsLmlzV3lzaXd5Z0RpdihlbmRDb24pID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcubGFzdENoaWxkIDogZW5kQ29uO1xyXG4gICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gZW5kT2ZmO1xyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayh0ZW1wQ29uKSB8fCAodGVtcENvbi5ub2RlVHlwZSA9PT0gMSAmJiB0ZW1wQ29uLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlCcmVhayA9IHV0aWwuaXNCcmVhayh0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgIGlmICghb25seUJyZWFrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRlbXBDb24gJiYgIXV0aWwuaXNCcmVhayh0ZW1wQ29uKSAmJiB0ZW1wQ29uLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDaGlsZCA9IHRlbXBDb24uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDaGlsZC5sZW5ndGggPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uID0gdGVtcENoaWxkW3RlbXBPZmZzZXQgPiAwID8gdGVtcE9mZnNldCAtIDEgOiB0ZW1wT2Zmc2V0XSB8fCAhL0ZJR1VSRS9pLnRlc3QodGVtcENoaWxkWzBdLm5vZGVOYW1lKSA/IHRlbXBDaGlsZFswXSA6ICh0ZW1wQ29uLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgdGVtcENvbi5wcmV2aW91c1NpYmxpbmcgfHwgc3RhcnRDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wT2Zmc2V0ID0gdGVtcE9mZnNldCA+IDAgPyB0ZW1wQ29uLnRleHRDb250ZW50Lmxlbmd0aCA6IHRlbXBPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0ZW1wQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXQsIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudCh1dGlsLmlzQ2VsbChmb3JtYXQpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgdGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZCh0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayh0ZW1wQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5VGV4dCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbXB0eVRleHQsIHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDb24gPSBlbXB0eVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcE9mZnNldCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlCcmVhayAmJiAhdGVtcENvbi5wcmV2aW91c1NpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGVuZENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgIGVuZENvbiA9IHRlbXBDb247XHJcbiAgICAgICAgICAgIGVuZE9mZiA9IHRlbXBPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgUmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBcImZvcm1hdEVsZW1lbnRcIih1dGlsLmlzRm9ybWF0RWxlbWVudCkgYXJyYXkgZnJvbSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJhbmdlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbi4gKFJlcGxhY2VzIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gZnVuY3Rpb24tdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkpXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFNlbGVjdGVkRWxlbWVudHM6IGZ1bmN0aW9uICh2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVzZXRSYW5nZVRvVGV4dE5vZGUoKSkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoY2hpbGRyZW5bMF0sIDAsIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLCBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGFydENvbiA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IGxpbmUgbm9kZXNcclxuICAgICAgICAgICAgY29uc3QgbGluZU5vZGVzID0gdXRpbC5nZXRMaXN0Q2hpbGRyZW4oY29tbW9uQ29uLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb24gPyB2YWxpZGF0aW9uKGN1cnJlbnQpIDogdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzV3lzaXd5Z0Rpdihjb21tb25Db24pICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGNvbW1vbkNvbikpIGxpbmVOb2Rlcy51bnNoaWZ0KHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChjb21tb25Db24sIG51bGwpKTtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0Q29uID09PSBlbmRDb24gfHwgbGluZU5vZGVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGxpbmVOb2RlcztcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGFydExpbmUgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc3RhcnRDb24sIG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgZW5kTGluZSA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChlbmRDb24sIG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRJZHggPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZW5kSWR4ID0gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IG9ubHlUYWJsZSA9IGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5pc1RhYmxlKGN1cnJlbnQpID8gL15UQUJMRSQvaS50ZXN0KGN1cnJlbnQubm9kZU5hbWUpIDogdHJ1ZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGFydFJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzdGFydExpbmUsIG9ubHlUYWJsZSk7XHJcbiAgICAgICAgICAgIGxldCBlbmRSYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZW5kTGluZSwgb25seVRhYmxlKTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNUYWJsZShzdGFydFJhbmdlRWwpICYmIHV0aWwuaXNMaXN0Q2VsbChzdGFydFJhbmdlRWwucGFyZW50Tm9kZSkpIHN0YXJ0UmFuZ2VFbCA9IHN0YXJ0UmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1RhYmxlKGVuZFJhbmdlRWwpICYmIHV0aWwuaXNMaXN0Q2VsbChlbmRSYW5nZUVsLnBhcmVudE5vZGUpKSBlbmRSYW5nZUVsID0gZW5kUmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3Qgc2FtZVJhbmdlID0gc3RhcnRSYW5nZUVsID09PSBlbmRSYW5nZUVsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbGluZU5vZGVzLmxlbmd0aCwgbGluZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZU5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdGFydExpbmUgPT09IGxpbmUgfHwgKCFzYW1lUmFuZ2UgJiYgbGluZSA9PT0gc3RhcnRSYW5nZUVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SWR4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZW5kTGluZSA9PT0gbGluZSB8fCAoIXNhbWVSYW5nZSAmJiBsaW5lID09PSBlbmRSYW5nZUVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZElkeCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdGFydElkeCA9PT0gbnVsbCkgc3RhcnRJZHggPSAwO1xyXG4gICAgICAgICAgICBpZiAoZW5kSWR4ID09PSBudWxsKSBlbmRJZHggPSBsaW5lTm9kZXMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lTm9kZXMuc2xpY2Uoc3RhcnRJZHgsIGVuZElkeCArIDEpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgZm9ybWF0IGVsZW1lbnRzIGFuZCBjb21wb25lbnRzIGZyb20gdGhlIHNlbGVjdGVkIGFyZWEuIChQLCBESVYsIEhbMS02XSwgT0wsIFVMLCBUQUJMRS4uKVxyXG4gICAgICAgICAqIElmIHNvbWUgb2YgdGhlIGNvbXBvbmVudCBhcmUgaW5jbHVkZWQgaW4gdGhlIHNlbGVjdGlvbiwgZ2V0IHRoZSBlbnRpcmUgdGhhdCBjb21wb25lbnQuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZW1vdmVEdXBsaWNhdGUgSWYgdHJ1ZSwgaWYgdGhlcmUgaXMgYSBwYXJlbnQgYW5kIGNoaWxkIHRhZyBhbW9uZyB0aGUgc2VsZWN0ZWQgZWxlbWVudHMsIHRoZSBjaGlsZCB0YWcgaXMgZXhjbHVkZWQuXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzOiBmdW5jdGlvbiAocmVtb3ZlRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHRoaXMuZ2V0UmFuZ2UoKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgbXlDb21wb25lbnQgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoY29tbW9uQ29uLCB1dGlsLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRMaW5lcyA9IHV0aWwuaXNUYWJsZShjb21tb25Db24pID8gXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMobnVsbCkgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGN1cnJlbnQsIHRoaXMuaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgJiYgKCFjb21wb25lbnQgfHwgY29tcG9uZW50ID09PSBteUNvbXBvbmVudCkpIHx8ICh0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpICYmICF0aGlzLmdldEZvcm1hdEVsZW1lbnQoY3VycmVudCkpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChyZW1vdmVEdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZExpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgLSAxOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRMaW5lc1tqXS5jb250YWlucyhzZWxlY3RlZExpbmVzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07IGxlbi0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZExpbmVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmUgaWYgdGhpcyBvZmZzZXQgaXMgdGhlIGVkZ2Ugb2Zmc2V0IG9mIGNvbnRhaW5lclxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gY29udGFpbmVyIFRoZSBub2RlIG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LiAocmFuZ2Uuc3RhcnRDb250YWluZXIuLilcclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IFRoZSBvZmZzZXQgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuIChjb3JlLmdldFJhbmdlKCkuc3RhcnRPZmZzZXQuLi4pXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBkaXIgU2VsZWN0IGNoZWNrIHBvaW50IC0gQm90aCBlZGdlLCBGcm9udCBlZGdlIG9yIEVuZCBlZGdlLiAoXCJmcm9udFwiOiBGcm9udCBlZGdlLCBcImVuZFwiOiBFbmQgZWRnZSwgdW5kZWZpbmVkOiBCb3RoIGVkZ2UpXHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaXNFZGdlUG9pbnQ6IGZ1bmN0aW9uIChjb250YWluZXIsIG9mZnNldCwgZGlyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZGlyICE9PSAnZW5kJyAmJiBvZmZzZXQgPT09IDApIHx8ICgoIWRpciB8fCBkaXIgIT09ICdmcm9udCcpICYmICFjb250YWluZXIubm9kZVZhbHVlICYmIG9mZnNldCA9PT0gMSkgfHwgKCghZGlyIHx8IGRpciA9PT0gJ2VuZCcpICYmICEhY29udGFpbmVyLm5vZGVWYWx1ZSAmJiBvZmZzZXQgPT09IGNvbnRhaW5lci5ub2RlVmFsdWUubGVuZ3RoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBhbmQgb2Zmc2V0IHZhbHVlcyBhcmUgdGhlIGVkZ2VzIG9mIHRoZSBmb3JtYXQgdGFnXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBjb250YWluZXIgVGhlIG5vZGUgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuIChyYW5nZS5zdGFydENvbnRhaW5lci4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldCBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC4gKGNvcmUuZ2V0UmFuZ2UoKS5zdGFydE9mZnNldC4uLilcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyIFNlbGVjdCBjaGVjayBwb2ludCAtIFwiZnJvbnRcIjogRnJvbnQgZWRnZSwgXCJlbmRcIjogRW5kIGVkZ2UsIHVuZGVmaW5lZDogQm90aCBlZGdlLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheXxudWxsfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzRWRnZUZvcm1hdDogZnVuY3Rpb24gKG5vZGUsIG9mZnNldCwgZGlyKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0VkZ2VQb2ludChub2RlLCBvZmZzZXQsIGRpcikpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBkaXIgPSBkaXIgPT09ICdmcm9udCcgPyAncHJldmlvdXNTaWJsaW5nJyA6ICduZXh0U2libGluZyc7XHJcbiAgICAgICAgICAgIHdoaWxlIChub2RlICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChub2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZVtkaXJdIHx8ICh1dGlsLmlzQnJlYWsobm9kZVtkaXJdKSAmJiAhbm9kZVtkaXJdW2Rpcl0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHJlc3VsdC5wdXNoKG5vZGUuY2xvbmVOb2RlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNob3cgbG9hZGluZyBib3hcclxuICAgICAgICAgKi9cclxuICAgICAgICBzaG93TG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubG9hZGluZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2xvc2UgbG9hZGluZyBib3hcclxuICAgICAgICAgKi9cclxuICAgICAgICBjbG9zZUxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmxvYWRpbmcuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXBwZW5kIGZvcm1hdCBlbGVtZW50IHRvIHNpYmxpbmcgbm9kZSBvZiBhcmd1bWVudCBlbGVtZW50LlxyXG4gICAgICAgICAqIElmIHRoZSBcImZvcm1hdE5vZGVOYW1lXCIgYXJndW1lbnQgdmFsdWUgaXMgcHJlc2VudCwgdGhlIHRhZyBvZiB0aGF0IGFyZ3VtZW50IHZhbHVlIGlzIGluc2VydGVkLFxyXG4gICAgICAgICAqIElmIG5vdCwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtYXQgdGFnIGlzIGluc2VydGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBJbnNlcnQgYXMgc2libGluZ3Mgb2YgdGhhdCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudHxudWxsfSBmb3JtYXROb2RlIE5vZGUgbmFtZSBvciBub2RlIG9iZWpjdCB0byBiZSBpbnNlcnRlZFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFwcGVuZEZvcm1hdFRhZzogZnVuY3Rpb24gKGVsZW1lbnQsIGZvcm1hdE5vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3Qgb0Zvcm1hdE5hbWUgPSBmb3JtYXROb2RlID8gKHR5cGVvZiBmb3JtYXROb2RlID09PSAnc3RyaW5nJyA/IGZvcm1hdE5vZGUgOiBmb3JtYXROb2RlLm5vZGVOYW1lKSA6ICh1dGlsLmlzRm9ybWF0RWxlbWVudChjdXJyZW50Rm9ybWF0RWwpICYmICF1dGlsLmlzRnJlZUZvcm1hdEVsZW1lbnQoY3VycmVudEZvcm1hdEVsKSkgPyBjdXJyZW50Rm9ybWF0RWwubm9kZU5hbWUgOiBvcHRpb25zLmRlZmF1bHRUYWc7XHJcbiAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob0Zvcm1hdE5hbWUpO1xyXG4gICAgICAgICAgICBvRm9ybWF0LmlubmVySFRNTCA9ICc8YnI+JztcclxuXHJcbiAgICAgICAgICAgIGlmICgoZm9ybWF0Tm9kZSAmJiB0eXBlb2YgZm9ybWF0Tm9kZSAhPT0gJ3N0cmluZycpIHx8ICghZm9ybWF0Tm9kZSAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChjdXJyZW50Rm9ybWF0RWwpKSkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhvRm9ybWF0LCBmb3JtYXROb2RlIHx8IGN1cnJlbnRGb3JtYXRFbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQ2VsbChlbGVtZW50KSkgZWxlbWVudC5pbnNlcnRCZWZvcmUob0Zvcm1hdCwgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICBlbHNlIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUob0Zvcm1hdCwgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9Gb3JtYXQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBtZXRob2QgdG8gaW5zZXJ0IGEgZWxlbWVudCBhbmQgcmV0dXJuLiAodXNlZCBlbGVtZW50cyA6IHRhYmxlLCBociwgaW1hZ2UsIHZpZGVvKVxyXG4gICAgICAgICAqIElmIFwiZWxlbWVudFwiIGlzIFwiSFJcIiwgaW5zZXJ0IGFuZCByZXR1cm4gdGhlIG5ldyBsaW5lLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRvIGJlIGluc2VydGVkXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBub3RIaXN0b3J5UHVzaCBXaGVuIHRydWUsIGl0IGRvZXMgbm90IHVwZGF0ZSB0aGUgaGlzdG9yeSBzdGFjayBhbmQgdGhlIHNlbGVjdGlvbiBvYmplY3QgYW5kIHJldHVybiBFZGdlTm9kZXMgKHV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMpXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBjaGVja0NoYXJDb3VudCBJZiB0cnVlLCBpZiBcIm9wdGlvbnMubWF4Q2hhckNvdW50XCIgaXMgZXhjZWVkZWQgd2hlbiBcImVsZW1lbnRcIiBpcyBhZGRlZCwgbnVsbCBpcyByZXR1cm5lZCB3aXRob3V0IGFkZGl0aW9uLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbm90U2VsZWN0IElmIHRydWUsIERvIG5vdCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgaW5zZXJ0ZWQgY29tcG9uZW50LlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluc2VydENvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQsIG5vdEhpc3RvcnlQdXNoLCBjaGVja0NoYXJDb3VudCwgbm90U2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVja0NoYXJDb3VudCAmJiAhdGhpcy5jaGVja0NoYXJDb3VudChlbGVtZW50LCBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHRoaXMuZ2V0UmFuZ2UoKSwgci5jb250YWluZXIpO1xyXG4gICAgICAgICAgICBsZXQgb05vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnROb2RlKGVsZW1lbnQsIHNlbGVjdGlvbk5vZGUgPT09IGZvcm1hdEVsID8gbnVsbCA6IHIuY29udGFpbmVyLm5leHRTaWJsaW5nLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQubmV4dFNpYmxpbmcpIGVsZW1lbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJykpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UmFuZ2UoKS5jb2xsYXBzZWQgJiYgKHIuY29udGFpbmVyLm5vZGVUeXBlID09PSAzIHx8IHV0aWwuaXNCcmVhayhyLmNvbnRhaW5lcikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVwdGhGb3JtYXQgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoci5jb250YWluZXIsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpOyB9LmJpbmQodXRpbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9Ob2RlID0gdXRpbC5zcGxpdEVsZW1lbnQoci5jb250YWluZXIsIHIub2Zmc2V0LCAhZGVwdGhGb3JtYXQgPyAwIDogdXRpbC5nZXRFbGVtZW50RGVwdGgoZGVwdGhGb3JtYXQpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9Ob2RlKSBmb3JtYXRFbCA9IG9Ob2RlLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Tm9kZShlbGVtZW50LCBmb3JtYXRFbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVsICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsKSkgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlbGVtZW50LCAwLCBlbGVtZW50LCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbm90U2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29tcG9uZW50SW5mbyA9IHRoaXMuZ2V0RmlsZUNvbXBvbmVudChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGZpbGVDb21wb25lbnRJbmZvLnRhcmdldCwgZmlsZUNvbXBvbmVudEluZm8ucGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb05vZGUgPSB1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKG9Ob2RlLCBudWxsKS5zYyB8fCBvTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9Ob2RlLCAwLCBvTm9kZSwgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgaWYgKCFub3RIaXN0b3J5UHVzaCkgdGhpcy5oaXN0b3J5LnB1c2goMSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb05vZGUgfHwgZWxlbWVudDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgZmlsZSBjb21wb25lbnQgYW5kIHRoYXQgcGx1Z2luIG5hbWVcclxuICAgICAgICAgKiByZXR1cm46IHt0YXJnZXQsIGNvbXBvbmVudCwgcGx1Z2luTmFtZX0gfCBudWxsXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50IChmaWd1cmUgdGFnLCBjb21wb25lbnQgZGl2LCBmaWxlIHRhZylcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fG51bGx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0RmlsZUNvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9maWxlTWFuYWdlci5xdWVyeVN0cmluZyB8fCAhZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0LCBwbHVnaW5OYW1lO1xyXG4gICAgICAgICAgICBpZiAoL15GSUdVUkUkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCAvc2UtY29tcG9uZW50Ly50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuX2ZpbGVNYW5hZ2VyLnF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBlbGVtZW50Lm5vZGVOYW1lICYmIHRoaXMuX2ZpbGVNYW5hZ2VyLnJlZ0V4cC50ZXN0KGVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW5OYW1lID0gdGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luTWFwW3RhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgICAgIGlmIChwbHVnaW5OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldCwgdXRpbC5pc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbXBvbmVudChpbWFnZSwgdmlkZW8pIGlzIHNlbGVjdGVkIGFuZCB0aGUgcmVzaXppbmcgbW9kdWxlIGlzIGNhbGxlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0YWcgKGltZywgaWZyYW1lLCB2aWRlbylcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSAoaW1hZ2UsIHZpZGVvKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNlbGVjdENvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHBsdWdpbk5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNVbmVkaXRhYmxlQ29tcG9uZW50KHV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB1dGlsLmlzQ29tcG9uZW50KSkgfHwgdXRpbC5pc1VuZWRpdGFibGVDb21wb25lbnQoZWxlbWVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0ZvY3VzKSB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFwbHVnaW4pIHJldHVybjtcclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5zZWxlY3QgPT09ICdmdW5jdGlvbicpIHRoaXMuY2FsbFBsdWdpbihwbHVnaW5OYW1lLCBwbHVnaW4uc2VsZWN0LmJpbmQodGhpcywgZWxlbWVudCksIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tcG9uZW50TGluZUJyZWFrZXIoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCBsaW5lIGJyZWFrZXIgb2YgY29tcG9uZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGFnIChpbWcsIGlmcmFtZSwgdmlkZW8pXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0Q29tcG9uZW50TGluZUJyZWFrZXI6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIC8vIGxpbmUgYnJlYWtlclxyXG4gICAgICAgICAgICB0aGlzLl9saW5lQnJlYWtlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdXRpbC5pc0NvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRfc3R5bGUgPSBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfdC5zdHlsZTtcclxuICAgICAgICAgICAgY29uc3QgYl9zdHlsZSA9IGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl9iLnN0eWxlO1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNvbnRleHQucmVzaXppbmcucmVzaXplQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycgPyB0aGlzLmNvbnRleHQucmVzaXppbmcucmVzaXplQ29udGFpbmVyIDogZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGlzTGlzdCA9IHV0aWwuaXNMaXN0Q2VsbChjb250YWluZXIucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICAgIGxldCBjb21wb25lbnRUb3AsIHdTY3JvbGwsIHc7XHJcbiAgICAgICAgICAgIC8vIHRvcFxyXG4gICAgICAgICAgICBpZiAoaXNMaXN0ID8gIWNvbnRhaW5lci5wcmV2aW91c1NpYmxpbmcgOiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29udGFpbmVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fbGluZUJyZWFrQ29tcCA9IGNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIHdTY3JvbGwgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRUb3AgPSB1dGlsLmdldE9mZnNldChlbGVtZW50LCBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lKS50b3AgKyB3U2Nyb2xsO1xyXG4gICAgICAgICAgICAgICAgdyA9ICh0YXJnZXQub2Zmc2V0V2lkdGggLyAyKSAvIDI7XHJcblxyXG4gICAgICAgICAgICAgICAgdF9zdHlsZS50b3AgPSAoY29tcG9uZW50VG9wIC0gd1Njcm9sbCAtIDEyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB0X3N0eWxlLmxlZnQgPSAodXRpbC5nZXRPZmZzZXQodGFyZ2V0KS5sZWZ0ICsgdykgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgdF9zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRfc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBib3R0b21cclxuICAgICAgICAgICAgaWYgKGlzTGlzdCA/ICFjb250YWluZXIubmV4dFNpYmxpbmcgOiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50VG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2xpbmVCcmVha0NvbXAgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgd1Njcm9sbCA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRUb3AgPSB1dGlsLmdldE9mZnNldChlbGVtZW50LCBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lKS50b3AgKyB3U2Nyb2xsO1xyXG4gICAgICAgICAgICAgICAgICAgIHcgPSAodGFyZ2V0Lm9mZnNldFdpZHRoIC8gMikgLyAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJfc3R5bGUudG9wID0gKGNvbXBvbmVudFRvcCArIHRhcmdldC5vZmZzZXRIZWlnaHQgLSB3U2Nyb2xsIC0gMTIpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGJfc3R5bGUubGVmdCA9ICh1dGlsLmdldE9mZnNldCh0YXJnZXQpLmxlZnQgKyB0YXJnZXQub2Zmc2V0V2lkdGggLSB3IC0gMjQpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGJfc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBiX3N0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIHNlbGVjdGVkIG5vZGUgYW5kIGluc2VydCBhcmd1bWVudCB2YWx1ZSBub2RlIGFuZCByZXR1cm4uXHJcbiAgICAgICAgICogSWYgdGhlIFwiYWZ0ZXJOb2RlXCIgZXhpc3RzLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUgXCJhZnRlck5vZGVcIlxyXG4gICAgICAgICAqIEluc2VydGluZyBhIHRleHQgbm9kZSBtZXJnZXMgd2l0aCBib3RoIHRleHQgbm9kZXMgb24gYm90aCBzaWRlcyBhbmQgcmV0dXJucyBhIG5ldyBcInsgY29udGFpbmVyLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH1cIi5cclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IG9Ob2RlIEVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWRcclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV8bnVsbH0gYWZ0ZXJOb2RlIElmIHRoZSBub2RlIGV4aXN0cywgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIG5vZGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNoZWNrQ2hhckNvdW50IElmIHRydWUsIGlmIFwib3B0aW9ucy5tYXhDaGFyQ291bnRcIiBpcyBleGNlZWRlZCB3aGVuIFwiZWxlbWVudFwiIGlzIGFkZGVkLCBudWxsIGlzIHJldHVybmVkIHdpdGhvdXQgYWRkaXRpb24uXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdHxOb2RlfG51bGx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5zZXJ0Tm9kZTogZnVuY3Rpb24gKG9Ob2RlLCBhZnRlck5vZGUsIGNoZWNrQ2hhckNvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVja0NoYXJDb3VudCAmJiAhdGhpcy5jaGVja0NoYXJDb3VudChvTm9kZSwgbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmcmVlRm9ybWF0ID0gdXRpbC5nZXRGcmVlRm9ybWF0RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRm9ybWF0cyA9ICghZnJlZUZvcm1hdCAmJiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob05vZGUpKSkgfHwgdXRpbC5pc0NvbXBvbmVudChvTm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWFmdGVyTm9kZSAmJiAoaXNGb3JtYXRzIHx8IHV0aWwuaXNDb21wb25lbnQob05vZGUpIHx8IHV0aWwuaXNNZWRpYShvTm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdGhpcy5yZW1vdmVOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoci5jb250YWluZXIubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKHIuY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcHRoRm9ybWF0ID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KHIuY29udGFpbmVyLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc1JhbmdlRm9ybWF0RWxlbWVudChjdXJyZW50KSB8fCB0aGlzLmlzTGlzdENlbGwoY3VycmVudCk7IH0uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5zcGxpdEVsZW1lbnQoci5jb250YWluZXIsIHIub2Zmc2V0LCAhZGVwdGhGb3JtYXQgPyAwIDogdXRpbC5nZXRFbGVtZW50RGVwdGgoZGVwdGhGb3JtYXQpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyTm9kZSkgYWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSAoIWFmdGVyTm9kZSAmJiAhaXNGb3JtYXRzKSA/IHRoaXMuZ2V0UmFuZ2VfYWRkTGluZSh0aGlzLmdldFJhbmdlKCksIG51bGwpIDogdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb21tb25Db24gPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmYgPSByYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgY29uc3QgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXRSYW5nZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSBjb21tb25Db24gJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29tbW9uQ29uKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRDb24gPSBmb3JtYXRSYW5nZSA/IChjb21tb25Db24uY2hpbGROb2Rlc1tzdGFydE9mZl0gfHwgY29tbW9uQ29uLmNoaWxkTm9kZXNbMF0pIDogcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZENvbiA9IGZvcm1hdFJhbmdlID8gKGNvbW1vbkNvbi5jaGlsZE5vZGVzW2VuZE9mZl0gfHwgY29tbW9uQ29uLmNoaWxkTm9kZXNbY29tbW9uQ29uLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV0pIDogcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50Tm9kZSwgb3JpZ2luQWZ0ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFhZnRlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydENvbi5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBzdGFydENvbi5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiBObyBTZWxlY3QgcmFuZ2Ugbm9kZSAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tb25Db24ubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vbkNvbi50ZXh0Q29udGVudC5sZW5ndGggPiBlbmRPZmYpIGFmdGVyTm9kZSA9IGNvbW1vbkNvbi5zcGxpdFRleHQoZW5kT2ZmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhZnRlck5vZGUgPSBjb21tb25Db24ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzQnJlYWsocGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3N0YXJ0T2ZmXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzTm9kZSA9IChjICYmIGMubm9kZVR5cGUgPT09IDMgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoYykgJiYgdXRpbC5pc0JyZWFrKGMubmV4dFNpYmxpbmcpKSA/IGMubmV4dFNpYmxpbmcgOiBjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9jdXNOb2RlLm5leHRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZm9jdXNOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSAodXRpbC5pc0JyZWFrKGZvY3VzTm9kZSkgJiYgIXV0aWwuaXNCcmVhayhvTm9kZSkpID8gZm9jdXNOb2RlIDogZm9jdXNOb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IHBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLyoqIFNlbGVjdCByYW5nZSBub2RlcyAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2FtZUNvbnRhaW5lciA9IHN0YXJ0Q29uID09PSBlbmRDb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NhbWVDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGdlUG9pbnQoZW5kQ29uLCBlbmRPZmYpKSBhZnRlck5vZGUgPSBlbmRDb24ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYWZ0ZXJOb2RlID0gZW5kQ29uLnNwbGl0VGV4dChlbmRPZmYpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRWRnZVBvaW50KHN0YXJ0Q29uLCBzdGFydE9mZikpIHJlbW92ZU5vZGUgPSBzdGFydENvbi5zcGxpdFRleHQoc3RhcnRPZmYpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgaXNGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZFRhZyA9IHRoaXMucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSByZW1vdmVkVGFnLmNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkNvbnRhaW5lciA9IHJlbW92ZWRUYWcucHJldkNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgaXNGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPCcgKyBvcHRpb25zLmRlZmF1bHRUYWcgKyAnPjxicj48LycgKyBvcHRpb25zLmRlZmF1bHRUYWcgKyAnPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGb3JtYXRzICYmIHByZXZDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwcmV2Q29udGFpbmVyLm5vZGVUeXBlID09PSAzID8gcHJldkNvbnRhaW5lci5wYXJlbnROb2RlIDogcHJldkNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLmNvbnRhaW5zKGNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2FtZVBhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhZnRlck5vZGUucGFyZW50Tm9kZSAhPT0gcGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBhZnRlck5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhcmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FtZVBhcmVudCAmJiBjb250YWluZXIgPT09IHByZXZDb250YWluZXIpIGFmdGVyTm9kZSA9IGFmdGVyTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IGlzRm9ybWF0cyA/IGVuZENvbiA6IGNvbnRhaW5lciA9PT0gcHJldkNvbnRhaW5lciA/IGNvbnRhaW5lci5uZXh0U2libGluZyA6IGNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSAoIWFmdGVyTm9kZSB8fCAhYWZ0ZXJOb2RlLnBhcmVudE5vZGUpID8gY29tbW9uQ29uIDogYWZ0ZXJOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhZnRlck5vZGUgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KGFmdGVyTm9kZSkgJiYgYWZ0ZXJOb2RlLnBhcmVudE5vZGUgIT09IGNvbW1vbkNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaGFzIGFmdGVyTm9kZVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBhZnRlck5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IGFmdGVyTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgIG9yaWdpbkFmdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gLS0tIGluc2VydCBub2RlIC0tLVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KGFmdGVyTm9kZSkgfHwgcGFyZW50Tm9kZSA9PT0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChvTm9kZSkgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChvTm9kZSkgfHwgKCF1dGlsLmlzTGlzdENlbGwocGFyZW50Tm9kZSkgJiYgdXRpbC5pc0NvbXBvbmVudChvTm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkUGFyZW50ID0gcGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3QoYWZ0ZXJOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gYWZ0ZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc0xpc3RDZWxsKGFmdGVyTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IGFmdGVyTm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGFmdGVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFvcmlnaW5BZnRlciAmJiAhYWZ0ZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gci5jb250YWluZXIubm9kZVR5cGUgPT09IDMgPyAodXRpbC5pc0xpc3RDZWxsKHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChyLmNvbnRhaW5lciwgbnVsbCkpID8gci5jb250YWluZXIgOiAodXRpbC5nZXRGb3JtYXRFbGVtZW50KHIuY29udGFpbmVyLCBudWxsKSB8fCByLmNvbnRhaW5lci5wYXJlbnROb2RlKSkgOiByLmNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VDb24gPSB1dGlsLmlzV3lzaXd5Z0Rpdihjb250YWluZXIpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHJhbmdlQ29uID8gY29udGFpbmVyIDogY29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IHJhbmdlQ29uID8gbnVsbCA6IGNvbnRhaW5lci5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgcGFyZW50Tm9kZSAhPT0gb2xkUGFyZW50KSB1dGlsLnJlbW92ZUl0ZW0ob2xkUGFyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGb3JtYXRzICYmICFmcmVlRm9ybWF0ICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHBhcmVudE5vZGUpICYmICF1dGlsLmlzTGlzdENlbGwocGFyZW50Tm9kZSkgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KHBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gcGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Tm9kZSkgJiYgKG9Ob2RlLm5vZGVUeXBlID09PSAzIHx8IHV0aWwuaXNCcmVhayhvTm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZk5vZGUgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICBmTm9kZS5hcHBlbmRDaGlsZChvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb05vZGUgPSBmTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShvTm9kZSwgcGFyZW50Tm9kZSA9PT0gYWZ0ZXJOb2RlID8gcGFyZW50Tm9kZS5sYXN0Q2hpbGQgOiBhZnRlck5vZGUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKG9Ob2RlKTtcclxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIGlmICgodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNDb21wb25lbnQob05vZGUpKSAmJiBzdGFydENvbiA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY0l0ZW0gPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoY29tbW9uQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY0l0ZW0gJiYgY0l0ZW0ubm9kZVR5cGUgPT09IDEgJiYgdXRpbC5pc0VtcHR5TGluZShjSXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZyZWVGb3JtYXQgJiYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KG9Ob2RlKSB8fCB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KG9Ob2RlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBvTm9kZSA9IHRoaXMuX3NldEludG9GcmVlRm9ybWF0KG9Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNDb21wb25lbnQob05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9Ob2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gb05vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gb05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVGV4dCA9ICghcHJldmlvdXMgfHwgIHByZXZpb3VzLm5vZGVUeXBlID09PSAxIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKHByZXZpb3VzKSkgPyAnJyA6IHByZXZpb3VzLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9ICghbmV4dCB8fCBuZXh0Lm5vZGVUeXBlID09PSAxIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKG5leHQpKSA/ICcnIDogbmV4dC50ZXh0Q29udGVudDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzVGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvTm9kZS50ZXh0Q29udGVudCA9IHByZXZpb3VzVGV4dCArIG9Ob2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHByZXZpb3VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiBuZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlLnRleHRDb250ZW50ICs9IG5leHRUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogb05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogcHJldmlvdXNUZXh0Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogb05vZGUudGV4dENvbnRlbnQubGVuZ3RoIC0gbmV4dFRleHQubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9Ob2RlLCBuZXdSYW5nZS5zdGFydE9mZnNldCwgb05vZGUsIG5ld1JhbmdlLmVuZE9mZnNldCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaXNCcmVhayhvTm9kZSkgJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQocGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHplcm9XaWR0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb05vZGUucHJldmlvdXNTaWJsaW5nIHx8IHV0aWwuaXNCcmVhayhvTm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvV2lkdGggPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoemVyb1dpZHRoLCBvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb05vZGUubmV4dFNpYmxpbmcgfHwgdXRpbC5pc0JyZWFrKG9Ob2RlLm5leHRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHplcm9XaWR0aCwgb05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuX2lzSWdub3JlTm9kZUNoYW5nZShvTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlID0gb05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShvTm9kZSwgb2Zmc2V0LCBvTm9kZSwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb05vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0SW50b0ZyZWVGb3JtYXQ6IGZ1bmN0aW9uIChvTm9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gb05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgbGV0IG9Ob2RlQ2hpbGRyZW4sIGxhc3RPTm9kZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHdoaWxlICh1dGlsLmlzRm9ybWF0RWxlbWVudChvTm9kZSkgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChvTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIG9Ob2RlQ2hpbGRyZW4gPSBvTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgbGFzdE9Ob2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKG9Ob2RlQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0T05vZGUgPSBvTm9kZUNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChsYXN0T05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQobGFzdE9Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRJbnRvRnJlZUZvcm1hdChsYXN0T05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9Ob2RlLnBhcmVudE5vZGUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvTm9kZUNoaWxkcmVuID0gb05vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGxhc3RPTm9kZSwgb05vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAob05vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHV0aWwucmVtb3ZlSXRlbShvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBvTm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG9Ob2RlLCBsYXN0T05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb05vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzIGFuZCByZXNldCBzZWxlY3Rpb24gcmFuZ2VcclxuICAgICAgICAgKiBSZXR1cm5zIHtjb250YWluZXI6IFwidGhlIGxhc3QgZWxlbWVudCBhZnRlciBkZWxldGlvblwiLCBvZmZzZXQ6IFwib2Zmc2V0XCIsIHByZXZDb250YWluZXI6IFwicHJldmlvdXNFbGVtZW50U2libGluZyBPZiB0aGUgZGVsZXRlZCBhcmVhXCJ9XHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW1vdmVOb2RlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0UmFuZ2VUb1RleHROb2RlKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciwgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBjb21tb25Db24gPSAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IDMgJiYgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZSA9PT0gc3RhcnRDb24ucGFyZW50Tm9kZSkgPyBzdGFydENvbi5wYXJlbnROb2RlIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgIGlmIChjb21tb25Db24gPT09IHN0YXJ0Q29uICYmIGNvbW1vbkNvbiA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydENvbiA9IGNvbW1vbkNvbi5jaGlsZHJlbltzdGFydE9mZl07XHJcbiAgICAgICAgICAgICAgICBlbmRDb24gPSBjb21tb25Db24uY2hpbGRyZW5bZW5kT2ZmXTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gZW5kT2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGJlZm9yZU5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgYWZ0ZXJOb2RlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB1dGlsLmdldExpc3RDaGlsZE5vZGVzKGNvbW1vbkNvbiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydEluZGV4ID0gdXRpbC5nZXRBcnJheUluZGV4KGNoaWxkTm9kZXMsIHN0YXJ0Q29uKTtcclxuICAgICAgICAgICAgbGV0IGVuZEluZGV4ID0gdXRpbC5nZXRBcnJheUluZGV4KGNoaWxkTm9kZXMsIGVuZENvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGggPiAwICYmIHN0YXJ0SW5kZXggPiAtMSAmJiBlbmRJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleCArIDEsIHN0YXJ0Tm9kZSA9IHN0YXJ0Q29uOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVzW2ldID09PSBzdGFydE5vZGUucGFyZW50Tm9kZSAmJiBjaGlsZE5vZGVzW2ldLmZpcnN0Q2hpbGQgPT09IHN0YXJ0Tm9kZSAmJiBzdGFydE9mZiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZW5kSW5kZXggLSAxLCBlbmROb2RlID0gZW5kQ29uOyBpID4gc3RhcnRJbmRleDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXNbaV0gPT09IGVuZE5vZGUucGFyZW50Tm9kZSAmJiBjaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmROb2RlID0gZW5kTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAtLWVuZEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChjb21tb25Db24pIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY29tbW9uQ29uKSB8fCB1dGlsLmlzV3lzaXd5Z0Rpdihjb21tb25Db24pIHx8IHV0aWwuaXNCcmVhayhjb21tb25Db24pIHx8IHV0aWwuaXNNZWRpYShjb21tb25Db24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbW1vbkNvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbW9uQ29uLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbW1vbkNvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZW5kT2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZXMucHVzaChjb21tb25Db24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gZW5kQ29uID0gY29tbW9uQ29uO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbiA9IGVuZENvbiA9IGNoaWxkTm9kZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhzdGFydENvbikgfHwgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc3RhcnRDb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHV0aWwuaXNNZWRpYShjb21tb25Db24pID8gY29tbW9uQ29uIDogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGVuZEluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoaXRlbSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYodXRpbC5pc0xpc3RDZWxsKGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gdXRpbC5nZXRBcnJheUl0ZW0oZm9ybWF0LmNoaWxkcmVuLCB1dGlsLmlzTGlzdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbGlzdC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5pbnNlcnRCZWZvcmUoY2hpbGRyZW5bMF0sIGxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoY2hpbGQsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09PSAwIHx8IChpdGVtLm5vZGVUeXBlID09PSAzICYmIGl0ZW0uZGF0YSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gc3RhcnRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb24ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNDb21wb25lbnQoc3RhcnRDb24pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBiZWZvcmVOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShzdGFydENvbi50ZXh0Q29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09IGVuZENvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoc3RhcnRDb24uc3Vic3RyaW5nRGF0YSgwLCBzdGFydE9mZikgKyBlbmRDb24uc3Vic3RyaW5nRGF0YShlbmRPZmYsIChlbmRDb24ubGVuZ3RoIC0gZW5kT2ZmKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RhcnRPZmY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShzdGFydENvbi5zdWJzdHJpbmdEYXRhKDAsIHN0YXJ0T2ZmKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVOb2RlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24uZGF0YSA9IGJlZm9yZU5vZGUuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoc3RhcnRDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09IGVuZENvbikgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09IGVuZENvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRDb24ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNDb21wb25lbnQoZW5kQ29uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYWZ0ZXJOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShlbmRDb24udGV4dENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoZW5kQ29uLnN1YnN0cmluZ0RhdGEoZW5kT2ZmLCAoZW5kQ29uLmxlbmd0aCAtIGVuZE9mZikpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlck5vZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb24uZGF0YSA9IGFmdGVyTm9kZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShlbmRDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIgPSBlbmRDb24gJiYgZW5kQ29uLnBhcmVudE5vZGUgPyBlbmRDb24gOiBzdGFydENvbiAmJiBzdGFydENvbi5wYXJlbnROb2RlID8gc3RhcnRDb24gOiAocmFuZ2UuZW5kQ29udGFpbmVyIHx8IHJhbmdlLnN0YXJ0Q29udGFpbmVyKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghdXRpbC5pc1d5c2l3eWdEaXYoY29udGFpbmVyKSAmJiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJjID0gdXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhjb250YWluZXIsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDb21wb25lbnQoY3VycmVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gY3VycmVudC50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggPT09IDAgfHwgL14oXFxufFxcdTIwMEIpKyQvLnRlc3QodGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodXRpbCksIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAocmMpIGNvbnRhaW5lciA9IHJjLnNjIHx8IHJjLmVjIHx8IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgcmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShjb250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBwcmV2Q29udGFpbmVyOiBzdGFydENvbiAmJiBzdGFydENvbi5wYXJlbnROb2RlID8gc3RhcnRDb24gOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFwcGVuZGVkIGFsbCBzZWxlY3RlZCBmb3JtYXQgRWxlbWVudCB0byB0aGUgYXJndW1lbnQgZWxlbWVudCBhbmQgaW5zZXJ0XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSByYW5nZUVsZW1lbnQgRWxlbWVudCBvZiB3cmFwIHRoZSBhcmd1bWVudHMgKEJMT0NLUVVPVEUuLi4pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXBwbHlSYW5nZUZvcm1hdEVsZW1lbnQ6IGZ1bmN0aW9uIChyYW5nZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHRoaXMuZ2V0UmFuZ2UoKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlTGluZXMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKCFyYW5nZUxpbmVzIHx8IHJhbmdlTGluZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsaW5lc0xvb3A6XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByYW5nZUxpbmVzLmxlbmd0aCwgbGluZSwgbmVzdGVkLCBmRWwsIGxFbCwgZiwgbDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gcmFuZ2VMaW5lc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0xpc3RDZWxsKGxpbmUpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBuZXN0ZWQgPSBsaW5lLmxhc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVzdGVkICYmIHV0aWwuaXNMaXN0Q2VsbChsaW5lLm5leHRFbGVtZW50U2libGluZykgJiYgcmFuZ2VMaW5lcy5pbmRleE9mKGxpbmUubmV4dEVsZW1lbnRTaWJsaW5nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbEVsID0gbmVzdGVkLmxhc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlTGluZXMuaW5kZXhPZihsRWwpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGxpc3QgPSBsRWwubGFzdEVsZW1lbnRDaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdChsaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZUxpbmVzLmluZGV4T2YobGlzdC5sYXN0RWxlbWVudENoaWxkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxFbCA9IGxpc3QubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBsaW5lc0xvb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmRWwgPSBuZXN0ZWQuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSByYW5nZUxpbmVzLmluZGV4T2YoZkVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHJhbmdlTGluZXMuaW5kZXhPZihsRWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUxpbmVzLnNwbGljZShmLCAobCAtIGYpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHJhbmdlTGluZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBsYXN0ICA9IHJhbmdlTGluZXNbcmFuZ2VMaW5lcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgbGV0IHN0YW5kVGFnLCBiZWZvcmVUYWcsIHBFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQobGFzdCkgfHwgdXRpbC5pc0Zvcm1hdEVsZW1lbnQobGFzdCkpIHtcclxuICAgICAgICAgICAgICAgIHN0YW5kVGFnID0gbGFzdDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YW5kVGFnID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQobGFzdCwgbnVsbCkgfHwgdXRpbC5nZXRGb3JtYXRFbGVtZW50KGxhc3QsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0NlbGwoc3RhbmRUYWcpKSB7XHJcbiAgICAgICAgICAgICAgICBiZWZvcmVUYWcgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcEVsZW1lbnQgPSBzdGFuZFRhZztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IHN0YW5kVGFnLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgcEVsZW1lbnQgPSBzdGFuZFRhZy5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgcGFyZW50RGVwdGggPSB1dGlsLmdldEVsZW1lbnREZXB0aChzdGFuZFRhZyk7XHJcbiAgICAgICAgICAgIGxldCBsaXN0UGFyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgbGluZUFyciA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVJdGVtcyA9IGZ1bmN0aW9uIChwYXJlbnQsIG9yaWdpbiwgYmVmb3JlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPT0gb3JpZ2luICYmICF1dGlsLmlzVGFibGUob3JpZ2luKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW4gJiYgdXRpbC5nZXRFbGVtZW50RGVwdGgocGFyZW50KSA9PT0gdXRpbC5nZXRFbGVtZW50RGVwdGgob3JpZ2luKSkgcmV0dXJuIGJlZm9yZTtcclxuICAgICAgICAgICAgICAgICAgICBjYyA9IHV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMob3JpZ2luLCBudWxsLCBwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBjYyA/IGNjLmVjIDogYmVmb3JlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJhbmdlTGluZXMubGVuZ3RoLCBsaW5lLCBvcmlnaW5QYXJlbnQsIGRlcHRoLCBiZWZvcmUsIG5leHRMaW5lLCBuZXh0TGlzdCwgbmVzdGVkOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSByYW5nZUxpbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luUGFyZW50ID0gbGluZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5QYXJlbnQgfHwgcmFuZ2VFbGVtZW50LmNvbnRhaW5zKG9yaWdpblBhcmVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlcHRoID0gdXRpbC5nZXRFbGVtZW50RGVwdGgobGluZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KG9yaWdpblBhcmVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGlzdFBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dExpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQYXJlbnQgPSBuZXh0TGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGlzdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0UGFyZW50ID0gb3JpZ2luUGFyZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVBcnIucHVzaChsaW5lKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZSA9IHJhbmdlTGluZXNbaSArIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSB8fCAobmV4dExpbmUgJiYgbmV4dExpbmUucGFyZW50Tm9kZSAhPT0gb3JpZ2luUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dExpbmUgJiYgbGluZS5jb250YWlucyhuZXh0TGluZS5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpc3QgPSBuZXh0TGluZS5wYXJlbnROb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gb3JpZ2luUGFyZW50LnBhcmVudE5vZGUsIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh1dGlsLmlzTGlzdChsaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHV0aWwuY3JlYXRlRWxlbWVudChsaXN0Lm5vZGVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQobGlzdFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0UGFyZW50ID0gcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChvcmlnaW5QYXJlbnQsIGxpbmVBcnIsIG51bGwsIHRydWUsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudERlcHRoID49IGRlcHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnREZXB0aCA9IGRlcHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVsZW1lbnQgPSBlZGdlLmNjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlVGFnID0gcmVtb3ZlSXRlbXMocEVsZW1lbnQsIG9yaWdpblBhcmVudCwgZWRnZS5lYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlVGFnKSBwRWxlbWVudCA9IGJlZm9yZVRhZy5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBFbGVtZW50ID09PSBlZGdlLmNjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVUYWcgPSBlZGdlLmVjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocEVsZW1lbnQgIT09IGVkZ2UuY2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IHJlbW92ZUl0ZW1zKHBFbGVtZW50LCBlZGdlLmNjLCBiZWZvcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZSAhPT0gdW5kZWZpbmVkKSBiZWZvcmVUYWcgPSBiZWZvcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGJlZm9yZVRhZyA9IGVkZ2UuY2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gZWRnZS5yZW1vdmVBcnJheS5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQYXJlbnQuYXBwZW5kQ2hpbGQoZWRnZS5yZW1vdmVBcnJheVtjXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmVzdGVkKSByYW5nZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGlzdFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGlzdCkgZWRnZS5yZW1vdmVBcnJheVtlZGdlLnJlbW92ZUFycmF5Lmxlbmd0aCAtIDFdLmFwcGVuZENoaWxkKG5leHRMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudERlcHRoID49IGRlcHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudERlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBFbGVtZW50ID0gb3JpZ2luUGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVUYWcgPSBsaW5lLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByYW5nZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudCAhPT0gb3JpZ2luUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IHJlbW92ZUl0ZW1zKHBFbGVtZW50LCBvcmlnaW5QYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlICE9PSB1bmRlZmluZWQpIGJlZm9yZVRhZyA9IGJlZm9yZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHV0aWwubWVyZ2VTYW1lVGFncyhyYW5nZUVsZW1lbnQsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgdXRpbC5tZXJnZU5lc3RlZFRhZ3MocmFuZ2VFbGVtZW50LCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3QoY3VycmVudCk7IH0uYmluZCh1dGlsKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBOZXN0ZWQgbGlzdFxyXG4gICAgICAgICAgICBpZiAoYmVmb3JlVGFnICYmIHV0aWwuZ2V0RWxlbWVudERlcHRoKGJlZm9yZVRhZykgPiAwICYmICh1dGlsLmlzTGlzdChiZWZvcmVUYWcucGFyZW50Tm9kZSkgfHwgdXRpbC5pc0xpc3QoYmVmb3JlVGFnLnBhcmVudE5vZGUucGFyZW50Tm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXB0aEZvcm1hdCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChiZWZvcmVUYWcsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdChjdXJyZW50KTsgfS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0UmFuZ2UgPSB1dGlsLnNwbGl0RWxlbWVudChiZWZvcmVUYWcsIG51bGwsICFkZXB0aEZvcm1hdCA/IDAgOiB1dGlsLmdldEVsZW1lbnREZXB0aChkZXB0aEZvcm1hdCkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHNwbGl0UmFuZ2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmFuZ2VFbGVtZW50LCBzcGxpdFJhbmdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gYmFzaWNcclxuICAgICAgICAgICAgICAgIHBFbGVtZW50Lmluc2VydEJlZm9yZShyYW5nZUVsZW1lbnQsIGJlZm9yZVRhZyk7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVJdGVtcyhyYW5nZUVsZW1lbnQsIGJlZm9yZVRhZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKHJhbmdlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCwgcmFuZ2VFbGVtZW50Lmxhc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAocmFuZ2VMaW5lcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGVkZ2Uuc2MsIDAsIGVkZ2UuZWMsIGVkZ2UuZWMudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZWRnZS5lYywgZWRnZS5lYy50ZXh0Q29udGVudC5sZW5ndGgsIGVkZ2UuZWMsIGVkZ2UuZWMudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbGVtZW50cyBvZiB0aGUgXCJzZWxlY3RlZEZvcm1hdHNcIiBhcnJheSBhcmUgZGV0YWNoZWQgZnJvbSB0aGUgXCJyYW5nZUVsZW1lbnRcIiBlbGVtZW50LiAoXCJMSVwiIHRhZ3MgYXJlIGNvbnZlcnRlZCB0byBcIlBcIiB0YWdzKVxyXG4gICAgICAgICAqIFdoZW4gXCJzZWxlY3RlZEZvcm1hdHNcIiBpcyBudWxsLCBhbGwgZWxlbWVudHMgYXJlIGRldGFjaGVkIGFuZCByZXR1cm4ge2NjOiBwYXJlbnROb2RlLCBzYzogbmV4dFNpYmxpbmcsIGVjOiBwcmV2aW91c1NpYmxpbmcsIHJlbW92ZUFycmF5OiBbQXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50c119LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmFuZ2VFbGVtZW50IFJhbmdlIGZvcm1hdCBlbGVtZW50IChQUkUsIEJMT0NLUVVPVEUsIE9MLCBVTC4uLilcclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IHNlbGVjdGVkRm9ybWF0cyBBcnJheSBvZiBmb3JtYXQgZWxlbWVudHMgKFAsIERJViwgTEkuLi4pIHRvIHJlbW92ZS5cclxuICAgICAgICAgKiBJZiBudWxsLCBBcHBsaWVzIHRvIGFsbCBlbGVtZW50cyBhbmQgcmV0dXJuIHtjYzogcGFyZW50Tm9kZSwgc2M6IG5leHRTaWJsaW5nLCBlYzogcHJldmlvdXNTaWJsaW5nfVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBuZXdSYW5nZUVsZW1lbnQgVGhlIG5vZGUocmFuZ2VFbGVtZW50KSB0byByZXBsYWNlIHRoZSBjdXJyZW50bHkgd3JhcHBlZCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlIElmIHRydWUsIGRlbGV0ZWQgd2l0aG91dCBkZXRhY2hlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG5vdEhpc3RvcnlQdXNoIFdoZW4gdHJ1ZSwgaXQgZG9lcyBub3QgdXBkYXRlIHRoZSBoaXN0b3J5IHN0YWNrIGFuZCB0aGUgc2VsZWN0aW9uIG9iamVjdCBhbmQgcmV0dXJuIEVkZ2VOb2RlcyAodXRpbC5nZXRFZGdlQ2hpbGROb2RlcylcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRldGFjaFJhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKHJhbmdlRWxlbWVudCwgc2VsZWN0ZWRGb3JtYXRzLCBuZXdSYW5nZUVsZW1lbnQsIHJlbW92ZSwgbm90SGlzdG9yeVB1c2gpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVvID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gdXRpbC5nZXRMaXN0Q2hpbGROb2RlcyhyYW5nZUVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LnBhcmVudE5vZGUgPT09IHJhbmdlRWxlbWVudDsgfSk7XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSByYW5nZUVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgbGV0IGZpcnN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBsYXN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCByYW5nZUVsID0gcmFuZ2VFbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdMaXN0ID0gdXRpbC5pc0xpc3QobmV3UmFuZ2VFbGVtZW50KTtcclxuICAgICAgICAgICAgbGV0IGluc2VydGVkTmV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCByZXNldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgbW92ZUNvbXBsZXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBhcHBlbmROb2RlIChwYXJlbnQsIGluc05vZGUsIHNpYmxpbmcsIG9yaWdpbk5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShpbnNOb2RlKSkgaW5zTm9kZS5pbm5lckhUTUwgPSB1dGlsLnplcm9XaWR0aFNwYWNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnNOb2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShpbnNOb2RlLCBzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zQ2hpbGRyZW4gPSAobW92ZUNvbXBsZXRlID8gaW5zTm9kZSA6IG9yaWdpbk5vZGUpLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gaW5zTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBjID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaW5zQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjID0gaW5zQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuX25vdFRleHROb2RlKGMpICYmICF1dGlsLmlzQnJlYWsoYykgJiYgIXV0aWwuaXNMaXN0Q2VsbChmb3JtYXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSBmaXJzdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZm9ybWF0LCBzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IGluc05vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGMsIHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSBmaXJzdCA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwocGFyZW50KSAmJiB1dGlsLmlzTGlzdENlbGwoZm9ybWF0KSAmJiB1dGlsLmlzTGlzdChzaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBzaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoc2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZChzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nID0gc2libGluZy5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmb3JtYXQsIHBhcmVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luTmV4dCA9IG9yaWdpbk5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWNoUmFuZ2UgPSB1dGlsLmRldGFjaE5lc3RlZExpc3Qob3JpZ2luTm9kZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyYW5nZUVsZW1lbnQgIT09IGRldGFjaFJhbmdlKSB8fCAob3JpZ2luTmV4dCAhPT0gb3JpZ2luTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZkNoaWxkcmVuID0gZm9ybWF0LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Ob2RlLmFwcGVuZENoaWxkKGZDaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsZW1lbnQgPSBkZXRhY2hSYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgc2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSBmaXJzdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3Q7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGRldGFjaCBsb29wXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGgsIGluc05vZGUsIGxpbmVJbmRleCwgbmV4dDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbnNOb2RlID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zTm9kZS5ub2RlVHlwZSA9PT0gMyAmJiB1dGlsLmlzTGlzdChyYW5nZUVsKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG1vdmVDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZSAmJiBpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZEZvcm1hdHMgfHwgc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCA9PT0gbGVuIHx8IHNlbGVjdGVkRm9ybWF0c1swXSA9PT0gaW5zTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5vZGUgPSByYW5nZUVsZW1lbnQucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Tm9kZSA9IHJhbmdlRWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMpIGxpbmVJbmRleCA9IHNlbGVjdGVkRm9ybWF0cy5pbmRleE9mKGluc05vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cyAmJiBsaW5lSW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZUVsKSByYW5nZUVsID0gcmFuZ2VFbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5hcHBlbmRDaGlsZChpbnNOb2RlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRm9ybWF0cykgbmV4dCA9IHNlbGVjdGVkRm9ybWF0c1tsaW5lSW5kZXggKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VFbCAmJiByYW5nZUVsLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShyYW5nZUVsLCByYW5nZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3TGlzdCAmJiB1dGlsLmlzTGlzdENlbGwoaW5zTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgdXRpbC5nZXRFbGVtZW50RGVwdGgoaW5zTm9kZSkgIT09IHV0aWwuZ2V0RWxlbWVudERlcHRoKG5leHQpICYmICh1dGlsLmlzTGlzdENlbGwocGFyZW50KSB8fCB1dGlsLmdldEFycmF5SXRlbShpbnNOb2RlLmNoaWxkcmVuLCB1dGlsLmlzTGlzdCwgZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zTmV4dCA9IGluc05vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWNoUmFuZ2UgPSB1dGlsLmRldGFjaE5lc3RlZExpc3QoaW5zTm9kZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyYW5nZUVsZW1lbnQgIT09IGRldGFjaFJhbmdlKSB8fCBpbnNOZXh0ICE9PSBpbnNOb2RlLm5leHRFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IGRldGFjaFJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyID0gaW5zTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc05vZGUgPSB1dGlsLmNyZWF0ZUVsZW1lbnQocmVtb3ZlID8gaW5uZXIubm9kZU5hbWUgOiAodXRpbC5pc0xpc3QocmFuZ2VFbGVtZW50LnBhcmVudE5vZGUpIHx8IHV0aWwuaXNMaXN0Q2VsbChyYW5nZUVsZW1lbnQucGFyZW50Tm9kZSkpID8gJ0xJJyA6IHV0aWwuaXNDZWxsKHJhbmdlRWxlbWVudC5wYXJlbnROb2RlKSA/ICdESVYnIDogb3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2VsbCA9IHV0aWwuaXNMaXN0Q2VsbChpbnNOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQ2hpbGRyZW4gPSBpbm5lci5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlubmVyQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3QoaW5uZXJDaGlsZHJlblswXSkgJiYgIWlzQ2VsbCkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zTm9kZS5hcHBlbmRDaGlsZChpbm5lckNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29weUZvcm1hdEF0dHJpYnV0ZXMoaW5zTm9kZSwgaW5uZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc05vZGUgPSBpbnNOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UmFuZ2VFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnNlcnRlZE5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld1JhbmdlRWxlbWVudCwgcmFuZ2VFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNOb2RlID0gYXBwZW5kTm9kZShuZXdSYW5nZUVsZW1lbnQsIGluc05vZGUsIG51bGwsIGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zTm9kZSA9IGFwcGVuZE5vZGUocGFyZW50LCBpbnNOb2RlLCByYW5nZUVsZW1lbnQsIGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBpbnNOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gaW5zTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpcnN0Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5vZGUgPSBsYXN0Tm9kZSA9IGluc05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXJyYXkucHVzaChpbnNOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQgPSBtb3ZlQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gdXRpbC5nZXRMaXN0Q2hpbGROb2RlcyhyYW5nZUVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LnBhcmVudE5vZGUgPT09IHJhbmdlRWxlbWVudDsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsID0gcmFuZ2VFbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSByYW5nZUVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZVBhcmVudCA9IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VSaWdodCA9IHJhbmdlRWxlbWVudC5uZXh0U2libGluZztcclxuICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgcmFuZ2VFbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZVBhcmVudC5pbnNlcnRCZWZvcmUocmFuZ2VFbCwgcmFuZ2VSaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChuZXdSYW5nZUVsZW1lbnQpIGZpcnN0Tm9kZSA9IG5ld1JhbmdlRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdE5vZGUpIGZpcnN0Tm9kZSA9IHJhbmdlRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgIHJhbmdlUmlnaHQgPSByYW5nZUVsZW1lbnQubmV4dFNpYmxpbmc7XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2VFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCByYW5nZUVsZW1lbnQudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmFuZ2VFbGVtZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlRW1wdHlOb2RlKHJhbmdlRWxlbWVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlZGdlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgZWRnZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjYzogcmFuZ2VQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgc2M6IGZpcnN0Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBlYzogcmFuZ2VSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVBcnJheTogcmVtb3ZlQXJyYXlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Tm9kZSkgZmlyc3ROb2RlID0gbGFzdE5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3ROb2RlKSBsYXN0Tm9kZSA9IGZpcnN0Tm9kZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRWRnZSA9IHV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMoZmlyc3ROb2RlLCAobGFzdE5vZGUucGFyZW50Tm9kZSA/IGZpcnN0Tm9kZSA6IGxhc3ROb2RlKSk7XHJcbiAgICAgICAgICAgICAgICBlZGdlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNjOiAoY2hpbGRFZGdlLnNjIHx8IGNoaWxkRWRnZS5lYykucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBzYzogY2hpbGRFZGdlLnNjLFxyXG4gICAgICAgICAgICAgICAgICAgIGVjOiBjaGlsZEVkZ2UuZWNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChub3RIaXN0b3J5UHVzaCkgcmV0dXJuIGVkZ2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIXJlbW92ZSAmJiBlZGdlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkRm9ybWF0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZWRnZS5zYywgMCwgZWRnZS5zYywgMCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZWRnZS5zYywgc28sIGVkZ2UuZWMsIGVvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFwic2VsZWN0ZWRGb3JtYXRzXCIgYXJyYXkgYXJlIGRldGFjaGVkIGZyb20gdGhlIGxpc3QgZWxlbWVudC5cclxuICAgICAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFwcGxpZWQgd2hlbiB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMgb2YgXCJzZWxlY3RlZEZvcm1hdHNcIiBhcmUgXCJMSVwiIHJlc3BlY3RpdmVseS5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZEZvcm1hdHMgQXJyYXkgb2YgZm9ybWF0IGVsZW1lbnRzIChMSSwgUC4uLikgdG8gcmVtb3ZlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlIElmIHRydWUsIGRlbGV0ZWQgd2l0aG91dCBkZXRhY2hlZC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7c2M6IDxMST4sIGVjOiA8TEk+fS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXRhY2hMaXN0OiBmdW5jdGlvbiAoc2VsZWN0ZWRGb3JtYXRzLCByZW1vdmUpIHtcclxuICAgICAgICAgICAgbGV0IHJhbmdlQXJyID0ge307XHJcbiAgICAgICAgICAgIGxldCBsaXN0Rmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGxpc3RMYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBmaXJzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBsYXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgcGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiAhdGhpcy5pc0NvbXBvbmVudChjdXJyZW50KTsgfS5iaW5kKHV0aWwpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGgsIHIsIG8sIGxhc3RJbmRleCwgaXNMaXN0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGkgPT09IGxlbiAtIDE7XHJcbiAgICAgICAgICAgICAgICBvID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCBwYXNzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIGlzTGlzdCA9IHV0aWwuaXNMaXN0KG8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyICYmIGlzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHIgPSBvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyID0ge3I6IHIsIGY6IFt1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKV19O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSBsaXN0Rmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyICYmIGlzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyICE9PSBvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUFyci5mWzBdLnBhcmVudE5vZGUsIHJhbmdlQXJyLmYsIG51bGwsIHJlbW92ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBzZWxlY3RlZEZvcm1hdHNbaV0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBlZGdlLnNjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCkgbGFzdCA9IGVkZ2UuZWM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyID0ge3I6IHIsIGY6IFt1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKV19O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCkgbGlzdExhc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUFyci5mLnB1c2godXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1tpXSwgJ0xJJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4KSBsaXN0TGFzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsYXN0SW5kZXggJiYgdXRpbC5pc0xpc3QocikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGdlID0gdGhpcy5kZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VBcnIuZlswXS5wYXJlbnROb2RlLCByYW5nZUFyci5mLCBudWxsLCByZW1vdmUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0TGFzdCB8fCBsZW4gPT09IDEpIGxhc3QgPSBlZGdlLmVjO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Rmlyc3QpIGZpcnN0ID0gZWRnZS5zYyB8fCBsYXN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc2M6IGZpcnN0LFxyXG4gICAgICAgICAgICAgICAgZWM6IGxhc3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkLCB1cGRhdGUsIGFuZCBkZWxldGUgbm9kZXMgZnJvbSBzZWxlY3RlZCB0ZXh0LlxyXG4gICAgICAgICAqIDEuIElmIHRoZXJlIGlzIGEgbm9kZSBpbiB0aGUgXCJhcHBlbmROb2RlXCIgYXJndW1lbnQsIGEgbm9kZSB3aXRoIHRoZSBzYW1lIHRhZ3MgYW5kIGF0dHJpYnV0ZXMgYXMgXCJhcHBlbmROb2RlXCIgaXMgYWRkZWQgdG8gdGhlIHNlbGVjdGlvbiB0ZXh0LlxyXG4gICAgICAgICAqIDIuIElmIGl0IGlzIGluIHRoZSBzYW1lIHRhZywgb25seSB0aGUgdGFnJ3MgYXR0cmlidXRlcyBhcmUgY2hhbmdlZCB3aXRob3V0IGFkZGluZyBhIHRhZy5cclxuICAgICAgICAgKiAzLiBJZiB0aGUgXCJhcHBlbmROb2RlXCIgYXJndW1lbnQgaXMgbnVsbCwgdGhlIG5vZGUgb2YgdGhlIHNlbGVjdGlvbiBpcyB1cGRhdGUgb3IgcmVtb3ZlIHdpdGhvdXQgYWRkaW5nIGEgbmV3IG5vZGUuXHJcbiAgICAgICAgICogNC4gVGhlIHNhbWUgc3R5bGUgYXMgdGhlIHN0eWxlIGF0dHJpYnV0ZSBvZiB0aGUgXCJzdHlsZUFycmF5XCIgYXJndW1lbnQgaXMgZGVsZXRlZC5cclxuICAgICAgICAgKiAgICAoU3R5bGVzIHNob3VsZCBiZSBwdXQgd2l0aCBhdHRyaWJ1dGUgbmFtZXMgZnJvbSBjc3MuIFtcImJhY2tncm91bmQtY29sb3JcIl0pXHJcbiAgICAgICAgICogNS4gVGhlIHNhbWUgY2xhc3MgbmFtZSBhcyB0aGUgY2xhc3MgYXR0cmlidXRlIG9mIHRoZSBcInN0eWxlQXJyYXlcIiBhcmd1bWVudCBpcyBkZWxldGVkLlxyXG4gICAgICAgICAqICAgIChUaGUgY2xhc3MgbmFtZSBpcyBwcmVjZWRlZCBieSBcIi5cIiBbXCIuY2xhc3NOYW1lXCJdKVxyXG4gICAgICAgICAqIDYuIFVzZSBhIGxpc3Qgb2Ygc3R5bGVzIGFuZCBjbGFzc2VzIG9mIFwiYXBwZW5kTm9kZVwiIGluIFwic3R5bGVBcnJheVwiIHRvIGF2b2lkIGR1cGxpY2F0ZSBwcm9wZXJ0eSB2YWx1ZXMuXHJcbiAgICAgICAgICogNy4gSWYgYSBub2RlIHdpdGggYWxsIHN0eWxlcyBhbmQgY2xhc3NlcyByZW1vdmVkIGhhcyB0aGUgc2FtZSB0YWcgbmFtZSBhcyBcImFwcGVuZE5vZGVcIiBvciBcInJlbW92ZU5vZGVBcnJheVwiLCBvciBcImFwcGVuZE5vZGVcIiBpcyBudWxsLCB0aGF0IG5vZGUgaXMgZGVsZXRlZC5cclxuICAgICAgICAgKiA4LiBSZWdhcmRsZXNzIG9mIHRoZSBzdHlsZSBhbmQgY2xhc3Mgb2YgdGhlIG5vZGUsIHRoZSB0YWcgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBcInJlbW92ZU5vZGVBcnJheVwiIGFyZ3VtZW50IHZhbHVlIGlzIGRlbGV0ZWQuXHJcbiAgICAgICAgICogOS4gSWYgdGhlIFwic3RyaWN0UmVtb3ZlXCIgYXJndW1lbnQgaXMgdHJ1ZSwgb25seSBub2RlcyB3aXRoIGFsbCBzdHlsZXMgYW5kIGNsYXNzZXMgcmVtb3ZlZCBmcm9tIHRoZSBub2RlcyBvZiBcInJlbW92ZU5vZGVBcnJheVwiIGFyZSByZW1vdmVkLlxyXG4gICAgICAgICAqMTAuIEl0IHdvbid0IHdvcmsgaWYgdGhlIHBhcmVudCBub2RlIGhhcyB0aGUgc2FtZSBjbGFzcyBhbmQgc2FtZSB2YWx1ZSBzdHlsZS5cclxuICAgICAgICAgKiAgICBIb3dldmVyLCBpZiB0aGVyZSBpcyBhIHZhbHVlIGluIFwicmVtb3ZlTm9kZUFycmF5XCIsIGl0IHdvcmtzIGFuZCB0aGUgdGV4dCBub2RlIGlzIHNlcGFyYXRlZCBldmVuIGlmIHRoZXJlIGlzIG5vIG5vZGUgdG8gcmVwbGFjZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gYXBwZW5kTm9kZSBUaGUgZWxlbWVudCB0byBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uLiBJZiBpdCBpcyBudWxsLCBvbmx5IGRlbGV0ZSB0aGUgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IHN0eWxlQXJyYXkgVGhlIHN0eWxlIG9yIGNsYXNzTmFtZSBhdHRyaWJ1dGUgbmFtZSBBcnJheSB0byBjaGVjayAoWydmb250LXNpemUnXSwgWycuY2xhc3NOYW1lJ10sIFsnZm9udC1mYW1pbHknLCAnY29sb3InLCAnLmNsYXNzTmFtZSddLi4uXSlcclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IHJlbW92ZU5vZGVBcnJheSBBbiBhcnJheSBvZiBub2RlIG5hbWVzIHRvIHJlbW92ZSB0eXBlcyBmcm9tLCByZW1vdmUgYWxsIGZvcm1hdHMgd2hlbiBcImFwcGVuZE5vZGVcIiBpcyBudWxsIGFuZCB0aGVyZSBpcyBhbiBlbXB0eSBhcnJheSBvciBudWxsIHZhbHVlLiAoWydzcGFuJ10sIFsnc3Ryb25nJywgJ2VtJ10gLi4uXSlcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW58bnVsbH0gc3RyaWN0UmVtb3ZlIElmIHRydWUsIG9ubHkgbm9kZXMgd2l0aCBhbGwgc3R5bGVzIGFuZCBjbGFzc2VzIHJlbW92ZWQgZnJvbSB0aGUgbm9kZXMgb2YgXCJyZW1vdmVOb2RlQXJyYXlcIiBhcmUgcmVtb3ZlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBub2RlQ2hhbmdlOiBmdW5jdGlvbiAoYXBwZW5kTm9kZSwgc3R5bGVBcnJheSwgcmVtb3ZlTm9kZUFycmF5LCBzdHJpY3RSZW1vdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRSYW5nZVRvVGV4dE5vZGUoKTtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHRoaXMuZ2V0UmFuZ2UoKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIHN0eWxlQXJyYXkgPSBzdHlsZUFycmF5ICYmIHN0eWxlQXJyYXkubGVuZ3RoID4gMCA/IHN0eWxlQXJyYXkgOiBmYWxzZTtcclxuICAgICAgICAgICAgcmVtb3ZlTm9kZUFycmF5ID0gcmVtb3ZlTm9kZUFycmF5ICYmIHJlbW92ZU5vZGVBcnJheS5sZW5ndGggPiAwID8gcmVtb3ZlTm9kZUFycmF5IDogZmFsc2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBpc1JlbW92ZU5vZGUgPSAhYXBwZW5kTm9kZTtcclxuICAgICAgICAgICAgY29uc3QgaXNSZW1vdmVGb3JtYXQgPSBpc1JlbW92ZU5vZGUgJiYgIXJlbW92ZU5vZGVBcnJheSAmJiAhc3R5bGVBcnJheTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgZW5kQ29uID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBsZXQgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgaWYgKChpc1JlbW92ZUZvcm1hdCAmJiByYW5nZS5jb2xsYXBzZWQgJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQoc3RhcnRDb24ucGFyZW50Tm9kZSkgJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQoZW5kQ29uLnBhcmVudE5vZGUpKSB8fCAoc3RhcnRDb24gPT09IGVuZENvbiAmJiBzdGFydENvbi5ub2RlVHlwZSA9PT0gMSAmJiB1dGlsLmlzTm9uRWRpdGFibGUoc3RhcnRDb24pKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkICYmICFpc1JlbW92ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29uLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoc3RhcnRDb24pICYmICF1dGlsLmlzQ29tcG9uZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzTm9kZSA9IHN0YXJ0Q29uLmNoaWxkTm9kZXNbc3RhcnRPZmZdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9jdXNOb2RlLm5leHRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5pc0JyZWFrKGZvY3VzTm9kZSkgPyBmb2N1c05vZGUgOiBmb2N1c05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24uaW5zZXJ0QmVmb3JlKHplcm9XaWR0aCwgYWZ0ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHplcm9XaWR0aCwgMSwgemVyb1dpZHRoLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbiA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChzdGFydENvbikpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gc3RhcnRDb24uY2hpbGROb2Rlc1tzdGFydE9mZl0gfHwgc3RhcnRDb24uZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZW5kQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gZW5kQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBlbmRDb24ubGFzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZW5kT2ZmID0gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHdSZWdFeHAgPSBfdy5SZWdFeHA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGVOYW1lID0gYXBwZW5kTm9kZS5ub2RlTmFtZTtcclxuXHJcbiAgICAgICAgICAgIC8qIGNoZWNrZWQgc2FtZSBzdHlsZSBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlRm9ybWF0ICYmIHN0YXJ0Q29uID09PSBlbmRDb24gJiYgIXJlbW92ZU5vZGVBcnJheSAmJiBhcHBlbmROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc05vZGUgPSBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgIGxldCBjaGVja0NudCA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0F0dHJzID0gW107XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrU3R5bGVzID0gYXBwZW5kTm9kZS5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGVja1N0eWxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQXR0cnMucHVzaChjaGVja1N0eWxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2tlY2tDbGFzc2VzID0gYXBwZW5kTm9kZS5jbGFzc0xpc3Q7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2tlY2tDbGFzc2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRycy5wdXNoKCcuJyArIGNrZWNrQ2xhc3Nlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrQXR0cnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKCF1dGlsLmlzRm9ybWF0RWxlbWVudChzTm9kZSkgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KHNOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoZWNrQXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzTm9kZS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBjaGVja0F0dHJzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzUmVnID0gL15cXC4vLnRlc3QocykgPyBuZXcgd1JlZ0V4cCgnXFxcXHMqJyArIHMucmVwbGFjZSgvXlxcLi8sICcnKSArICcoXFxcXHMrfCQpJywgJ2lnJykgOiBmYWxzZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlQ2hlY2sgPSBpc1JlbW92ZU5vZGUgPyAhIXNOb2RlLnN0eWxlW3NdIDogKCEhc05vZGUuc3R5bGVbc10gJiYgISFhcHBlbmROb2RlLnN0eWxlW3NdICYmIHNOb2RlLnN0eWxlW3NdID09PSBhcHBlbmROb2RlLnN0eWxlW3NdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGFzc0NoZWNrID0gY2xhc3NSZWcgPT09IGZhbHNlID8gZmFsc2UgOiBpc1JlbW92ZU5vZGUgPyAhIXNOb2RlLmNsYXNzTmFtZS5tYXRjaChjbGFzc1JlZykgOiAhIXNOb2RlLmNsYXNzTmFtZS5tYXRjaChjbGFzc1JlZykgJiYgISFhcHBlbmROb2RlLmNsYXNzTmFtZS5tYXRjaChjbGFzc1JlZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlQ2hlY2sgfHwgY2xhc3NDaGVjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0NudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzTm9kZSA9IHNOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQ250ID49IGNoZWNrQXR0cnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHt9LCBlbmQgPSB7fTtcclxuICAgICAgICAgICAgbGV0IG5ld05vZGUsIHN0eWxlUmVnRXhwID0gJycsIGNsYXNzUmVnRXhwID0gJycsIHJlbW92ZU5vZGVSZWdFeHAgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3R5bGVBcnJheS5sZW5ndGgsIHM7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHMgPSBzdHlsZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc1JlZ0V4cCArPSAoY2xhc3NSZWdFeHAgPyAnfCcgOiAnXFxcXHMqKD86JykgKyBzLnJlcGxhY2UoL15cXC4vLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZWdFeHAgKz0gKHN0eWxlUmVnRXhwID8gJ3wnIDogJyg/Ojt8XnxcXFxccykoPzonKSArIHM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVnRXhwICs9ICcpXFxcXHMqOlteO10qXFxcXHMqKD86O3wkKSc7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVSZWdFeHAgPSBuZXcgd1JlZ0V4cChzdHlsZVJlZ0V4cCwgJ2lnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NSZWdFeHAgKz0gJykoPz1cXFxccyt8JCknO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzUmVnRXhwID0gbmV3IHdSZWdFeHAoY2xhc3NSZWdFeHAsICdpZycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVtb3ZlTm9kZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlUmVnRXhwID0gJ14oPzonICsgcmVtb3ZlTm9kZUFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByZW1vdmVOb2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUmVnRXhwICs9ICd8JyArIHJlbW92ZU5vZGVBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVSZWdFeHAgKz0gJykkJztcclxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVSZWdFeHAgPSBuZXcgd1JlZ0V4cChyZW1vdmVOb2RlUmVnRXhwLCAnaScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogdmFsaWRhdGlvbiBjaGVjayBmdW5jdGlvbiovXHJcbiAgICAgICAgICAgIGNvbnN0IHdCb29sZWFuID0gX3cuQm9vbGVhbjtcclxuICAgICAgICAgICAgY29uc3QgX3JlbW92ZUNoZWNrID0ge3Y6IGZhbHNlfTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChjaGVja05vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZOb2RlID0gY2hlY2tOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWxsIHBhdGhcclxuICAgICAgICAgICAgICAgIGlmICh2Tm9kZS5ub2RlVHlwZSA9PT0gMyB8fCB1dGlsLmlzQnJlYWsodk5vZGUpKSByZXR1cm4gdk5vZGU7XHJcbiAgICAgICAgICAgICAgICAvLyBhbGwgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdmVGb3JtYXQpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub2RlIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdSZW1vdmUgPSAoIXJlbW92ZU5vZGVSZWdFeHAgJiYgaXNSZW1vdmVOb2RlKSB8fCAocmVtb3ZlTm9kZVJlZ0V4cCAmJiByZW1vdmVOb2RlUmVnRXhwLnRlc3Qodk5vZGUubm9kZU5hbWUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0YWcgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICBpZiAodGFnUmVtb3ZlICYmICFzdHJpY3RSZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3R5bGUgcmVnZXhwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5TdHlsZSA9IHZOb2RlLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3R5bGUgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlZ0V4cCAmJiBvcmlnaW5TdHlsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBvcmlnaW5TdHlsZS5yZXBsYWNlKHN0eWxlUmVnRXhwLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPT0gb3JpZ2luU3R5bGUpIF9yZW1vdmVDaGVjay52ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjbGFzcyBjaGVja1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luQ2xhc3NlcyA9IHZOb2RlLmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgICAgIGxldCBjbGFzc2VzID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3NSZWdFeHAgJiYgb3JpZ2luQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyA9IG9yaWdpbkNsYXNzZXMucmVwbGFjZShjbGFzc1JlZ0V4cCwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NlcyAhPT0gb3JpZ2luQ2xhc3NlcykgX3JlbW92ZUNoZWNrLnYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvbmx5XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjbGFzc1JlZ0V4cCB8fCAhb3JpZ2luQ2xhc3NlcykgJiYgKHN0eWxlUmVnRXhwIHx8ICFvcmlnaW5TdHlsZSkgJiYgIXN0eWxlICYmICFjbGFzc2VzICYmIHRhZ1JlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VcclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZSB8fCBjbGFzc2VzIHx8IHZOb2RlLm5vZGVOYW1lICE9PSBuZXdOb2RlTmFtZSB8fCAod0Jvb2xlYW4oc3R5bGVSZWdFeHApICE9PSB3Qm9vbGVhbihvcmlnaW5TdHlsZSkpIHx8ICh3Qm9vbGVhbihjbGFzc1JlZ0V4cCkgIT09IHdCb29sZWFuKG9yaWdpbkNsYXNzZXMpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlZ0V4cCAmJiBvcmlnaW5TdHlsZS5sZW5ndGggPiAwKSB2Tm9kZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2Tm9kZS5zdHlsZS5jc3NUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc1JlZ0V4cCAmJiBvcmlnaW5DbGFzc2VzLmxlbmd0aCA+IDApIHZOb2RlLmNsYXNzTmFtZSA9IGNsYXNzZXMudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdk5vZGUuY2xhc3NOYW1lLnRyaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZOb2RlLnN0eWxlLmNzc1RleHQgJiYgIXZOb2RlLmNsYXNzTmFtZSAmJiAodk5vZGUubm9kZU5hbWUgPT09IG5ld05vZGVOYW1lIHx8IHRhZ1JlbW92ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3JlbW92ZUNoZWNrLnYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2Tm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBsaW5lIG5vZGVzXHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOb2RlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cyhudWxsKTtcclxuICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGVuZENvbiA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmdldEZvcm1hdEVsZW1lbnQoc3RhcnRDb24sIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydENvbiA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVOb2Rlc1swXSwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmdldEZvcm1hdEVsZW1lbnQoZW5kQ29uLCBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZU5vZGVzW2xpbmVOb2Rlcy5sZW5ndGggLSAxXSwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGVuZE9mZiA9IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBvbmVMaW5lID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHN0YXJ0Q29uLCBudWxsKSA9PT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KGVuZENvbiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGxpbmVOb2Rlcy5sZW5ndGggLSAob25lTGluZSA/IDAgOiAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vZGUgQ2hhbmdlc1xyXG4gICAgICAgICAgICBuZXdOb2RlID0gYXBwZW5kTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaXNSZW1vdmVBbmNob3IgPSBpc1JlbW92ZUZvcm1hdCB8fCAoaXNSZW1vdmVOb2RlICYmIChmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgbiA8IGxlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuX2lzTWFpbnRhaW5lZE5vZGUoYXJyW25dKSB8fCB1dGlsLl9pc1NpemVOb2RlKGFycltuXSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KShyZW1vdmVOb2RlQXJyYXkpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGlzU2l6ZU5vZGUgPSBpc1JlbW92ZU5vZGUgfHwgdXRpbC5faXNTaXplTm9kZShuZXdOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgX2dldE1haW50YWluZWROb2RlID0gdGhpcy5fdXRpbF9nZXRNYWludGFpbmVkTm9kZS5iaW5kKHV0aWwsIGlzUmVtb3ZlQW5jaG9yLCBpc1NpemVOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgX2lzTWFpbnRhaW5lZE5vZGUgPSB0aGlzLl91dGlsX2lzTWFpbnRhaW5lZE5vZGUuYmluZCh1dGlsLCBpc1JlbW92ZUFuY2hvciwgaXNTaXplTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBvbmUgbGluZVxyXG4gICAgICAgICAgICBpZiAob25lTGluZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSB0aGlzLl9ub2RlQ2hhbmdlX29uZUxpbmUobGluZU5vZGVzWzBdLCBuZXdOb2RlLCB2YWxpZGF0aW9uLCBzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCByYW5nZS5jb2xsYXBzZWQsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydC5jb250YWluZXIgPSBuZXdSYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIHN0YXJ0Lm9mZnNldCA9IG5ld1JhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgZW5kLmNvbnRhaW5lciA9IG5ld1JhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIGVuZC5vZmZzZXQgPSBuZXdSYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQuY29udGFpbmVyID09PSBlbmQuY29udGFpbmVyICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKHN0YXJ0LmNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydC5vZmZzZXQgPSBlbmQub2Zmc2V0ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldENvbW1vbkxpc3RTdHlsZShuZXdSYW5nZS5hbmNlc3RvciwgbnVsbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIG11bHRpIGxpbmUgXHJcbiAgICAgICAgICAgICAgICAvLyBlbmRcclxuICAgICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGFwcGVuZE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLl9ub2RlQ2hhbmdlX2VuZExpbmUobGluZU5vZGVzW2VuZExlbmd0aF0sIG5ld05vZGUsIHZhbGlkYXRpb24sIGVuZENvbiwgZW5kT2ZmLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBfcmVtb3ZlQ2hlY2ssIF9nZXRNYWludGFpbmVkTm9kZSwgX2lzTWFpbnRhaW5lZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG1pZFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGVuZExlbmd0aCAtIDEsIG5ld1JhbmdlOyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGFwcGVuZE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX25vZGVDaGFuZ2VfbWlkZGxlTGluZShsaW5lTm9kZXNbaV0sIG5ld05vZGUsIHZhbGlkYXRpb24sIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIF9yZW1vdmVDaGVjaywgZW5kLmNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1JhbmdlLmVuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQuYW5jZXN0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQuY29udGFpbmVyID0gbmV3UmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb21tb25MaXN0U3R5bGUobmV3UmFuZ2UuYW5jZXN0b3IsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICBuZXdOb2RlID0gYXBwZW5kTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9ub2RlQ2hhbmdlX3N0YXJ0TGluZShsaW5lTm9kZXNbMF0sIG5ld05vZGUsIHZhbGlkYXRpb24sIHN0YXJ0Q29uLCBzdGFydE9mZiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlLCBlbmQuY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kLmFuY2VzdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlbmQuY29udGFpbmVyID0gc3RhcnQuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZW5kLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZC5hbmNlc3RvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kLmNvbnRhaW5lciA9IHN0YXJ0LmNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICBlbmQub2Zmc2V0ID0gc3RhcnQuY29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb21tb25MaXN0U3R5bGUoc3RhcnQuYW5jZXN0b3IsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tbW9uTGlzdFN0eWxlKGVuZC5hbmNlc3RvciB8fCB1dGlsLmdldEZvcm1hdEVsZW1lbnQoZW5kLmNvbnRhaW5lciksIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgcmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiBjZXJ0YWluIHN0eWxlcyBhcmUgYXBwbGllZCB0byBhbGwgY2hpbGQgbm9kZXMgb2YgdGhlIGxpc3QgY2VsbCwgdGhlIHN0eWxlIG9mIHRoZSBsaXN0IGNlbGwgaXMgYWxzbyBjaGFuZ2VkLiAoYm9sZCwgY29sb3IsIHNpemUpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbCBMaXN0IGNlbGwgZWxlbWVudC4gPGxpPlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBjaGlsZCBWYXJpYWJsZSBmb3IgcmVjdXJzaXZlIGNhbGwuIChcIm51bGxcIiBvbiB0aGUgZmlyc3QgY2FsbClcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRDb21tb25MaXN0U3R5bGU6IGZ1bmN0aW9uIChlbCwgY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzTGlzdENlbGwoZWwpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghY2hpbGQpIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdXRpbC5nZXRBcnJheUl0ZW0oKGNoaWxkIHx8IGVsKS5jaGlsZE5vZGVzLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gIXV0aWwuaXNCcmVhayhjdXJyZW50KSAmJiAhdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY3VycmVudC50ZXh0Q29udGVudC50cmltKCkpOyB9LCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuWzBdICYmIGNoaWxkcmVuLmxlbmd0aCA9PT0gMSl7XHJcbiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZCB8fCBjaGlsZC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkU3R5bGUgPSBjaGlsZC5zdHlsZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsU3R5bGUgPSBlbC5zdHlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBib2xkXHJcbiAgICAgICAgICAgICAgICBpZiAoL1NUUk9ORy9pLnRlc3QoY2hpbGQubm9kZU5hbWUpKSBlbFN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7IC8vIGJvbGRcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkU3R5bGUuZm9udFdlaWdodCkgZWxTdHlsZS5mb250V2VpZ2h0ID0gY2hpbGRTdHlsZS5mb250V2VpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN0eWxlc1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUuY29sb3IpIGVsU3R5bGUuY29sb3IgPSBjaGlsZFN0eWxlLmNvbG9yOyAvLyBjb2xvclxyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUuZm9udFNpemUpIGVsU3R5bGUuZm9udFNpemUgPSBjaGlsZFN0eWxlLmZvbnRTaXplOyAvLyBzaXplXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tbW9uTGlzdFN0eWxlKGVsLCBjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU3RyaXAgcmVtb3ZlIG5vZGVcclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IHJlbW92ZU5vZGUgVGhlIHJlbW92ZSBub2RlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc3RyaXBSZW1vdmVOb2RlOiBmdW5jdGlvbiAocmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVtb3ZlTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBpZiAoIXJlbW92ZU5vZGUgfHwgcmVtb3ZlTm9kZS5ub2RlVHlwZSA9PT0gMyB8fCAhZWxlbWVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByZW1vdmVOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoY2hpbGRyZW5bMF0sIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKHJlbW92ZU5vZGUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm4gdGhlIHBhcmVudCBtYWludGFpbmVkIHRhZy4gKGJpbmQgYW5kIHVzZSBhIHV0aWwgb2JqZWN0KVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50XHJcbiAgICAgICAgICogQHJldHVybnMge0VsZW1lbnR9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfdXRpbF9nZXRNYWludGFpbmVkTm9kZTogZnVuY3Rpb24gKF9pc1JlbW92ZSwgX2lzU2l6ZU5vZGUsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IF9pc1JlbW92ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy5faXNNYWludGFpbmVkTm9kZS5iaW5kKHRoaXMpKSB8fCAoIV9pc1NpemVOb2RlID8gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuX2lzU2l6ZU5vZGUuYmluZCh0aGlzKSkgOiBudWxsKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhIHRhZyB0aGF0IHNob3VsZCBiZSBwZXJzaXN0ZWQuIChiaW5kIGFuZCB1c2UgYSB1dGlsIG9iamVjdClcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3V0aWxfaXNNYWludGFpbmVkTm9kZTogZnVuY3Rpb24gKF9pc1JlbW92ZSwgX2lzU2l6ZU5vZGUsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IF9pc1JlbW92ZSB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy5faXNNYWludGFpbmVkTm9kZS5iaW5kKHRoaXMpKSA/IGFuY2hvciA6IChhbmNob3IgfHwgKCFfaXNTaXplTm9kZSA/IHRoaXMuX2lzU2l6ZU5vZGUoZWxlbWVudCkgOiBmYWxzZSkpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiB3cmFwcyB0ZXh0IG5vZGVzIG9mIGxpbmUgc2VsZWN0ZWQgdGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIG5vZGUgb2YgdGhlIGxpbmUgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdGV4dCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3SW5uZXJOb2RlIFRoZSBkb20gdGhhdCB3aWxsIHdyYXAgdGhlIHNlbGVjdGVkIHRleHQgYXJlYVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbGlkYXRpb24gQ2hlY2sgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHN0cmlwcGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnRDb24gVGhlIHN0YXJ0Q29udGFpbmVyIHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydE9mZiBUaGUgc3RhcnRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbmRDb24gVGhlIGVuZENvbnRhaW5lciBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZW5kT2ZmIFRoZSBlbmRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZUZvcm1hdCBJcyB0aGUgcmVtb3ZlIGFsbCBmb3JtYXRzIGNvbW1hbmQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZU5vZGUgXCJuZXdJbm5lck5vZGVcIiBpcyByZW1vdmUgbm9kZT9cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNvbGxhcHNlZCByYW5nZS5jb2xsYXBzZWRcclxuICAgICAgICAgKiBAcmV0dXJucyB7e2FuY2VzdG9yOiAqLCBzdGFydENvbnRhaW5lcjogKiwgc3RhcnRPZmZzZXQ6ICosIGVuZENvbnRhaW5lcjogKiwgZW5kT2Zmc2V0OiAqfX1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9ub2RlQ2hhbmdlX29uZUxpbmU6IGZ1bmN0aW9uIChlbGVtZW50LCBuZXdJbm5lck5vZGUsIHZhbGlkYXRpb24sIHN0YXJ0Q29uLCBzdGFydE9mZiwgZW5kQ29uLCBlbmRPZmYsIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIGNvbGxhcHNlZCwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBhZGQgdGFnXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRDb24gPSBzdGFydENvbi5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXBhcmVudENvbi5uZXh0U2libGluZyAmJiAhcGFyZW50Q29uLnByZXZpb3VzU2libGluZyAmJiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQocGFyZW50Q29uLnBhcmVudE5vZGUpICYmICF1dGlsLmlzV3lzaXd5Z0RpdihwYXJlbnRDb24ucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRDb24ubm9kZU5hbWUgPT09IG5ld0lubmVyTm9kZS5ub2RlTmFtZSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRDb24gPSBwYXJlbnRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1JlbW92ZU5vZGUgJiYgcGFyZW50Q29uID09PSBlbmRDb24ucGFyZW50Tm9kZSAmJiBwYXJlbnRDb24ubm9kZU5hbWUgPT09IG5ld0lubmVyTm9kZS5ub2RlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKHN0YXJ0Q29uLnRleHRDb250ZW50LnNsaWNlKDAsIHN0YXJ0T2ZmKSkgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZW5kQ29uLnRleHRDb250ZW50LnNsaWNlKGVuZE9mZikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDb24uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2FtZVRhZyA9IHRydWU7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoLCBjLCBzLCBlLCB6OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6ID0gIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gc3RhcnRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IGVuZENvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFzICYmIHopIHx8IChzICYmIGUgJiYgeikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVUYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNhbWVUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhwYXJlbnRDb24sIG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lcjogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogc3RhcnRPZmYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IGVuZENvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kT2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgdGFnXHJcbiAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsID0gZWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgbk5vZGVBcnJheSA9IFtuZXdJbm5lck5vZGVdO1xyXG4gICAgICAgICAgICBjb25zdCBwTm9kZSA9IGVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgY29uc3QgaXNTYW1lTm9kZSA9IHN0YXJ0Q29uID09PSBlbmRDb247XHJcbiAgICAgICAgICAgIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRPZmZzZXQgPSBzdGFydE9mZjtcclxuICAgICAgICAgICAgbGV0IGVuZENvbnRhaW5lciA9IGVuZENvbjtcclxuICAgICAgICAgICAgbGV0IGVuZE9mZnNldCA9IGVuZE9mZjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0UGFzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgZW5kUGFzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcEN1cnJlbnQsIG5ld05vZGUsIGFwcGVuZE5vZGUsIGNzc1RleHQsIGFuY2hvck5vZGU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB3UmVnRXhwID0gX3cuUmVnRXhwO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjaGVja0NzcyAodk5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyB3UmVnRXhwKCcoPzo7fF58XFxcXHMpKD86JyArIGNzc1RleHQgKyAnbnVsbClcXFxccyo6W147XSpcXFxccyooPzo7fCQpJywgJ2lnJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3R5bGUgPSAnJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVnRXhwICYmIHZOb2RlLnN0eWxlLmNzc1RleHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlID0gcmVnRXhwLnRlc3Qodk5vZGUuc3R5bGUuY3NzVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdHlsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMoY3VycmVudCwgYW5jZXN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjdXJyZW50LmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoLCB2Tm9kZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY292ZXJOb2RlID0gYW5jZXN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb25lTm9kZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnRDb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0UGFzcyAmJiBjaGlsZCA9PT0gc3RhcnRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBwTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogc3RhcnRDb250YWluZXIuc3Vic3RyaW5nRGF0YSgwLCBzdGFydE9mZnNldCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IHN0YXJ0Q29udGFpbmVyLnN1YnN0cmluZ0RhdGEoc3RhcnRPZmZzZXQsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2FtZU5vZGUgPyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0ID8gZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQgOiBzdGFydENvbnRhaW5lci5kYXRhLmxlbmd0aCAtIHN0YXJ0T2Zmc2V0KSA6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyLmRhdGEubGVuZ3RoIC0gc3RhcnRPZmZzZXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYS5wYXJlbnROb2RlICE9PSBsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG0gPSBhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobS5wYXJlbnROb2RlICE9PSBsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gcCA9IG0ucGFyZW50Tm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShtLmNoaWxkTm9kZXNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQobS5jaGlsZE5vZGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmFwcGVuZENoaWxkKHApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gbS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gYW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKHByZXZOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQocHJldk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2QW5jaG9yTm9kZSA9IF9nZXRNYWludGFpbmVkTm9kZShhbmNlc3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXByZXZBbmNob3JOb2RlKSBhbmNob3JOb2RlID0gcHJldkFuY2hvck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSBsaW5lID0gYW5jaG9yTm9kZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZSAhPT0gbGluZSAmJiBuZXdOb2RlICE9PSBlbCAmJiBuZXdOb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IF9pc01haW50YWluZWROb2RlKG5ld05vZGUpID8gbnVsbCA6IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUgJiYgbmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBjaGVja0NzcyhuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgKz0gbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LnN1YnN0cigwLCBuZXdOb2RlLnN0eWxlLmNzc1RleHQuaW5kZXhPZignOicpKSArICd8JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlICYmICFfZ2V0TWFpbnRhaW5lZE5vZGUoZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQYXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlICE9PSB0ZXh0Tm9kZSkgbmV3Tm9kZS5hcHBlbmRDaGlsZChzdGFydENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTYW1lTm9kZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBlbmRDb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZFBhc3MgJiYgY2hpbGQgPT09IGVuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShlbmRDb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IGVuZENvbnRhaW5lci5zdWJzdHJpbmdEYXRhKGVuZE9mZnNldCwgKGVuZENvbnRhaW5lci5sZW5ndGggLSBlbmRPZmZzZXQpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShpc1NhbWVOb2RlIHx8IGVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogZW5kQ29udGFpbmVyLnN1YnN0cmluZ0RhdGEoMCwgZW5kT2Zmc2V0KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdJbm5lck5vZGUucGFyZW50Tm9kZSkgJiYgIWFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGFmdGVyTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZSAhPT0gcE5vZGUgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmIGNoZWNrQ3NzKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSkgYW5jaG9ycy5wdXNoKG5ld05vZGUuY2xvbmVOb2RlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcEN1cnJlbnQucHVzaChuZXdOb2RlLmNsb25lTm9kZShmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ICs9IG5ld05vZGUuc3R5bGUuY3NzVGV4dC5zdWJzdHIoMCwgbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LmluZGV4T2YoJzonKSkgKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IHBDdXJyZW50LmNvbmNhdChhbmNob3JzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZU5vZGUgPSBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGFmdGVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUudGV4dENvbnRlbnQgPSBhZnRlck5vZGUuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUgJiYgY2xvbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlckFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoY2xvbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gYWZ0ZXJBbmNob3JOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld05vZGUgIT09IHBOb2RlICYmIG5ld05vZGUgIT09IGVsICYmIG5ld05vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkgPyBudWxsIDogdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Tm9kZSAmJiBuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmIGNoZWNrQ3NzKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCArPSBuZXdOb2RlLnN0eWxlLmNzc1RleHQuc3Vic3RyKDAsIG5ld05vZGUuc3R5bGUuY3NzVGV4dC5pbmRleE9mKCc6JykpICsgJ3wnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgYW5jaG9yTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBhc3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlbW92ZUZvcm1hdCAmJiBjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE5vZGUudGV4dENvbnRlbnQgPSB1dGlsLnplcm9XaWR0aFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZSAhPT0gdGV4dE5vZGUpIG5ld05vZGUuYXBwZW5kQ2hpbGQoZW5kQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZSh0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlLnBhcmVudE5vZGUgIT09IG51bGwgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbmV3SW5uZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IGVuZFBhc3MgPyBuZXdOb2RlLmNsb25lTm9kZShmYWxzZSkgOiB2YWxpZGF0aW9uKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkgJiYgdk5vZGUgJiYgY2hlY2tDc3MobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmNob3JOb2RlKSBhbmNob3JzLnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ICs9IG5ld05vZGUuc3R5bGUuY3NzVGV4dC5zdWJzdHIoMCwgbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LmluZGV4T2YoJzonKSkgKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gcEN1cnJlbnQuY29uY2F0KGFuY2hvcnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3SW5uZXJOb2RlLnBhcmVudE5vZGUpICYmICFfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpICYmICF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShuZXdJbm5lck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRQYXNzICYmICFhbmNob3JOb2RlICYmIF9pc01haW50YWluZWROb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYUNoaWxkcmVuID0gY2hpbGROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMCwgYUxlbiA9IGFDaGlsZHJlbi5sZW5ndGg7IGEgPCBhTGVuOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoYUNoaWxkcmVuW2FdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0lubmVyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5kUGFzcykgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFuY2VzdG9yID0gcE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kUGFzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckFuY2hvck5vZGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoYW5jZXN0b3IsIGZ1bmN0aW9uIChjdXJyZW50KSB7cmV0dXJuIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUoY3VycmVudC5wYXJlbnROb2RlKSB8fCBjdXJyZW50LnBhcmVudE5vZGUgPT09IHBOb2RlO30uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZS5hcHBlbmRDaGlsZChhbmNlc3RvckFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IGFuY2VzdG9yQW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjbG9uZU5vZGUgPSBjaGlsZC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKGNsb25lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSBjb3Zlck5vZGUgPSBjbG9uZU5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGNvdmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKGVsZW1lbnQsIHBOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCByZW1vdmUgdGFnXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZU5vZGUgJiYgIWlzUmVtb3ZlRm9ybWF0ICYmICFfcmVtb3ZlQ2hlY2sudikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lcjogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2ZmLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogZW5kQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kT2ZmXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpc1JlbW92ZUZvcm1hdCA9IGlzUmVtb3ZlRm9ybWF0ICYmIGlzUmVtb3ZlTm9kZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBuTm9kZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0Tm9kZSwgdGV4dE5vZGVfcywgdGV4dE5vZGVfZTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHROb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUucmVwbGFjZUNoaWxkKHRleHROb2RlLCByZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByQ2hpbGRyZW4gPSByZW1vdmVOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHROb2RlX3MgPSByQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHROb2RlX2UgPSByQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUodGV4dE5vZGVfZSwgcmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb250YWluZXIgPSBlbmRDb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gdGV4dE5vZGVfcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lciA9IHRleHROb2RlX2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmlwUmVtb3ZlTm9kZShuTm9kZUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IGVuZENvbnRhaW5lciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocE5vZGUsIG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IGVuZENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGVuZENvbnRhaW5lciByZXNldFxyXG4gICAgICAgICAgICBjb25zdCBlbmRDb25SZXNldCA9IGlzUmVtb3ZlRm9ybWF0IHx8IGVuZENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggPT09IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNCcmVhayhlbmRDb250YWluZXIpICYmIGVuZENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShlbmRDb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgZW5kQ29udGFpbmVyID0gc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gZW5kQ29uUmVzZXQgPyBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoIDogZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgLy8gbm9kZSBjaGFuZ2VcclxuICAgICAgICAgICAgY29uc3QgbmV3U3RhcnRPZmZzZXQgPSB7czogMCwgZTogMH07XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoc3RhcnRDb250YWluZXIsIHBOb2RlLCBuZXdTdGFydE9mZnNldCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtZXJnZUVuZENvbiA9ICFlbmRDb250YWluZXIucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgaWYgKG1lcmdlRW5kQ29uKSBlbmRDb250YWluZXIgPSBzdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgbmV3RW5kT2Zmc2V0ID0ge3M6IDAsIGU6IDB9O1xyXG4gICAgICAgICAgICBjb25zdCBlbmRQYXRoID0gdXRpbC5nZXROb2RlUGF0aChlbmRDb250YWluZXIgLCBwTm9kZSwgKCFtZXJnZUVuZENvbiAmJiAhZW5kQ29uUmVzZXQpID8gbmV3RW5kT2Zmc2V0IDogbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBzdGFydE9mZnNldCArPSBuZXdTdGFydE9mZnNldC5zO1xyXG4gICAgICAgICAgICBlbmRPZmZzZXQgPSAoY29sbGFwc2VkID8gc3RhcnRPZmZzZXQgOiBtZXJnZUVuZENvbiA/IHN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aCA6IGVuZENvblJlc2V0ID8gZW5kT2Zmc2V0ICsgbmV3U3RhcnRPZmZzZXQucyA6IGVuZE9mZnNldCArIG5ld0VuZE9mZnNldC5zKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRhZyBtZXJnZVxyXG4gICAgICAgICAgICBjb25zdCBuZXdPZmZzZXRzID0gdXRpbC5tZXJnZVNhbWVUYWdzKHBOb2RlLCBbc3RhcnRQYXRoLCBlbmRQYXRoXSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHBOb2RlLCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gdXRpbC5nZXROb2RlRnJvbVBhdGgoc3RhcnRQYXRoLCBwTm9kZSk7XHJcbiAgICAgICAgICAgIGVuZENvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGVuZFBhdGgsIHBOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBhbmNlc3RvcjogcE5vZGUsXHJcbiAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lcjogc3RhcnRDb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogc3RhcnRPZmZzZXQgKyBuZXdPZmZzZXRzWzBdLFxyXG4gICAgICAgICAgICAgICAgZW5kQ29udGFpbmVyOiBlbmRDb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZE9mZnNldCArIG5ld09mZnNldHNbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gd3JhcHMgZmlyc3QgbGluZSBzZWxlY3RlZCB0ZXh0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgbm9kZSBvZiB0aGUgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCB0ZXh0IG5vZGUuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBuZXdJbm5lck5vZGUgVGhlIGRvbSB0aGF0IHdpbGwgd3JhcCB0aGUgc2VsZWN0ZWQgdGV4dCBhcmVhXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsaWRhdGlvbiBDaGVjayBpZiB0aGUgbm9kZSBzaG91bGQgYmUgc3RyaXBwZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBzdGFydENvbiBUaGUgc3RhcnRDb250YWluZXIgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0T2ZmIFRoZSBzdGFydE9mZnNldCBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmVtb3ZlRm9ybWF0IElzIHRoZSByZW1vdmUgYWxsIGZvcm1hdHMgY29tbWFuZD9cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmVtb3ZlTm9kZSBcIm5ld0lubmVyTm9kZVwiIGlzIHJlbW92ZSBub2RlP1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtudWxsfE5vZGV9IElmIGVuZCBjb250YWluZXIgaXMgcmVuZXdlZCwgcmV0dXJuZWQgcmVuZXdlZCBub2RlXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0geyBhbmNlc3RvciwgY29udGFpbmVyLCBvZmZzZXQsIGVuZENvbnRhaW5lciB9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9zdGFydExpbmU6IGZ1bmN0aW9uIChlbGVtZW50LCBuZXdJbm5lck5vZGUsIHZhbGlkYXRpb24sIHN0YXJ0Q29uLCBzdGFydE9mZiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlLCBfZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBhZGQgdGFnXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRDb24gPSBzdGFydENvbi5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXBhcmVudENvbi5uZXh0U2libGluZyAmJiAhcGFyZW50Q29uLnByZXZpb3VzU2libGluZyAmJiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQocGFyZW50Q29uLnBhcmVudE5vZGUpICYmICF1dGlsLmlzV3lzaXd5Z0RpdihwYXJlbnRDb24ucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRDb24ubm9kZU5hbWUgPT09IG5ld0lubmVyTm9kZS5ub2RlTmFtZSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRDb24gPSBwYXJlbnRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1JlbW92ZU5vZGUgJiYgcGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbikgJiYgIXBhcmVudENvbi5uZXh0U2libGluZyAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzdGFydENvbi50ZXh0Q29udGVudC5zbGljZSgwLCBzdGFydE9mZikpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2FtZVRhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgcyA9IHN0YXJ0Q29uLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgIHdoaWxlIChzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1lVGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzID0gcy5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNhbWVUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKHBhcmVudENvbiwgbmV3SW5uZXJOb2RlKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHN0YXJ0Q29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHRhZ1xyXG4gICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG5Ob2RlQXJyYXkgPSBbbmV3SW5uZXJOb2RlXTtcclxuICAgICAgICAgICAgY29uc3QgcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGFpbmVyID0gc3RhcnRDb247XHJcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSBzdGFydE9mZjtcclxuICAgICAgICAgICAgbGV0IHBhc3NOb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBwQ3VycmVudCwgbmV3Tm9kZSwgYXBwZW5kTm9kZSwgYW5jaG9yTm9kZTtcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCwgdk5vZGUsIGNsb25lQ2hpbGQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY292ZXJOb2RlID0gYW5jZXN0b3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXNzTm9kZSAmJiAhdXRpbC5pc0JyZWFrKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLl9pc0lnbm9yZU5vZGVDaGFuZ2UoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVDaGlsZCA9IGNoaWxkLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChjbG9uZUNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9lbmRDb250YWluZXIgJiYgY2hpbGQuY29udGFpbnMoX2VuZENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoX2VuZENvbnRhaW5lciwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZW5kQ29udGFpbmVyID0gdXRpbC5nZXROb2RlRnJvbVBhdGgoZW5kUGF0aCwgY2xvbmVDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkLCBjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlLnBhcmVudE5vZGUgIT09IG51bGwgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbmV3SW5uZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiB2Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFuY2hvck5vZGUpIGFuY2hvcnMucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IHBDdXJyZW50LmNvbmNhdChhbmNob3JzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9wTm9kZSA9IHBDdXJyZW50Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc01haW50YWluZWROb2RlKG5ld0lubmVyTm9kZS5wYXJlbnROb2RlKSAmJiAhX2lzTWFpbnRhaW5lZE5vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5jaG9yTm9kZSAmJiBfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFDaGlsZHJlbiA9IGNoaWxkTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDAsIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoOyBhIDwgYUxlbjsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGFDaGlsZHJlblthXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9ICFfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSA/IG5ld05vZGUgOiBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RvcE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlICYmIGNoaWxkLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2dldE1haW50YWluZWROb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQW5jaG9yTm9kZSA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChhbmNlc3RvciwgZnVuY3Rpb24gKGN1cnJlbnQpIHtyZXR1cm4gdGhpcy5faXNNYWludGFpbmVkTm9kZShjdXJyZW50LnBhcmVudE5vZGUpIHx8IGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gcE5vZGU7fS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlLmFwcGVuZENoaWxkKGFuY2VzdG9yQW5jaG9yTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gYW5jZXN0b3JBbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzTm9kZSAmJiBjaGlsZCA9PT0gY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gcE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoY29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBjb250YWluZXIuc3Vic3RyaW5nRGF0YSgwLCBvZmZzZXQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogY29udGFpbmVyLnN1YnN0cmluZ0RhdGEob2Zmc2V0LCAoY29udGFpbmVyLmxlbmd0aCAtIG9mZnNldCkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gX2dldE1haW50YWluZWROb2RlKGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhICYmIGEucGFyZW50Tm9kZSAhPT0gbGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtID0gYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG0ucGFyZW50Tm9kZSAhPT0gbGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IHAgPSBtLnBhcmVudE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobS5jaGlsZE5vZGVzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKG0uY2hpbGROb2Rlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5hcHBlbmRDaGlsZChwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwcmV2Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKHByZXZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwcmV2QW5jaG9yTm9kZSkgYW5jaG9yTm9kZSA9IHByZXZBbmNob3JOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkgbGluZSA9IGFuY2hvck5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gYW5jZXN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlICE9PSBsaW5lICYmIG5ld05vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmIHZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCBhbmNlc3RvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gcEN1cnJlbnQucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUgIT09IGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGNoaWxkKSkgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZShmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc05vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9ICFwYXNzTm9kZSA/IGNoaWxkLmNsb25lTm9kZShmYWxzZSkgOiB2YWxpZGF0aW9uKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQodk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkpIGNvdmVyTm9kZSA9IHZOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY292ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkoZWxlbWVudCwgcE5vZGUpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm90IHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSAmJiAhaXNSZW1vdmVGb3JtYXQgJiYgIV9yZW1vdmVDaGVjay52KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZixcclxuICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IF9lbmRDb250YWluZXJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlzUmVtb3ZlRm9ybWF0ID0gaXNSZW1vdmVGb3JtYXQgJiYgaXNSZW1vdmVOb2RlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Ob2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IG5Ob2RlQXJyYXlbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJDaGlsZHJlbiA9IHJlbW92ZU5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJDaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAockNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShyQ2hpbGRyZW5bMF0sIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmVtb3ZlTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaXBSZW1vdmVOb2RlKG5Ob2RlQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlRm9ybWF0ICYmIHBOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gZWxlbWVudC5jaGlsZE5vZGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlRW1wdHlOb2RlKHBOb2RlLCBuZXdJbm5lck5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwTm9kZS50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBwTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbm9kZSBjaGFuZ2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSB7czogMCwgZTogMH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gdXRpbC5nZXROb2RlUGF0aChjb250YWluZXIsIHBOb2RlLCBvZmZzZXRzKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBvZmZzZXRzLnM7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdGFnIG1lcmdlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPZmZzZXRzID0gdXRpbC5tZXJnZVNhbWVUYWdzKHBOb2RlLCBbcGF0aF0sIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocE5vZGUsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKHBhdGgsIHBOb2RlKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBuZXdPZmZzZXRzWzBdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYW5jZXN0b3I6IHBOb2RlLFxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcclxuICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogX2VuZENvbnRhaW5lclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiB3cmFwcyBtaWQgbGluZXMgc2VsZWN0ZWQgdGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIG5vZGUgb2YgdGhlIGxpbmUgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdGV4dCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3SW5uZXJOb2RlIFRoZSBkb20gdGhhdCB3aWxsIHdyYXAgdGhlIHNlbGVjdGVkIHRleHQgYXJlYVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbGlkYXRpb24gQ2hlY2sgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHN0cmlwcGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVGb3JtYXQgSXMgdGhlIHJlbW92ZSBhbGwgZm9ybWF0cyBjb21tYW5kP1xyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVOb2RlIFwibmV3SW5uZXJOb2RlXCIgaXMgcmVtb3ZlIG5vZGU/XHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBfZW5kQ29udGFpbmVyIE9mZnNldCBub2RlIG9mIGxhc3QgbGluZSBhbHJlYWR5IG1vZGlmaWVkIChlbmQuY29udGFpbmVyKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgYW5jZXN0b3IsIGVuZENvbnRhaW5lcjogXCJJZiBlbmQgY29udGFpbmVyIGlzIHJlbmV3ZWQsIHJldHVybmVkIHJlbmV3ZWQgbm9kZVwiIH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9ub2RlQ2hhbmdlX21pZGRsZUxpbmU6IGZ1bmN0aW9uIChlbGVtZW50LCBuZXdJbm5lck5vZGUsIHZhbGlkYXRpb24sIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIF9yZW1vdmVDaGVjaywgX2VuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAvLyBub3QgYWRkIHRhZ1xyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gZW5kIGNvbnRhaW5lciBwYXRoXHJcbiAgICAgICAgICAgICAgICBsZXQgZW5kUGF0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2VuZENvbnRhaW5lciAmJiBlbGVtZW50LmNvbnRhaW5zKF9lbmRDb250YWluZXIpKSBlbmRQYXRoID0gdXRpbC5nZXROb2RlUGF0aChfZW5kQ29udGFpbmVyLCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wTm9kZSA9IGVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZU5hbWUgPSBuZXdJbm5lck5vZGUubm9kZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDc3NUZXh0ID0gbmV3SW5uZXJOb2RlLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG5ld0lubmVyTm9kZS5jbGFzc05hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gdGVtcE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZU5hbWUgPT09IG5ld05vZGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0eWxlLmNzc1RleHQgKz0gbmV3Q3NzVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjaGlsZCwgbmV3Q2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaXNCcmVhayhjaGlsZCkgJiYgdXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDAgJiYgaSA9PT0gbGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0ZW1wTm9kZS5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3I6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogZW5kUGF0aCA/IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGVuZFBhdGgsIGVsZW1lbnQpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0YWdcclxuICAgICAgICAgICAgX3JlbW92ZUNoZWNrLnYgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5Ob2RlQXJyYXkgPSBbbmV3SW5uZXJOb2RlXTtcclxuICAgICAgICAgICAgbGV0IG5vbmVDaGFuZ2UgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMoY3VycmVudCwgYW5jZXN0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBjdXJyZW50LmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoLCB2Tm9kZSwgY2xvbmVDaGlsZDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY292ZXJOb2RlID0gYW5jZXN0b3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0JyZWFrKGNoaWxkKSAmJiB1dGlsLl9pc0lnbm9yZU5vZGVDaGFuZ2UoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbm5lck5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ2hpbGQgPSBjaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNsb25lQ2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZW5kQ29udGFpbmVyICYmIGNoaWxkLmNvbnRhaW5zKF9lbmRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRQYXRoID0gdXRpbC5nZXROb2RlUGF0aChfZW5kQ29udGFpbmVyLCBjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZW5kQ29udGFpbmVyID0gdXRpbC5nZXROb2RlRnJvbVBhdGgoZW5kUGF0aCwgY2xvbmVDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gdmFsaWRhdGlvbihjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uZUNoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQodk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSBjb3Zlck5vZGUgPSB2Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzQnJlYWsoY2hpbGQpKSByZWN1cnNpb25GdW5jKGNoaWxkLCBjb3Zlck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KShlbGVtZW50LCBuZXdJbm5lck5vZGUpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm90IHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgaWYgKG5vbmVDaGFuZ2UgfHwgKGlzUmVtb3ZlTm9kZSAmJiAhaXNSZW1vdmVGb3JtYXQgJiYgIV9yZW1vdmVDaGVjay52KSkgcmV0dXJuIHsgYW5jZXN0b3I6IGVsZW1lbnQsIGVuZENvbnRhaW5lcjogX2VuZENvbnRhaW5lciB9O1xyXG5cclxuICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZUZvcm1hdCAmJiBpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZW1vdmVOb2RlID0gbk5vZGVBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByQ2hpbGRyZW4gPSByZW1vdmVOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUockNoaWxkcmVuWzBdLCByZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzUmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Ob2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpcFJlbW92ZU5vZGUobk5vZGVBcnJheVtpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlRW1wdHlOb2RlKHBOb2RlLCBuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICB1dGlsLm1lcmdlU2FtZVRhZ3MocE5vZGUsIG51bGwsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm9kZSBjaGFuZ2VcclxuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwTm9kZSwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGFuY2VzdG9yOiBwTm9kZSwgZW5kQ29udGFpbmVyOiBfZW5kQ29udGFpbmVyIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHdyYXBzIGxhc3QgbGluZSBzZWxlY3RlZCB0ZXh0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgbm9kZSBvZiB0aGUgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCB0ZXh0IG5vZGUuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBuZXdJbm5lck5vZGUgVGhlIGRvbSB0aGF0IHdpbGwgd3JhcCB0aGUgc2VsZWN0ZWQgdGV4dCBhcmVhXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsaWRhdGlvbiBDaGVjayBpZiB0aGUgbm9kZSBzaG91bGQgYmUgc3RyaXBwZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbmRDb24gVGhlIGVuZENvbnRhaW5lciBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZW5kT2ZmIFRoZSBlbmRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZUZvcm1hdCBJcyB0aGUgcmVtb3ZlIGFsbCBmb3JtYXRzIGNvbW1hbmQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZU5vZGUgXCJuZXdJbm5lck5vZGVcIiBpcyByZW1vdmUgbm9kZT9cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGFuY2VzdG9yLCBjb250YWluZXIsIG9mZnNldCB9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9lbmRMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBlbmRDb24sIGVuZE9mZiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBhZGQgdGFnXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRDb24gPSBlbmRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgIXBhcmVudENvbi5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbi5wYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uID0gcGFyZW50Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIHBhcmVudENvbi5ub2RlTmFtZSA9PT0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChwYXJlbnRDb24pICYmICFwYXJlbnRDb24ucHJldmlvdXNTaWJsaW5nICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGVuZENvbi50ZXh0Q29udGVudC5zbGljZShlbmRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNhbWVUYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGUgPSBlbmRDb24ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVRhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNhbWVUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKHBhcmVudENvbiwgbmV3SW5uZXJOb2RlKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IGVuZENvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBlbmRPZmZcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgdGFnXHJcbiAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsID0gZWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgbk5vZGVBcnJheSA9IFtuZXdJbm5lck5vZGVdO1xyXG4gICAgICAgICAgICBjb25zdCBwTm9kZSA9IGVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBlbmRDb247XHJcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSBlbmRPZmY7XHJcbiAgICAgICAgICAgIGxldCBwYXNzTm9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcEN1cnJlbnQsIG5ld05vZGUsIGFwcGVuZE5vZGUsIGFuY2hvck5vZGU7XHJcblxyXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVjdXJzaW9uRnVuYyhjdXJyZW50LCBhbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGN1cnJlbnQuY2hpbGROb2RlcztcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxLCB2Tm9kZTsgMCA8PSBpOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdmVyTm9kZSA9IGFuY2VzdG9yO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFzc05vZGUgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lQ2hpbGQgPSBjaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKGNsb25lQ2hpbGQsIGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUobmV3SW5uZXJOb2RlLCBjbG9uZUNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZS5wYXJlbnROb2RlICE9PSBudWxsICYmIG5ld05vZGUgIT09IGVsICYmIG5ld05vZGUgIT09IG5ld0lubmVyTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSB2YWxpZGF0aW9uKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZOb2RlICYmIG5ld05vZGUubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmNob3JOb2RlKSBhbmNob3JzLnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBwQ3VycmVudC5jb25jYXQoYW5jaG9ycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1RvcE5vZGUgPSBwQ3VycmVudC5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gcEN1cnJlbnQucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdJbm5lck5vZGUucGFyZW50Tm9kZSkgJiYgIV9pc01haW50YWluZWROb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgcE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmNob3JOb2RlICYmIF9pc01haW50YWluZWROb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYUNoaWxkcmVuID0gY2hpbGROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMCwgYUxlbiA9IGFDaGlsZHJlbi5sZW5ndGg7IGEgPCBhTGVuOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoYUNoaWxkcmVuW2FdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkTm9kZSwgcE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbm5lck5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhbmNlc3RvciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RvcE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5pbnNlcnRCZWZvcmUoY2hpbGROb2RlLCBuZXdJbm5lck5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUgJiYgY2hpbGQubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZ2V0TWFpbnRhaW5lZE5vZGUoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JBbmNob3JOb2RlID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGFuY2VzdG9yLCBmdW5jdGlvbiAoY3VycmVudCkge3JldHVybiB0aGlzLl9pc01haW50YWluZWROb2RlKGN1cnJlbnQucGFyZW50Tm9kZSkgfHwgY3VycmVudC5wYXJlbnROb2RlID09PSBwTm9kZTt9LmJpbmQodXRpbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUuYXBwZW5kQ2hpbGQoYW5jZXN0b3JBbmNob3JOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBhbmNlc3RvckFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUobmV3SW5uZXJOb2RlLCBwTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZENvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFzc05vZGUgJiYgY2hpbGQgPT09IGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShjb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IGNvbnRhaW5lci5zdWJzdHJpbmdEYXRhKG9mZnNldCwgKGNvbnRhaW5lci5sZW5ndGggLSBvZmZzZXQpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShjb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IGNvbnRhaW5lci5zdWJzdHJpbmdEYXRhKDAsIG9mZnNldCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBhbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gX2dldE1haW50YWluZWROb2RlKGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhICYmIGEucGFyZW50Tm9kZSAhPT0gcE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbSA9IGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtLnBhcmVudE5vZGUgIT09IHBOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gcCA9IG0ucGFyZW50Tm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShtLmNoaWxkTm9kZXNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQobS5jaGlsZE5vZGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmFwcGVuZENoaWxkKHApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gbS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsIG0ucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBhbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3SW5uZXJOb2RlLnBhcmVudE5vZGUpICYmICFhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShhZnRlck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5pbnNlcnRCZWZvcmUoYWZ0ZXJOb2RlLCBhbmNlc3Rvci5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGFuY2VzdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZSAhPT0gcE5vZGUgJiYgbmV3Tm9kZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSBfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSA/IG51bGwgOiB2YWxpZGF0aW9uKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZOb2RlICYmIG5ld05vZGUubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudC5wdXNoKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGFuY2VzdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZSAhPT0gYW5jZXN0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5pbnNlcnRCZWZvcmUoY2hpbGROb2RlLCBuZXdJbm5lck5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhjaGlsZCkpIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZC5jbG9uZU5vZGUoZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlLmluc2VydEJlZm9yZShuZXdJbm5lck5vZGUsIGFuY2hvck5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUoYW5jaG9yTm9kZSwgcE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShuZXdJbm5lck5vZGUsIHBOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NOb2RlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmluc2VydEJlZm9yZShjb250YWluZXIsIGFuY2VzdG9yLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZOb2RlID0gIXBhc3NOb2RlID8gY2hpbGQuY2xvbmVOb2RlKGZhbHNlKSA6IHZhbGlkYXRpb24oY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci5pbnNlcnRCZWZvcmUodk5vZGUsIGFuY2VzdG9yLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkpIGNvdmVyTm9kZSA9IHZOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY292ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkoZWxlbWVudCwgcE5vZGUpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm90IHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSAmJiAhaXNSZW1vdmVGb3JtYXQgJiYgIV9yZW1vdmVDaGVjay52KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogZW5kQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogZW5kT2ZmXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpc1JlbW92ZUZvcm1hdCA9IGlzUmVtb3ZlRm9ybWF0ICYmIGlzUmVtb3ZlTm9kZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBuTm9kZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJDaGlsZHJlbiA9IHJlbW92ZU5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE5vZGUgPSByQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwgcmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IG5Ob2RlQXJyYXkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaXBSZW1vdmVOb2RlKG5Ob2RlQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlRm9ybWF0ICYmIHBOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gZWxlbWVudC5jaGlsZE5vZGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIG5ld0lubmVyTm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUVtcHR5Tm9kZShwTm9kZSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUVtcHR5Tm9kZShwTm9kZSwgbmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocE5vZGUudGV4dENvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gcE5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShjb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIG5vZGUgY2hhbmdlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0ge3M6IDAsIGU6IDB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoY29udGFpbmVyLCBwTm9kZSwgb2Zmc2V0cyk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gb2Zmc2V0cy5zO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHRhZyBtZXJnZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3T2Zmc2V0cyA9IHV0aWwubWVyZ2VTYW1lVGFncyhwTm9kZSwgW3BhdGhdLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHBOb2RlLCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmdldE5vZGVGcm9tUGF0aChwYXRoLCBwTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbmV3T2Zmc2V0c1swXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBwTm9kZSxcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUnVuIHBsdWdpbiBjYWxscyBhbmQgYmFzaWMgY29tbWFuZHMuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgQ29tbWFuZCBzdHJpbmdcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlzcGxheSBEaXNwbGF5IHR5cGUgc3RyaW5nICgnY29tbWFuZCcsICdzdWJtZW51JywgJ2RpYWxvZycsICdjb250YWluZXInKVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IFRoZSBlbGVtZW50IG9mIGNvbW1hbmQgYnV0dG9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWN0aW9uQ2FsbDogZnVuY3Rpb24gKGNvbW1hbmQsIGRpc3BsYXksIHRhcmdldCkge1xyXG4gICAgICAgICAgICAvLyBjYWxsIHBsdWdpbnNcclxuICAgICAgICAgICAgaWYgKGRpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmICgvbW9yZS9pLnRlc3QoZGlzcGxheSkgJiYgdGFyZ2V0ICE9PSB0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0LmVsZW1lbnQudG9vbGJhci5xdWVyeVNlbGVjdG9yKCcuJyArIHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpKSkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uLCAnb24nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRhcmdldCwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbiA9IHRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJCYWxsb29uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9zdWJtZW51Ly50ZXN0KGRpc3BsYXkpICYmICh0aGlzLl9tZW51VHJheVtjb21tYW5kXSA9PT0gbnVsbCB8fCB0YXJnZXQgIT09IHRoaXMuc3VibWVudUFjdGl2ZUJ1dHRvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5zdWJtZW51T24uYmluZCh0aGlzLCB0YXJnZXQpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2RpYWxvZy8udGVzdChkaXNwbGF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihjb21tYW5kLCB0aGlzLnBsdWdpbnNbY29tbWFuZF0ub3Blbi5iaW5kKHRoaXMpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2NvbW1hbmQvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5wbHVnaW5zW2NvbW1hbmRdLmFjdGlvbi5iaW5kKHRoaXMpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvY29udGFpbmVyLy50ZXN0KGRpc3BsYXkpICYmICh0aGlzLl9tZW51VHJheVtjb21tYW5kXSA9PT0gbnVsbCB8fCB0YXJnZXQgIT09IHRoaXMuY29udGFpbmVyQWN0aXZlQnV0dG9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihjb21tYW5kLCB0aGlzLmNvbnRhaW5lck9uLmJpbmQodGhpcywgdGFyZ2V0KSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9maWxlQnJvd3Nlci8udGVzdChkaXNwbGF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihjb21tYW5kLCB0aGlzLnBsdWdpbnNbY29tbWFuZF0ub3Blbi5iaW5kKHRoaXMsIG51bGwpLCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IC8vIGRlZmF1bHQgY29tbWFuZFxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyKHRhcmdldCwgY29tbWFuZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgvbW9yZS9pLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gY29udGV4dC5lbGVtZW50LnRvb2xiYXIucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJCYWxsb29uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFySW5saW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL3N1Ym1lbnUvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEvY29tbWFuZC8udGVzdChkaXNwbGF5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lck9mZigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGUgY29tbWFuZCBvZiBjb21tYW5kIGJ1dHRvbihBbGwgQnV0dG9ucyBleGNlcHQgc3VibWVudSBhbmQgZGlhbG9nKVxyXG4gICAgICAgICAqIChzZWxlY3RBbGwsIGNvZGVWaWV3LCBmdWxsU2NyZWVuLCBpbmRlbnQsIG91dGRlbnQsIHVuZG8sIHJlZG8sIHJlbW92ZUZvcm1hdCwgcHJpbnQsIHByZXZpZXcsIHNob3dCbG9ja3MsIHNhdmUsIGJvbGQsIHVuZGVybGluZSwgaXRhbGljLCBzdHJpa2UsIHN1YnNjcmlwdCwgc3VwZXJzY3JpcHQsIGNvcHksIGN1dCwgcGFzdGUpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IHRhcmdldCBUaGUgZWxlbWVudCBvZiBjb21tYW5kIGJ1dHRvblxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIFByb3BlcnR5IG9mIGNvbW1hbmQgYnV0dG9uIChkYXRhLXZhbHVlKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbW1hbmRIYW5kbGVyOiBmdW5jdGlvbiAodGFyZ2V0LCBjb21tYW5kKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY29weSc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjdXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RBbGwnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSB1dGlsLmdldENoaWxkRWxlbWVudCh3eXNpd3lnLmZpcnN0Q2hpbGQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKSB8fCB3eXNpd3lnLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSB1dGlsLmdldENoaWxkRWxlbWVudCh3eXNpd3lnLmxhc3RDaGlsZCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSkgfHwgd3lzaXd5Zy5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCB8fCAhbGFzdCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTWVkaWEoZmlyc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmdldEZpbGVDb21wb25lbnQoZmlyc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZChicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gaW5mbyA/IGluZm8uY29tcG9uZW50IDogZmlyc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgZmlyc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc01lZGlhKGxhc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd3lzaXd5Zy5hcHBlbmRDaGlsZChmb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZmlyc3QsIDAsIGxhc3QsIGxhc3QudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGVWaWV3JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNvZGVWaWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdmdWxsU2NyZWVuJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUZ1bGxTY3JlZW4odGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2luZGVudCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvdXRkZW50JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudChjb21tYW5kKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZG8nOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS51bmRvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyZWRvJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucmVkbygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmVtb3ZlRm9ybWF0JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvcm1hdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3ByaW50JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwcmV2aWV3JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3Nob3dCbG9ja3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRGlzcGxheUJsb2NrcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNhbGxCYWNrU2F2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNhbGxCYWNrU2F2ZSh0aGlzLmdldENvbnRlbnRzKGZhbHNlKSwgdGhpcy5fdmFyaWFibGUuaXNDaGFuZ2VkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZhcmlhYmxlLmlzQ2hhbmdlZCAmJiB0eXBlb2YgZnVuY3Rpb25zLnNhdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnNhdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jb3JlLmNvbW1hbmRIYW5kbGVyLmZhaWxdIFBsZWFzZSByZWdpc3RlciBjYWxsIGJhY2sgZnVuY3Rpb24gaW4gY3JlYXRpb24gb3B0aW9uLiAoY2FsbEJhY2tTYXZlIDogRnVuY3Rpb24pJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5pc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50b29sLnNhdmUpIGNvbnRleHQudG9vbC5zYXZlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQgOiAvLyAnU1RST05HJywgJ1UnLCAnRU0nLCAnREVMJywgJ1NVQicsICdTVVAnLi5cclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gdGhpcy5fZGVmYXVsdENvbW1hbmRbY29tbWFuZC50b0xvd2VyQ2FzZSgpXSB8fCBjb21tYW5kO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb21tYW5kTWFwW2NvbW1hbmRdKSB0aGlzLmNvbW1hbmRNYXBbY29tbWFuZF0gPSB0YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzTWFwID0gdGhpcy5fdmFyaWFibGUuY3VycmVudE5vZGVzTWFwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtZCA9IG5vZGVzTWFwLmluZGV4T2YoY29tbWFuZCkgPiAtMSA/IG51bGwgOiB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBjb21tYW5kO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoL15TVUIkL2kudGVzdChjb21tYW5kKSAmJiBub2Rlc01hcC5pbmRleE9mKCdTVVAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUgPSAnU1VQJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9eU1VQJC9pLnRlc3QoY29tbWFuZCkgJiYgbm9kZXNNYXAuaW5kZXhPZignU1VCJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlID0gJ1NVQic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UoY21kLCBudWxsLCBbcmVtb3ZlTm9kZV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIGZvcm1hdCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJhbmdlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVtb3ZlRm9ybWF0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgaW1wbGVtZW50cyBpbmRlbnRhdGlvbiB0byBzZWxlY3RlZCByYW5nZS5cclxuICAgICAgICAgKiBTZXR0ZWQgXCJtYXJnaW4tbGVmdFwiIHRvIFwiMjVweFwiIGluIHRoZSB0b3AgXCJQXCIgdGFnIG9mIHRoZSBwYXJhbWV0ZXIgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBTZXBhcmF0b3IgKFwiaW5kZW50XCIgb3IgXCJvdXRkZW50XCIpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5kZW50OiBmdW5jdGlvbiAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2VMaW5lcyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cyhudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSAnaW5kZW50JyAhPT0gY29tbWFuZDtcclxuICAgICAgICAgICAgY29uc3QgbWFyZ2luRGlyID0gb3B0aW9ucy5ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnO1xyXG4gICAgICAgICAgICBsZXQgc2MgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IGVjID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBsZXQgc28gPSByYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgbGV0IGVvID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJhbmdlTGluZXMubGVuZ3RoLCBmLCBtYXJnaW47IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZiA9IHJhbmdlTGluZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0Q2VsbChmKSB8fCAhdGhpcy5wbHVnaW5zLmxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4gPSAvXFxkKy8udGVzdChmLnN0eWxlW21hcmdpbkRpcl0pID8gdXRpbC5nZXROdW1iZXIoZi5zdHlsZVttYXJnaW5EaXJdLCAwKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbiAtPSAyNTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4gKz0gMjU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuc2V0U3R5bGUoZiwgbWFyZ2luRGlyLCAobWFyZ2luIDw9IDAgPyAnJyA6IG1hcmdpbiArICdweCcpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0IHx8IGYucHJldmlvdXNFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gbGlzdCBjZWxsc1xyXG4gICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmxpc3QuZWRpdEluc2lkZUxpc3QuY2FsbCh0aGlzLCBzaGlmdCwgY2VsbHMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKHNjLCBzbywgZWMsIGVvKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGQgb3IgcmVtb3ZlIHRoZSBjbGFzcyBuYW1lIG9mIFwiYm9keVwiIHNvIHRoYXQgdGhlIGNvZGUgYmxvY2sgaXMgdmlzaWJsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvZ2dsZURpc3BsYXlCbG9ja3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3lzaXd5ZyA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG4gICAgICAgICAgICB1dGlsLnRvZ2dsZUNsYXNzKHd5c2l3eWcsICdzZS1zaG93LWJsb2NrJyk7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmhhc0NsYXNzKHd5c2l3eWcsICdzZS1zaG93LWJsb2NrJykpIHtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZXNTdGF0ZUNoYW5nZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGFuZ2VzIHRvIGNvZGUgdmlldyBvciB3eXNpd3lnIHZpZXdcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVDb2RlVmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc0NvZGVWaWV3ID0gdGhpcy5fdmFyaWFibGUuaXNDb2RlVmlldztcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB1dGlsLnNldERpc2FibGVkQnV0dG9ucyghaXNDb2RlVmlldywgdGhpcy5jb2RlVmlld0Rpc2FibGVkQnV0dG9ucyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29kZURhdGFUb0VkaXRvcigpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0ID0gdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0LnJlcGxhY2UoLyhcXHM/ZGlzcGxheShcXHMrKT86KFxccyspPylbYS16QS1aXSsoPz07KS8sICdkaXNwbGF5OiBub25lJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fd3lzaXd5Z09yaWdpbkNzc1RleHQgPSB0aGlzLl92YXJpYWJsZS5fd3lzaXd5Z09yaWdpbkNzc1RleHQucmVwbGFjZSgvKFxccz9kaXNwbGF5KFxccyspPzooXFxzKyk/KVthLXpBLVpdKyg/PTspLywgJ2Rpc3BsYXk6IGJsb2NrJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycgJiYgIW9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RIaWRlVG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvYmFsbG9vbnxiYWxsb29uLWFsd2F5cy9pLnRlc3Qob3B0aW9ucy5tb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX2Fycm93LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5jb2RlVmlldywgJ2FjdGl2ZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5fcmVzZXRDYWNoaW5nQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFZGl0b3JEYXRhVG9Db2RlVmlldygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0ID0gdGhpcy5fdmFyaWFibGUuX2NvZGVPcmlnaW5Dc3NUZXh0LnJlcGxhY2UoLyhcXHM/ZGlzcGxheShcXHMrKT86KFxccyspPylbYS16QS1aXSsoPz07KS8sICdkaXNwbGF5OiBibG9jaycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3d5c2l3eWdPcmlnaW5Dc3NUZXh0ID0gdGhpcy5fdmFyaWFibGUuX3d5c2l3eWdPcmlnaW5Dc3NUZXh0LnJlcGxhY2UoLyhcXHM/ZGlzcGxheShcXHMrKT86KFxccyspPylbYS16QS1aXSsoPz07KS8sICdkaXNwbGF5OiBub25lJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycgJiYgIW9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuaGVpZ2h0ID0gY29udGV4dC5lbGVtZW50LmNvZGUuc2Nyb2xsSGVpZ2h0ID4gMCA/IChjb250ZXh0LmVsZW1lbnQuY29kZS5zY3JvbGxIZWlnaHQgKyAncHgnKSA6ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdmFyaWFibGUuaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90SGlkZVRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9hcnJvdy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS5sZWZ0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3JhbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5jb2RlVmlldywgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1BsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMudG9nZ2xlQ29kZVZpZXcgPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy50b2dnbGVDb2RlVmlldyh0aGlzLl92YXJpYWJsZS5pc0NvZGVWaWV3LCB0aGlzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydCB0aGUgZGF0YSBvZiB0aGUgY29kZSB2aWV3IGFuZCBwdXQgaXQgaW4gdGhlIFdZU0lXWUcgYXJlYS5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRDb2RlRGF0YVRvRWRpdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVfaHRtbCA9IHRoaXMuX2dldENvZGVWaWV3KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mdWxsUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VEb2N1bWVudCA9IHRoaXMuX3BhcnNlci5wYXJzZUZyb21TdHJpbmcoY29kZV9odG1sLCAndGV4dC9odG1sJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkQ2hpbGRyZW4gPSBwYXJzZURvY3VtZW50LmhlYWQuY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGhlYWRDaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXnNjcmlwdCQvaS50ZXN0KGhlYWRDaGlsZHJlbltpXS50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoaGVhZENoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS0tLCBsZW4tLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2QuaGVhZC5pbm5lckhUTUwgPSBwYXJzZURvY3VtZW50LmhlYWQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2QuYm9keS5pbm5lckhUTUwgPSB0aGlzLmNvbnZlcnRDb250ZW50c0ZvckVkaXRvcihwYXJzZURvY3VtZW50LmJvZHkuaW5uZXJIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRycyA9IHBhcnNlRG9jdW1lbnQuYm9keS5hdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGF0dHJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09ICdjb250ZW50ZWRpdGFibGUnKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZC5ib2R5LnNldEF0dHJpYnV0ZShhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzQ2xhc3ModGhpcy5fd2QuYm9keSwgJ3N1bi1lZGl0b3ItZWRpdGFibGUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlQ2xhc3NlcyA9IG9wdGlvbnMuX2VkaXRhYmxlQ2xhc3Muc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkaXRhYmxlQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRoaXMuX3dkLmJvZHksIG9wdGlvbnMuX2VkaXRhYmxlQ2xhc3NbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmlubmVySFRNTCA9IGNvZGVfaHRtbC5sZW5ndGggPiAwID8gdGhpcy5jb252ZXJ0Q29udGVudHNGb3JFZGl0b3IoY29kZV9odG1sKSA6ICc8JyArIG9wdGlvbnMuZGVmYXVsdFRhZyArICc+PGJyPjwvJyArIG9wdGlvbnMuZGVmYXVsdFRhZyArICc+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IHRoZSBkYXRhIG9mIHRoZSBXWVNJV1lHIGFyZWEgYW5kIHB1dCBpdCBpbiB0aGUgY29kZSB2aWV3IGFyZWEuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0RWRpdG9yRGF0YVRvQ29kZVZpZXc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZUNvbnRlbnRzID0gdGhpcy5jb252ZXJ0SFRNTEZvckNvZGVWaWV3KGNvbnRleHQuZWxlbWVudC53eXNpd3lnKTtcclxuICAgICAgICAgICAgbGV0IGNvZGVWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZnVsbFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gdXRpbC5nZXRBdHRyaWJ1dGVzVG9TdHJpbmcodGhpcy5fd2QuYm9keSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBjb2RlVmFsdWUgPSAnPCFET0NUWVBFIGh0bWw+XFxuPGh0bWw+XFxuJyArIHRoaXMuX3dkLmhlYWQub3V0ZXJIVE1MLnJlcGxhY2UoLz4oPyFcXG4pL2csICc+XFxuJykgKyAnPGJvZHkgJyArIGF0dHJzICsgJz5cXG4nICsgY29kZUNvbnRlbnRzICsgJzwvYm9keT5cXG48L2h0bWw+JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvZGVWYWx1ZSA9IGNvZGVDb250ZW50cztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NldENvZGVWaWV3KGNvZGVWYWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENoYW5nZXMgdG8gZnVsbCBzY3JlZW4gb3IgZGVmYXVsdCBzY3JlZW5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgZnVsbCBzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9nZ2xlRnVsbFNjcmVlbjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgdG9wQXJlYSA9IGNvbnRleHQuZWxlbWVudC50b3BBcmVhO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyID0gY29udGV4dC5lbGVtZW50LnRvb2xiYXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckFyZWEgPSBjb250ZXh0LmVsZW1lbnQuZWRpdG9yQXJlYTtcclxuICAgICAgICAgICAgY29uc3Qgd3lzaXd5Z0ZyYW1lID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZTtcclxuICAgICAgICAgICAgY29uc3QgY29kZSA9IGNvbnRleHQuZWxlbWVudC5jb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBfdmFyID0gdGhpcy5fdmFyaWFibGU7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghX3Zhci5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIF92YXIuaXNGdWxsU2NyZWVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgX3Zhci5fZnVsbFNjcmVlbkF0dHJzLmlubGluZSA9IHRoaXMuX2lzSW5saW5lO1xyXG4gICAgICAgICAgICAgICAgX3Zhci5fZnVsbFNjcmVlbkF0dHJzLmJhbGxvb24gPSB0aGlzLl9pc0JhbGxvb247XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5saW5lIHx8IHRoaXMuX2lzQmFsbG9vbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5saW5lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICghIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmluc2VydEJlZm9yZSh0b29sYmFyLCBlZGl0b3JBcmVhKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgdG9wQXJlYS5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgdG9wQXJlYS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUuekluZGV4ID0gJzIxNDc0ODM2NDcnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgIT09ICgnbm9uZScgJiYgJycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3Zhci5fZnVsbFNjcmVlbkF0dHJzLnN0aWNreSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModG9vbGJhciwgJ3NlLXRvb2xiYXItc3RpY2t5Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX3Zhci5fYm9keU92ZXJmbG93ID0gX2QuYm9keS5zdHlsZS5vdmVyZmxvdztcclxuICAgICAgICAgICAgICAgIF9kLmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuXHJcbiAgICAgICAgICAgICAgICBfdmFyLl9lZGl0b3JBcmVhT3JpZ2luQ3NzVGV4dCA9IGVkaXRvckFyZWEuc3R5bGUuY3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIF92YXIuX3d5c2l3eWdPcmlnaW5Dc3NUZXh0ID0gd3lzaXd5Z0ZyYW1lLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBfdmFyLl9jb2RlT3JpZ2luQ3NzVGV4dCA9IGNvZGUuc3R5bGUuY3NzVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICBlZGl0b3JBcmVhLnN0eWxlLmNzc1RleHQgPSB0b29sYmFyLnN0eWxlLmNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgIHd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0ID0gKHd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0Lm1hdGNoKC9cXHM/ZGlzcGxheShcXHMrKT86KFxccyspP1thLXpBLVpdKzsvKSB8fCBbJyddKVswXTtcclxuICAgICAgICAgICAgICAgIGNvZGUuc3R5bGUuY3NzVGV4dCA9IChjb2RlLnN0eWxlLmNzc1RleHQubWF0Y2goL1xccz9kaXNwbGF5KFxccyspPzooXFxzKyk/W2EtekEtWl0rOy8pIHx8IFsnJ10pWzBdO1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS53aWR0aCA9IHd5c2l3eWdGcmFtZS5zdHlsZS5oZWlnaHQgPSBjb2RlLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgICAgICBfdmFyLmlubmVySGVpZ2h0X2Z1bGxTY3JlZW4gPSAoX3cuaW5uZXJIZWlnaHQgLSB0b29sYmFyLm9mZnNldEhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JBcmVhLnN0eWxlLmhlaWdodCA9IChfdmFyLmlubmVySGVpZ2h0X2Z1bGxTY3JlZW4gLSBvcHRpb25zLmZ1bGxTY3JlZW5PZmZzZXQpICsgJ3B4JztcclxuXHJcbiAgICAgICAgICAgICAgICB1dGlsLmNoYW5nZUVsZW1lbnQoZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCwgaWNvbnMucmVkdWN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUgJiYgb3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvckFyZWEuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faWZyYW1lQXV0b0hlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlLm1hcmdpblRvcCA9IG9wdGlvbnMuZnVsbFNjcmVlbk9mZnNldCArICdweCc7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5mdWxsU2NyZWVuLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdmFyLmlzRnVsbFNjcmVlbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIHd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0ID0gX3Zhci5fd3lzaXd5Z09yaWdpbkNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBjb2RlLnN0eWxlLmNzc1RleHQgPSBfdmFyLl9jb2RlT3JpZ2luQ3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUuY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yQXJlYS5zdHlsZS5jc3NUZXh0ID0gX3Zhci5fZWRpdG9yQXJlYU9yaWdpbkNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLmNzc1RleHQgPSBfdmFyLl9vcmlnaW5Dc3NUZXh0O1xyXG4gICAgICAgICAgICAgICAgX2QuYm9keS5zdHlsZS5vdmVyZmxvdyA9IF92YXIuX2JvZHlPdmVyZmxvdztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIG9wdGlvbnMudG9vbGJhckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b29sYmFyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGlja3lUb29sYmFyID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRvb2xiYXIsICdzZS10b29sYmFyLXN0aWNreScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfdmFyLl9mdWxsU2NyZWVuQXR0cnMuc3RpY2t5ICYmICFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFyLl9mdWxsU2NyZWVuQXR0cnMuc3RpY2t5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRvb2xiYXIsIFwic2UtdG9vbGJhci1zdGlja3lcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbmxpbmUgPSBfdmFyLl9mdWxsU2NyZWVuQXR0cnMuaW5saW5lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gX3Zhci5fZnVsbFNjcmVlbkF0dHJzLmJhbGxvb247XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbmxpbmUpIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhb3B0aW9ucy50b29sYmFyQ29udGFpbmVyKSB1dGlsLnJlbW92ZUNsYXNzKHRvb2xiYXIsICdzZS10b29sYmFyLWJhbGxvb24nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBldmVudC5vblNjcm9sbF93aW5kb3coKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuY2hhbmdlRWxlbWVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLCBpY29ucy5leHBhbnNpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlLm1hcmdpblRvcCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9zdHlsZUNvbW1hbmRNYXAuZnVsbFNjcmVlbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLnRvZ2dsZUZ1bGxTY3JlZW4gPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy50b2dnbGVGdWxsU2NyZWVuKHRoaXMuX3ZhcmlhYmxlLmlzRnVsbFNjcmVlbiwgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFByaW50cyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgZWRpdG9yLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByaW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnSUZSQU1FJyk7XHJcbiAgICAgICAgICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfZC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50c0hUTUwgPSBvcHRpb25zLnByaW50VGVtcGxhdGUgPyBvcHRpb25zLnByaW50VGVtcGxhdGUucmVwbGFjZSgvXFx7XFx7XFxzKmNvbnRlbnRzXFxzKlxcfVxcfS9pLCB0aGlzLmdldENvbnRlbnRzKHRydWUpKSA6IHRoaXMuZ2V0Q29udGVudHModHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByaW50RG9jdW1lbnQgPSB1dGlsLmdldElmcmFtZURvY3VtZW50KGlmcmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHdEb2MgPSB0aGlzLl93ZDtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJydHMgPSBvcHRpb25zLl9wcmludENsYXNzICE9PSBudWxsID8gJ2NsYXNzPVwiJyArIG9wdGlvbnMuX3ByaW50Q2xhc3MgKyAnXCInIDogb3B0aW9ucy5mdWxsUGFnZSA/IHV0aWwuZ2V0QXR0cmlidXRlc1RvU3RyaW5nKHdEb2MuYm9keSwgWydjb250ZW50ZWRpdGFibGUnXSkgOiAnY2xhc3M9XCInICsgb3B0aW9ucy5fZWRpdGFibGVDbGFzcyArICdcIic7XHJcblxyXG4gICAgICAgICAgICAgICAgcHJpbnREb2N1bWVudC53cml0ZSgnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwhRE9DVFlQRSBodG1sPjxodG1sPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8aGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICB3RG9jLmhlYWQuaW5uZXJIVE1MICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9oZWFkPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8Ym9keSAnICsgYXJydHMgKyAnPicgKyBjb250ZW50c0hUTUwgKyAnPC9ib2R5PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2h0bWw+J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtzID0gX2QuaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGluaycpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVzID0gX2QuaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgIGxldCBsaW5rSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGxpbmtzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlua0hUTUwgKz0gbGlua3NbaV0ub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmtIVE1MICs9IHN0eWxlc1tpXS5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcHJpbnREb2N1bWVudC53cml0ZSgnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwhRE9DVFlQRSBodG1sPjxodG1sPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8aGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJvZHkgY2xhc3M9XCInICsgKG9wdGlvbnMuX3ByaW50Q2xhc3MgIT09IG51bGwgPyBvcHRpb25zLl9wcmludENsYXNzIDogb3B0aW9ucy5fZWRpdGFibGVDbGFzcykgKyAnXCI+JyArIGNvbnRlbnRzSFRNTCArICc8L2JvZHk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaHRtbD4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJRSBvciBFZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNJRV9FZGdlIHx8ICEhX2QuZG9jdW1lbnRNb2RlIHx8ICEhX3cuU3R5bGVNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3ByaW50JywgZmFsc2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5wcmludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucHJpbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNvcmUucHJpbnQuZmFpbF0gZXJyb3I6ICcgKyBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGlmcmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBPcGVuIHRoZSBwcmV2aWV3IHdpbmRvdy5cclxuICAgICAgICAgKi9cclxuICAgICAgICBwcmV2aWV3OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvcmUuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRhaW5lck9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50c0hUTUwgPSBvcHRpb25zLnByZXZpZXdUZW1wbGF0ZSA/IG9wdGlvbnMucHJldmlld1RlbXBsYXRlLnJlcGxhY2UoL1xce1xce1xccypjb250ZW50c1xccypcXH1cXH0vaSwgdGhpcy5nZXRDb250ZW50cyh0cnVlKSkgOiB0aGlzLmdldENvbnRlbnRzKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCB3aW5kb3dPYmplY3QgPSBfdy5vcGVuKCcnLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIHdpbmRvd09iamVjdC5taW1lVHlwZSA9ICd0ZXh0L2h0bWwnO1xyXG4gICAgICAgICAgICBjb25zdCB3RG9jID0gdGhpcy5fd2Q7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFycnRzID0gb3B0aW9ucy5fcHJpbnRDbGFzcyAhPT0gbnVsbCA/ICdjbGFzcz1cIicgKyBvcHRpb25zLl9wcmludENsYXNzICsgJ1wiJyA6IG9wdGlvbnMuZnVsbFBhZ2UgPyB1dGlsLmdldEF0dHJpYnV0ZXNUb1N0cmluZyh3RG9jLmJvZHksIFsnY29udGVudGVkaXRhYmxlJ10pIDogJ2NsYXNzPVwiJyArIG9wdGlvbnMuX2VkaXRhYmxlQ2xhc3MgKyAnXCInO1xyXG5cclxuICAgICAgICAgICAgICAgIHdpbmRvd09iamVjdC5kb2N1bWVudC53cml0ZSgnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwhRE9DVFlQRSBodG1sPjxodG1sPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8aGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICB3RG9jLmhlYWQuaW5uZXJIVE1MICtcclxuICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPmJvZHkge292ZXJmbG93OmF1dG8gIWltcG9ydGFudDsgbWFyZ2luOiAxMHB4IGF1dG8gIWltcG9ydGFudDsgaGVpZ2h0OmF1dG8gIWltcG9ydGFudDsgb3V0bGluZToxcHggZGFzaGVkICNjY2M7fTwvc3R5bGU+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJvZHkgJyArIGFycnRzICsgJz4nICsgY29udGVudHNIVE1MICsgJzwvYm9keT4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9odG1sPidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rcyA9IF9kLmhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IF9kLmhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGlua0hUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaW5rcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmtIVE1MICs9IGxpbmtzW2ldLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArPSBzdHlsZXNbaV0ub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dPYmplY3QuZG9jdW1lbnQud3JpdGUoJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8dGl0bGU+JyArIGxhbmcudG9vbGJhci5wcmV2aWV3ICsgJzwvdGl0bGU+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgbGlua0hUTUwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxib2R5IGNsYXNzPVwiJyArIChvcHRpb25zLl9wcmludENsYXNzICE9PSBudWxsID8gb3B0aW9ucy5fcHJpbnRDbGFzcyA6IG9wdGlvbnMuX2VkaXRhYmxlQ2xhc3MpICsgJ1wiIHN0eWxlPVwibWFyZ2luOjEwcHggYXV0byAhaW1wb3J0YW50OyBoZWlnaHQ6YXV0byAhaW1wb3J0YW50OyBvdXRsaW5lOjFweCBkYXNoZWQgI2NjYztcIj4nICsgY29udGVudHNIVE1MICsgJzwvYm9keT4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9odG1sPidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgSFRNTCBzdHJpbmdcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IGh0bWwgSFRNTCBzdHJpbmdcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRDb250ZW50czogZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSYW5nZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gKGh0bWwgPT09IG51bGwgfHwgaHRtbCA9PT0gdW5kZWZpbmVkKSA/ICcnIDogdGhpcy5jb252ZXJ0Q29udGVudHNGb3JFZGl0b3IoaHRtbCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0Q29tcG9uZW50cygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5pc0NvZGVWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5pbm5lckhUTUwgPSBjb252ZXJ0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydEhUTUxGb3JDb2RlVmlldyhjb252ZXJ0VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29kZVZpZXcodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpZnJhbWUncyBoZWFkIHRhZyBhbmQgYm9keSB0YWcgd2hlbiB1c2luZyB0aGUgXCJpZnJhbWVcIiBvciBcImZ1bGxQYWdlXCIgb3B0aW9uLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjdHggeyBoZWFkOiBIVE1MIHN0cmluZywgYm9keTogSFRNTCBzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0SWZyYW1lQ29udGVudHM6IGZ1bmN0aW9uIChjdHgpIHtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlmcmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoY3R4LmhlYWQpIHRoaXMuX3dkLmhlYWQuaW5uZXJIVE1MID0gY3R4LmhlYWQucmVwbGFjZSgvPHNjcmlwdFtcXHNcXFNdKj5bXFxzXFxTXSo8XFwvc2NyaXB0Pi9naSwgJycpO1xyXG4gICAgICAgICAgICBpZiAoY3R4LmJvZHkpIHRoaXMuX3dkLmJvZHkuaW5uZXJIVE1MID0gdGhpcy5jb252ZXJ0Q29udGVudHNGb3JFZGl0b3IoY3R4LmJvZHkpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBjdXJyZW50IGNvbnRlbnRzXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBvbmx5Q29udGVudHMgUmV0dXJuIG9ubHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBib2R5IHdpdGhvdXQgaGVhZGVycyB3aGVuIHRoZSBcImZ1bGxQYWdlXCIgb3B0aW9uIGlzIHRydWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENvbnRlbnRzOiBmdW5jdGlvbiAob25seUNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXJIVE1MID0gdXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgcmVuZGVySFRNTC5pbm5lckhUTUwgPSBjb250ZW50cztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZ2NhcHRpb25zID0gdXRpbC5nZXRMaXN0Q2hpbGRyZW4ocmVuZGVySFRNTCwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAvRklHQ0FQVElPTi9pLnRlc3QoY3VycmVudC5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpZ2NhcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmaWdjYXB0aW9uc1tpXS5yZW1vdmVBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mdWxsUGFnZSAmJiAhb25seUNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRycyA9IHV0aWwuZ2V0QXR0cmlidXRlc1RvU3RyaW5nKHRoaXMuX3dkLmJvZHksIFsnY29udGVudGVkaXRhYmxlJ10pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICsgdGhpcy5fd2QuaGVhZC5vdXRlckhUTUwgKyAnPGJvZHkgJyArIGF0dHJzICsgJz4nICsgcmVuZGVySFRNTC5pbm5lckhUTUwgKyAnPC9ib2R5PjwvaHRtbD4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckhUTUwuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgSFRNTCBzdHJpbmcgYWNjb3JkaW5nIHRvIHRhZyB0eXBlIGFuZCBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAqIFVzZSBvbmx5IFwiY2xlYW5IVE1MXCJcclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVxdWlyZUZvcm1hdCBJZiB0cnVlLCB0ZXh0IG5vZGVzIHRoYXQgZG8gbm90IGhhdmUgYSBmb3JtYXQgbm9kZSBpcyB3cmFwcGVkIHdpdGggdGhlIGZvcm1hdCB0YWcuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbWFrZUxpbmU6IGZ1bmN0aW9uIChub2RlLCByZXF1aXJlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUYWcgPSBvcHRpb25zLmRlZmF1bHRUYWc7XHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnRcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLl9kaXNhbGxvd2VkVGFncyhub2RlKSkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1aXJlRm9ybWF0IHx8ICh1dGlsLmlzRm9ybWF0RWxlbWVudChub2RlKSB8fCB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KG5vZGUpIHx8IHV0aWwuaXNDb21wb25lbnQobm9kZSkgfHwgdXRpbC5pc01lZGlhKG5vZGUpIHx8ICh1dGlsLmlzQW5jaG9yKG5vZGUpICYmIHV0aWwuaXNNZWRpYShub2RlLmZpcnN0RWxlbWVudENoaWxkKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnICsgZGVmYXVsdFRhZyArICc+JyArIG5vZGUub3V0ZXJIVE1MICsgJzwvJyArIGRlZmF1bHRUYWcgKyAnPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGV4dFxyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1aXJlRm9ybWF0KSByZXR1cm4gdXRpbC5fSFRNTENvbnZlcnRvcihub2RlLnRleHRDb250ZW50KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRBcnJheSA9IG5vZGUudGV4dENvbnRlbnQuc3BsaXQoL1xcbi9nKTtcclxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gJyc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgdExlbiA9IHRleHRBcnJheS5sZW5ndGgsIHRleHQ7IGkgPCB0TGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dEFycmF5W2ldLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPiAwKSBodG1sICs9ICc8JyArIGRlZmF1bHRUYWcgKyAnPicgKyB1dGlsLl9IVE1MQ29udmVydG9yKHRleHQpICsgJzwvJyArIGRlZmF1bHRUYWcgKyAnPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb21tZW50c1xyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOCAmJiB0aGlzLl9hbGxvd0hUTUxDb21tZW50cykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8IS0tJyArIG5vZGUudGV4dENvbnRlbnQudHJpbSgpICsgJy0tPic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhdHRyaWJ1dGUgdmFsdWVzIHN1Y2ggYXMgc3R5bGUgYW5kIGNvbnZlcnRzIHRhZ3MgdGhhdCBkbyBub3QgY29uZm9ybSB0byB0aGUgXCJodG1sNVwiIHN0YW5kYXJkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfdGFnQ29udmVydG9yOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2Rpc2FsbG93ZWRUZXh0VGFnc1JlZ0V4cCkgcmV0dXJuIHRleHQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlYyA9IG9wdGlvbnMuX3RleHRUYWdzTWFwO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHRoaXMuX2Rpc2FsbG93ZWRUZXh0VGFnc1JlZ0V4cCwgZnVuY3Rpb24gKG0sIHQsIG4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgKHR5cGVvZiBlY1tuXSA9PT0gJ3N0cmluZycgPyBlY1tuXSA6IG4pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIGRpc2FsbG93ZWQgdGFnc1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9kZWxldGVEaXNhbGxvd2VkVGFnczogZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGh0bWxcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJycpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvPChzY3JpcHR8c3R5bGUpW1xcc1xcU10qPltcXHNcXFNdKjxcXC8oc2NyaXB0fHN0eWxlKT4vZ2ksICcnKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxbYS16MC05XStcXDpbYS16MC05XStbXj5eXFwvXSo+W14+XSo8XFwvW2EtejAtOV0rXFw6W2EtejAtOV0rPi9naSwgJycpXHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZSh0aGlzLmVkaXRvclRhZ3NXaGl0ZWxpc3RSZWdFeHAsICcnKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGFnIGFuZCB0YWcgYXR0cmlidXRlIGNoZWNrIFJlZ0V4cCBmdW5jdGlvbi4gKHVzZWQgYnkgXCJjbGVhbkhUTUxcIiBhbmQgXCJjb252ZXJ0Q29udGVudHNGb3JFZGl0b3JcIilcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJvd0xldmVsQ2hlY2sgUm93IGxldmVsIGNoZWNrXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG0gUmVnRXhwIHZhbHVlXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHQgUmVnRXhwIHZhbHVlXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jbGVhblRhZ3M6IGZ1bmN0aW9uIChyb3dMZXZlbENoZWNrLCBtLCB0KSB7XHJcbiAgICAgICAgICAgIGlmICgvXjxbYS16MC05XStcXDpbYS16MC05XSsvaS50ZXN0KG0pKSByZXR1cm4gbTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2ID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgdEF0dHIgPSB0aGlzLl9hdHRyaWJ1dGVzVGFnc1doaXRlbGlzdFt0Lm1hdGNoKC8oPyE8KVthLXpBLVowLTlcXC1dKy8pWzBdLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICBpZiAodEF0dHIpIHYgPSBtLm1hdGNoKHRBdHRyKTtcclxuICAgICAgICAgICAgZWxzZSB2ID0gbS5tYXRjaCh0aGlzLl9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICgocm93TGV2ZWxDaGVjayB8fCAvPHNwYW4vaS50ZXN0KHQpKSAmJiAoIXYgfHwgIS9zdHlsZT0vaS50ZXN0KHYudG9TdHJpbmcoKSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdiA9IG0ubWF0Y2goL3N0eWxlXFxzKj1cXHMqKD86XCJ8JylbXlwiJ10qKD86XCJ8JykvKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdikgdiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHYucHVzaChzdlswXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgvPGFcXGIvaS50ZXN0KHQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdiA9IG0ubWF0Y2goL2lkXFxzKj1cXHMqKD86XCJ8JylbXlwiJ10qKD86XCJ8JykvKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdikgdiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHYucHVzaChzdlswXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3dMZXZlbENoZWNrICYmIC9eY2xhc3M9XCIoPyEoX19zZV9ffHNlLXxrYXRleCkpLy50ZXN0KHZbaV0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB0ICs9ICcgJyArICgvXmhyZWZcXHMqPVxccyooJ3xcInxcXHMpKmphdmFzY3JpcHRcXHMqXFw6L2kudGVzdCh2W2ldKSA/ICcnIDogdltpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBjbGVhbiBIVE1MIGNvZGUgZm9yIGVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfG51bGx9IHdoaXRlbGlzdCBSZWd1bGFyIGV4cHJlc3Npb24gb2YgYWxsb3dlZCB0YWdzLlxyXG4gICAgICAgICAqIFJlZ0V4cCBvYmplY3QgaXMgY3JlYXRlIGJ5IHV0aWwuY3JlYXRlVGFnc1doaXRlbGlzdCBtZXRob2QuIChjb3JlLnBhc3RlVGFnc1doaXRlbGlzdFJlZ0V4cClcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFuSFRNTDogZnVuY3Rpb24gKGh0bWwsIHdoaXRlbGlzdCkge1xyXG4gICAgICAgICAgICBodG1sID0gdGhpcy5fZGVsZXRlRGlzYWxsb3dlZFRhZ3ModGhpcy5fcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJykuYm9keS5pbm5lckhUTUwpLnJlcGxhY2UoLyg8W2EtekEtWjAtOVxcLV0rKVtePl0qKD89PikvZywgdGhpcy5fY2xlYW5UYWdzLmJpbmQodGhpcywgZmFsc2UpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRvbSA9IF9kLmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5fY29uc2lzdGVuY3lDaGVja09mSFRNTChkb20sIHRoaXMuX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IuY2xlYW5IVE1MLmNvbnNpc3RlbmN5Q2hlY2suZmFpbF0gJyArIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMubWFuYWdlZFRhZ3NJbmZvICYmIHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29tcExpc3QgPSBkb20ucXVlcnlTZWxlY3RvckFsbCh0aGlzLm1hbmFnZWRUYWdzSW5mby5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGV4dENvbXBMaXN0Lmxlbmd0aCwgaW5pdE1ldGhvZCwgY2xhc3NMaXN0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc0xpc3QgPSBbXS5zbGljZS5jYWxsKHRleHRDb21wTGlzdFtpXS5jbGFzc0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2xhc3NMaXN0Lmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0TWV0aG9kID0gdGhpcy5tYW5hZ2VkVGFnc0luZm8ubWFwW2NsYXNzTGlzdFtjXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0TWV0aG9kKHRleHRDb21wTGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBsZXQgY2xlYW5IVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGxldCByZXF1aXJlRm9ybWF0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZG9tVHJlZS5sZW5ndGgsIHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdCA9IGRvbVRyZWVbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodC5ub2RlVHlwZSA9PT0gMSAmJiAhdXRpbC5pc1RleHRTdHlsZUVsZW1lbnQodCkgJiYgIXV0aWwuaXNCcmVhayh0KSAmJiAhdXRpbC5fZGlzYWxsb3dlZFRhZ3ModCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRvbVRyZWUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNsZWFuSFRNTCArPSB0aGlzLl9tYWtlTGluZShkb21UcmVlW2ldLCByZXF1aXJlRm9ybWF0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2xlYW5IVE1MID0gdXRpbC5odG1sUmVtb3ZlV2hpdGVTcGFjZShjbGVhbkhUTUwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnQ29udmVydG9yKCFjbGVhbkhUTUwgPyBodG1sIDogIXdoaXRlbGlzdCA/IGNsZWFuSFRNTCA6IGNsZWFuSFRNTC5yZXBsYWNlKHR5cGVvZiB3aGl0ZWxpc3QgPT09ICdzdHJpbmcnID8gdXRpbC5jcmVhdGVUYWdzV2hpdGVsaXN0KHdoaXRlbGlzdCkgOiB3aGl0ZWxpc3QsICcnKSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGNvbnRlbnRzIGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGxhY2VkIGluIGFuIGVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBjb250ZW50c1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udmVydENvbnRlbnRzRm9yRWRpdG9yOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICAgICAgY29udGVudHMgPSB0aGlzLl9kZWxldGVEaXNhbGxvd2VkVGFncyh0aGlzLl9wYXJzZXIucGFyc2VGcm9tU3RyaW5nKGNvbnRlbnRzLCAndGV4dC9odG1sJykuYm9keS5pbm5lckhUTUwpLnJlcGxhY2UoLyg8W2EtekEtWjAtOVxcLV0rKVtePl0qKD89PikvZywgdGhpcy5fY2xlYW5UYWdzLmJpbmQodGhpcywgdHJ1ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBkb20gPSBfZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb250ZW50cyk7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5fY29uc2lzdGVuY3lDaGVja09mSFRNTChkb20sIHRoaXMuX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IuY29udmVydENvbnRlbnRzRm9yRWRpdG9yLmNvbnNpc3RlbmN5Q2hlY2suZmFpbF0gJyArIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWFuYWdlZFRhZ3NJbmZvICYmIHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29tcExpc3QgPSBkb20ucXVlcnlTZWxlY3RvckFsbCh0aGlzLm1hbmFnZWRUYWdzSW5mby5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGV4dENvbXBMaXN0Lmxlbmd0aCwgaW5pdE1ldGhvZCwgY2xhc3NMaXN0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc0xpc3QgPSBbXS5zbGljZS5jYWxsKHRleHRDb21wTGlzdFtpXS5jbGFzc0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2xhc3NMaXN0Lmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0TWV0aG9kID0gdGhpcy5tYW5hZ2VkVGFnc0luZm8ubWFwW2NsYXNzTGlzdFtjXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0TWV0aG9kKHRleHRDb21wTGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBsZXQgY2xlYW5IVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkb21UcmVlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhbkhUTUwgKz0gdGhpcy5fbWFrZUxpbmUoZG9tVHJlZVtpXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhbkhUTUwubGVuZ3RoID09PSAwKSByZXR1cm4gJzwnICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz48YnI+PC8nICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz4nO1xyXG5cclxuICAgICAgICAgICAgY2xlYW5IVE1MID0gdXRpbC5odG1sUmVtb3ZlV2hpdGVTcGFjZShjbGVhbkhUTUwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnQ29udmVydG9yKGNsZWFuSFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHd5c2l3eWcgYXJlYSBlbGVtZW50IGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGxhY2VkIGluIGFuIGVkaXRvciBvZiBjb2RlIHZpZXcgbW9kZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxTdHJpbmd9IGh0bWwgV1lTSVdZRyBlbGVtZW50IChjb250ZXh0LmVsZW1lbnQud3lzaXd5Zykgb3IgSFRNTCBzdHJpbmcuXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb252ZXJ0SFRNTEZvckNvZGVWaWV3OiBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0dXJuSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICBjb25zdCB3UmVnRXhwID0gX3cuUmVnRXhwO1xyXG4gICAgICAgICAgICBjb25zdCBiclJlZyA9IG5ldyB3UmVnRXhwKCdeKEJMT0NLUVVPVEV8UFJFfFRBQkxFfFRIRUFEfFRCT0RZfFRSfFRIfFREfE9MfFVMfElNR3xJRlJBTUV8VklERU98QVVESU98RklHVVJFfEZJR0NBUFRJT058SFJ8QlJ8Q0FOVkFTfFNFTEVDVCkkJywgJ2knKTtcclxuICAgICAgICAgICAgY29uc3Qgd0RvYyA9IHR5cGVvZiBodG1sID09PSAnc3RyaW5nJyA/IF9kLmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpIDogaHRtbDtcclxuICAgICAgICAgICAgY29uc3QgaXNGb3JtYXQgPSBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc0NvbXBvbmVudChjdXJyZW50KTsgfS5iaW5kKHV0aWwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGluZGVudFNpemUgPSB0aGlzLl92YXJpYWJsZS5jb2RlSW5kZW50ICogMTtcclxuICAgICAgICAgICAgaW5kZW50U2l6ZSA9IGluZGVudFNpemUgPiAwID8gbmV3IF93LkFycmF5KGluZGVudFNpemUgKyAxKS5qb2luKCcgJykgOiAnJztcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jIChlbGVtZW50LCBpbmRlbnQsIGxpbmVCUikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50UmVnVGVzdCA9IGJyUmVnLnRlc3QoZWxlbWVudC5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SW5kZW50ID0gKGVsZW1lbnRSZWdUZXN0ID8gaW5kZW50IDogJycpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGgsIG5vZGUsIGJyLCBub2RlUmVnVGVzdCwgdGFnLCB0YWdJbmRlbnQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlUmVnVGVzdCA9IGJyUmVnLnRlc3Qobm9kZS5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnIgPSBub2RlUmVnVGVzdCA/ICdcXG4nIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZUJSID0gaXNGb3JtYXQobm9kZSkgJiYgIWVsZW1lbnRSZWdUZXN0ICYmICEvXihUSHxURCkkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSA/ICdcXG4nIDogJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkhUTUwgKz0gJ1xcbjwhLS0gJyArIG5vZGUudGV4dENvbnRlbnQudHJpbSgpICsgJyAtLT4nICsgYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0KG5vZGUucGFyZW50RWxlbWVudCkpIHJldHVybkhUTUwgKz0gdXRpbC5fSFRNTENvbnZlcnRvcigvXlxcbiskLy50ZXN0KG5vZGUuZGF0YSkgPyAnJyA6IG5vZGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5IVE1MICs9ICgvXkhSJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkgPyAnXFxuJyA6ICcnKSArICgvXlBSRSQvaS50ZXN0KG5vZGUucGFyZW50RWxlbWVudC5ub2RlTmFtZSkgJiYgL15CUiQvaS50ZXN0KG5vZGUubm9kZU5hbWUpID8gJycgOiBlbGVtZW50SW5kZW50KSArIG5vZGUub3V0ZXJIVE1MICsgYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm91dGVySFRNTCkgeyAvLyBJRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5IVE1MICs9IG5ldyBfdy5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJbmRlbnQgPSBlbGVtZW50SW5kZW50IHx8IG5vZGVSZWdUZXN0ID8gaW5kZW50IDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkhUTUwgKz0gKGxpbmVCUiB8fCAoZWxlbWVudFJlZ1Rlc3QgPyAnJyA6IGJyKSkgKyB0YWdJbmRlbnQgKyBub2RlLm91dGVySFRNTC5tYXRjaCh3UmVnRXhwKCc8JyArIHRhZyArICdbXj5dKj4nLCAnaScpKVswXSArIGJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKG5vZGUsIGluZGVudCArIGluZGVudFNpemUsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuSFRNTCArPSAoL1xcbiQvLnRlc3QocmV0dXJuSFRNTCkgPyB0YWdJbmRlbnQgOiAnJykgKyAnPC8nICsgdGFnICsgJz4nICsgKGxpbmVCUiB8fCBiciB8fCBlbGVtZW50UmVnVGVzdCA/ICdcXG4nIDogJycgfHwgL14oVEh8VEQpJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkgPyAnXFxuJyA6ICcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0od0RvYywgJycsICdcXG4nKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuSFRNTC50cmltKCkgKyAnXFxuJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkIGFuIGV2ZW50IHRvIGRvY3VtZW50LlxyXG4gICAgICAgICAqIFdoZW4gY3JlYXRlZCBhcyBhbiBJZnJhbWUsIHRoZSBzYW1lIGV2ZW50IGlzIGFkZGVkIHRvIHRoZSBkb2N1bWVudCBpbiB0aGUgSWZyYW1lLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIEV2ZW50IHR5cGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBFdmVudCBsaXN0ZW5lclxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdXNlQ2FwdHVyZSBVc2UgZXZlbnQgY2FwdHVyZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFkZERvY0V2ZW50OiBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcclxuICAgICAgICAgICAgX2QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIGV2ZW50cyBmcm9tIGRvY3VtZW50LlxyXG7CoCAgICAgICAgKiBXaGVuIGNyZWF0ZWQgYXMgYW4gSWZyYW1lLCB0aGUgZXZlbnQgb2YgdGhlIGRvY3VtZW50IGluc2lkZSB0aGUgSWZyYW1lIGlzIGFsc28gcmVtb3ZlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBFdmVudCB0eXBlXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgRXZlbnQgbGlzdGVuZXJcclxuICAgICAgICAgKi9cclxuICAgICAgICByZW1vdmVEb2NFdmVudDogZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgIF9kLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dkLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50IG51bWJlciBvZiBjaGFyYWN0ZXJzIGlzIGNvdW50ZWQgYW5kIGRpc3BsYXllZC5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRUZXh0IFRleHQgYWRkZWQuXHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2hhckNvdW50OiBmdW5jdGlvbiAoaW5wdXRUZXh0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heENoYXJDb3VudCA9IG9wdGlvbnMubWF4Q2hhckNvdW50O1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudFR5cGUgPSBvcHRpb25zLmNoYXJDb3VudGVyVHlwZTtcclxuICAgICAgICAgICAgbGV0IG5leHRDaGFyQ291bnQgPSAwO1xyXG4gICAgICAgICAgICBpZiAoISFpbnB1dFRleHQpIG5leHRDaGFyQ291bnQgPSB0aGlzLmdldENoYXJMZW5ndGgoaW5wdXRUZXh0LCBjb3VudFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2V0Q2hhckNvdW50KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobWF4Q2hhckNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG92ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZnVuY3Rpb25zLmdldENoYXJDb3VudChjb3VudFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENoYXJDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mZiA9IHJhbmdlLmVuZE9mZnNldCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKS50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2xpY2VQb3NpdGlvbiA9IHJhbmdlLmVuZE9mZnNldCAtIChjb3VudCAtIG1heENoYXJDb3VudCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCkudGV4dENvbnRlbnQgPSB0ZXh0LnNsaWNlKDAsIHNsaWNlUG9zaXRpb24gPCAwID8gMCA6IHNsaWNlUG9zaXRpb24pICsgdGV4dC5zbGljZShyYW5nZS5lbmRPZmZzZXQsIHRleHQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShyYW5nZS5lbmRDb250YWluZXIsIGVuZE9mZiwgcmFuZ2UuZW5kQ29udGFpbmVyLCBlbmRPZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvdW50ICsgbmV4dENoYXJDb3VudCkgPiBtYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3Zlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxDb3VudGVyQmxpbmsoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENoYXJDb3VudCA+IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFdoZW4gXCJlbGVtZW50XCIgaXMgYWRkZWQsIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiBcIm9wdGlvbnMubWF4Q2hhckNvdW50XCIsIGZhbHNlIGlzIHJldHVybmVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IGVsZW1lbnQgRWxlbWVudCBub2RlIG9yIFN0cmluZy5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xudWxsfSBjaGFyQ291bnRlclR5cGUgY2hhckNvdW50ZXJUeXBlLiBJZiBpdCBpcyBudWxsLCB0aGUgb3B0aW9ucy5jaGFyQ291bnRlclR5cGVcclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjaGVja0NoYXJDb3VudDogZnVuY3Rpb24gKGVsZW1lbnQsIGNoYXJDb3VudGVyVHlwZSkge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50VHlwZSA9IGNoYXJDb3VudGVyVHlwZSB8fCBvcHRpb25zLmNoYXJDb3VudGVyVHlwZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuZ2V0Q2hhckxlbmd0aCgodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6ICh0aGlzLl9jaGFyVHlwZUhUTUwgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkgPyBlbGVtZW50Lm91dGVySFRNTCA6IGVsZW1lbnQudGV4dENvbnRlbnQpLCBjb3VudFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDAgJiYgbGVuZ3RoICsgZnVuY3Rpb25zLmdldENoYXJDb3VudChjb3VudFR5cGUpID4gb3B0aW9ucy5tYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsQ291bnRlckJsaW5rKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY29udGVudC5cclxuICAgICAgICAgKiBEZXBlbmRpbmcgb24gdGhlIG9wdGlvbiwgdGhlIGxlbmd0aCBvZiB0aGUgY2hhcmFjdGVyIGlzIHRha2VuLiAoY2hhckNvdW50ZXJUeXBlKVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50IENvbnRlbnQgdG8gY291bnRcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2hhckNvdW50ZXJUeXBlIG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlXHJcbiAgICAgICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRDaGFyTGVuZ3RoOiBmdW5jdGlvbiAoY29udGVudCwgY2hhckNvdW50ZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAvYnl0ZS8udGVzdChjaGFyQ291bnRlclR5cGUpID8gdXRpbC5nZXRCeXRlTGVuZ3RoKGNvbnRlbnQpIDogY29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCB0aGUgY2hhciBjb3VudCB0byBjaGFyQ291bnRlciBlbGVtZW50IHRleHRDb250ZW50LlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldENoYXJDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50LmNoYXJDb3VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgY29udGV4dC5lbGVtZW50LmNoYXJDb3VudGVyLnRleHRDb250ZW50ID0gZnVuY3Rpb25zLmdldENoYXJDb3VudChvcHRpb25zLmNoYXJDb3VudGVyVHlwZSk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBjaGFyYWN0ZXIgY291bnRlciBibGlua3MuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2FsbENvdW50ZXJCbGluazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFyV3JhcHBlciA9IGNvbnRleHQuZWxlbWVudC5jaGFyV3JhcHBlcjtcclxuICAgICAgICAgICAgaWYgKGNoYXJXcmFwcGVyICYmICF1dGlsLmhhc0NsYXNzKGNoYXJXcmFwcGVyLCAnc2UtYmxpbmsnKSkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjaGFyV3JhcHBlciwgJ3NlLWJsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNoYXJXcmFwcGVyLCAnc2UtYmxpbmsnKTtcclxuICAgICAgICAgICAgICAgIH0sIDYwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIGNvbXBvbmVudHMgc3VjaCBhcyBpbWFnZSBhbmQgdmlkZW8gYW5kIG1vZGlmeSB0aGVtIGFjY29yZGluZyB0byB0aGUgZm9ybWF0LlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NoZWNrQ29tcG9uZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZmlsZUluZm9QbHVnaW5zQ2hlY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVJbmZvUGx1Z2luc0NoZWNrW2ldKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZSB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGNvbXBvbmVudHMuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfcmVzZXRDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9maWxlSW5mb1BsdWdpbnNSZXNldC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zUmVzZXRbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgbWV0aG9kIGluIHRoZSBjb2RlIHZpZXcgYXJlYVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSBIVE1MIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldENvZGVWaWV3OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yLmdldERvYygpLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0IG1ldGhvZCBpbiB0aGUgY29kZSB2aWV3IGFyZWFcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9nZXRDb2RlVmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yID8gb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yLmdldERvYygpLmdldFZhbHVlKCkgOiBjb250ZXh0LmVsZW1lbnQuY29kZS52YWx1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6IGNvcmUgdmFyaWFibGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbG9hZCBJcyByZWxvb2FkP1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgaW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2luaXQ6IGZ1bmN0aW9uIChyZWxvYWQsIF9pbml0SFRNTCkge1xyXG4gICAgICAgICAgICBjb25zdCB3UmVnRXhwID0gX3cuUmVnRXhwO1xyXG4gICAgICAgICAgICB0aGlzLl93dyA9IG9wdGlvbnMuaWZyYW1lID8gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5jb250ZW50V2luZG93IDogX3c7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkID0gX2Q7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYXJUeXBlSFRNTCA9IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlID09PSAnYnl0ZS1odG1sJztcclxuXHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZnJhbWUgJiYgdHlwZW9mIF93LlNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc2hhZG93Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGFkb3dSb290ID0gY2hpbGQuc2hhZG93Um9vdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIF93LlNoYWRvd1Jvb3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93Um9vdCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoYWRvd1Jvb3QpIHRoaXMuX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IGRpc2FsbG93IHRleHQgbm9kZXNcclxuICAgICAgICAgICAgY29uc3QgZGlzYWxsb3dUZXh0VGFncyA9IF93Lk9iamVjdC5rZXlzKG9wdGlvbnMuX3RleHRUYWdzTWFwKTtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3dUZXh0VGFncyA9ICFvcHRpb25zLmFkZFRhZ3NXaGl0ZWxpc3QgPyBbXSA6IG9wdGlvbnMuYWRkVGFnc1doaXRlbGlzdC5zcGxpdCgnfCcpLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gL2J8aXxpbnN8c3xzdHJpa2UvaS50ZXN0KHYpOyB9KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxvd1RleHRUYWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBkaXNhbGxvd1RleHRUYWdzLnNwbGljZShkaXNhbGxvd1RleHRUYWdzLmluZGV4T2YoYWxsb3dUZXh0VGFnc1tpXS50b0xvd2VyQ2FzZSgpKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwID0gZGlzYWxsb3dUZXh0VGFncy5sZW5ndGggPT09IDAgPyBudWxsIDogbmV3IHdSZWdFeHAoJyg8XFxcXC8/KSgnICsgZGlzYWxsb3dUZXh0VGFncy5qb2luKCd8JykgKyAnKVxcXFxiXFxcXHMqKD86W14+XjxdKyk/XFxcXHMqKD89PiknLCAnZ2knKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHNldCB3aGl0ZWxpc3RcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEF0dHIgPSAnY29udGVudGVkaXRhYmxlfGlkfGNvbHNwYW58cm93c3Bhbnx0YXJnZXR8aHJlZnxkb3dubG9hZHxyZWx8c3JjfGFsdHxjbGFzc3x0eXBlfGNvbnRyb2xzfGRhdGEtZm9ybWF0fGRhdGEtc2l6ZXxkYXRhLWZpbGUtc2l6ZXxkYXRhLWZpbGUtbmFtZXxkYXRhLW9yaWdpbnxkYXRhLWFsaWdufGRhdGEtaW1hZ2UtbGlua3xkYXRhLXJvdGF0ZXxkYXRhLXByb3BvcnRpb258ZGF0YS1wZXJjZW50YWdlfG9yaWdpbi1zaXplfGRhdGEtZXhwfGRhdGEtZm9udC1zaXplJztcclxuICAgICAgICAgICAgdGhpcy5fYWxsb3dIVE1MQ29tbWVudHMgPSBvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0LmluZGV4T2YoJy8vJykgPiAtMTtcclxuICAgICAgICAgICAgdGhpcy5faHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwID0gbmV3IHdSZWdFeHAoJ14oJyArIG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QucmVwbGFjZSgnfC8vJywgJycpICsgJykkJywgJ2knKTtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3JUYWdzV2hpdGVsaXN0UmVnRXhwID0gdXRpbC5jcmVhdGVUYWdzV2hpdGVsaXN0KG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QucmVwbGFjZSgnfC8vJywgJ3w8IS0tfC0tPicpKTtcclxuICAgICAgICAgICAgdGhpcy5wYXN0ZVRhZ3NXaGl0ZWxpc3RSZWdFeHAgPSB1dGlsLmNyZWF0ZVRhZ3NXaGl0ZWxpc3Qob3B0aW9ucy5wYXN0ZVRhZ3NXaGl0ZWxpc3QpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVnRW5kU3RyID0gJ1xcXFxzKj1cXFxccyooXFxcIilbXlxcXCJdKlxcXFwxJztcclxuICAgICAgICAgICAgY29uc3QgX2F0dHIgPSBvcHRpb25zLmF0dHJpYnV0ZXNXaGl0ZWxpc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ3NBdHRyID0ge307XHJcbiAgICAgICAgICAgIGxldCBhbGxBdHRyID0gJyc7XHJcbiAgICAgICAgICAgIGlmICghIV9hdHRyKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIF9hdHRyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmhhc093bihfYXR0ciwgaykpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrID09PSAnYWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxBdHRyID0gX2F0dHJba10gKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnc0F0dHJba10gPSBuZXcgd1JlZ0V4cCgnKD86JyArIF9hdHRyW2tdICsgJ3wnICsgZGVmYXVsdEF0dHIgKyAnKScgKyByZWdFbmRTdHIsICdpZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc1doaXRlbGlzdFJlZ0V4cCA9IG5ldyB3UmVnRXhwKCcoPzonICsgYWxsQXR0ciArIGRlZmF1bHRBdHRyICsgJyknICsgcmVnRW5kU3RyLCAnaWcnKTtcclxuICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc1RhZ3NXaGl0ZWxpc3QgPSB0YWdzQXR0cjtcclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBtb2Rlc1xyXG4gICAgICAgICAgICB0aGlzLl9pc0lubGluZSA9IC9pbmxpbmUvaS50ZXN0KG9wdGlvbnMubW9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzQmFsbG9vbiA9IC9iYWxsb29ufGJhbGxvb24tYWx3YXlzL2kudGVzdChvcHRpb25zLm1vZGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0JhbGxvb25BbHdheXMgPSAvYmFsbG9vbi1hbHdheXMvaS50ZXN0KG9wdGlvbnMubW9kZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBjYWNoaW5nIGJ1dHRvbnNcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGluZ0J1dHRvbnMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZpbGUgY29tcG9uZW50c1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNDaGVjayA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNSZXNldCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gdGV4dCBjb21wb25lbnRzXHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlZFRhZ3NJbmZvID0geyBxdWVyeTogJycsIG1hcDoge30gfTtcclxuICAgICAgICAgICAgY29uc3QgbWFuYWdlZENsYXNzID0gW107XHJcblxyXG4gICAgICAgICAgICAvLyBDb21tYW5kIGFuZCBmaWxlIHBsdWdpbnMgcmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUGx1Z2lucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTWFuYWdlci50YWdzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnBsdWdpbk1hcCA9IHt9O1xyXG5cclxuICAgICAgICAgICAgbGV0IGZpbGVQbHVnaW5SZWdFeHAgPSBbXTtcclxuICAgICAgICAgICAgbGV0IHBsdWdpbiwgYnV0dG9uO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gcGx1Z2lucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmhhc093bihwbHVnaW5zLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbnNba2V5XTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbiA9IHBsdWdpbkNhbGxCdXR0b25zW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLmFjdGl2ZSAmJiBidXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4uY2hlY2tGaWxlSW5mbyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcGx1Z2luLnJlc2V0RmlsZUluZm8gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVJbmZvUGx1Z2luc0NoZWNrLnB1c2gocGx1Z2luLmNoZWNrRmlsZUluZm8uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zUmVzZXQucHVzaChwbHVnaW4ucmVzZXRGaWxlSW5mby5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChfdy5BcnJheS5pc0FycmF5KHBsdWdpbi5maWxlVGFncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGFncyA9IHBsdWdpbi5maWxlVGFncztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oa2V5LCBudWxsLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnRhZ3MgPSB0aGlzLl9maWxlTWFuYWdlci50YWdzLmNvbmNhdChmaWxlVGFncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVBsdWdpblJlZ0V4cC5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdGFnID0gMCwgdExlbiA9IGZpbGVUYWdzLmxlbmd0aDsgdGFnIDwgdExlbjsgdGFnKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luTWFwW2ZpbGVUYWdzW3RhZ10udG9Mb3dlckNhc2UoKV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5tYW5hZ2VkVGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSBwbHVnaW4ubWFuYWdlZFRhZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VkQ2xhc3MucHVzaCgnLicgKyBpbmZvLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW5hZ2VkVGFnc0luZm8ubWFwW2luZm8uY2xhc3NOYW1lXSA9IGluZm8ubWV0aG9kLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5ID0gbWFuYWdlZENsYXNzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnF1ZXJ5U3RyaW5nID0gdGhpcy5fZmlsZU1hbmFnZXIudGFncy5qb2luKCcsJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnJlZ0V4cCA9IG5ldyB3UmVnRXhwKCdeKCcgKyAgdGhpcy5fZmlsZU1hbmFnZXIudGFncy5qb2luKCd8JykgKyAnKSQnLCAnaScpO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5SZWdFeHAgPSBuZXcgd1JlZ0V4cCgnXignICsgIChmaWxlUGx1Z2luUmVnRXhwLmxlbmd0aCA9PT0gMCA/ICd1bmRlZmluZWQnIDogZmlsZVBsdWdpblJlZ0V4cC5qb2luKCd8JykpICsgJykkJywgJ2knKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNhY2hlIGVkaXRvcidzIGVsZW1lbnRcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX29yaWdpbkNzc1RleHQgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IGNvbnRleHQuZWxlbWVudC5wbGFjZWhvbGRlcjtcclxuICAgICAgICAgICAgdGhpcy5fbGluZUJyZWFrZXIgPSBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXI7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpbmVCcmVha2VyQnV0dG9uID0gdGhpcy5fbGluZUJyZWFrZXIucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBFeGN1dGUgaGlzdG9yeSBmdW5jdGlvblxyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkgPSBfaGlzdG9yeSh0aGlzLCB0aGlzLl9vbkNoYW5nZV9oaXN0b3J5U3RhY2suYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICAvLyByZWdpc3RlciBub3RpY2UgbW9kdWxlXHJcbiAgICAgICAgICAgIHRoaXMuYWRkTW9kdWxlKFtfbm90aWNlXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBJbml0LCB2YWxpZGF0ZVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dkID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZyA9IHRoaXMuX3dkLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5fZWRpdG9yU3R5bGVzLmVkaXRvcikgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJykgdGhpcy5faWZyYW1lQXV0byA9IHRoaXMuX3dkLmJvZHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRXeXNpd3lnQXJlYShyZWxvYWQsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhY2hpbmcgYmFzaWMgYnV0dG9ucyB0byB1c2VcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jYWNoaW5nQnV0dG9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29kZVZpZXdEaXNhYmxlZEJ1dHRvbnMgPSBjb250ZXh0LmVsZW1lbnQuX2J1dHRvblRyYXkucXVlcnlTZWxlY3RvckFsbCgnLnNlLW1lbnUtbGlzdCBidXR0b25bZGF0YS1kaXNwbGF5XTpub3QoW2NsYXNzfj1cInNlLWNvZGUtdmlldy1lbmFibGVkXCJdKScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ0Rpc2FibGVkQnV0dG9ucyA9IGNvbnRleHQuZWxlbWVudC5fYnV0dG9uVHJheS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtbWVudS1saXN0IGJ1dHRvbltkYXRhLWRpc3BsYXldOm5vdChbY2xhc3N+PVwic2UtcmVzaXppbmctZW5hYmxlZFwiXSk6bm90KFtkYXRhLWRpc3BsYXk9XCJNT1JFXCJdKScpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdG9vbCA9IGNvbnRleHQudG9vbDtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwID0ge1xyXG4gICAgICAgICAgICAgICAgU1VCOiB0b29sLnN1YnNjcmlwdCxcclxuICAgICAgICAgICAgICAgIFNVUDogdG9vbC5zdXBlcnNjcmlwdCxcclxuICAgICAgICAgICAgICAgIE9VVERFTlQ6IHRvb2wub3V0ZGVudCxcclxuICAgICAgICAgICAgICAgIElOREVOVDogdG9vbC5pbmRlbnRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwW29wdGlvbnMudGV4dFRhZ3MuYm9sZC50b1VwcGVyQ2FzZSgpXSA9IHRvb2wuYm9sZDtcclxuICAgICAgICAgICAgdGhpcy5jb21tYW5kTWFwW29wdGlvbnMudGV4dFRhZ3MudW5kZXJsaW5lLnRvVXBwZXJDYXNlKCldID0gdG9vbC51bmRlcmxpbmU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZE1hcFtvcHRpb25zLnRleHRUYWdzLml0YWxpYy50b1VwcGVyQ2FzZSgpXSA9IHRvb2wuaXRhbGljO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRNYXBbb3B0aW9ucy50ZXh0VGFncy5zdHJpa2UudG9VcHBlckNhc2UoKV0gPSB0b29sLnN0cmlrZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlQ29tbWFuZE1hcCA9IHtcclxuICAgICAgICAgICAgICAgIGZ1bGxTY3JlZW46IHRvb2wuZnVsbFNjcmVlbixcclxuICAgICAgICAgICAgICAgIHNob3dCbG9ja3M6IHRvb2wuc2hvd0Jsb2NrcyxcclxuICAgICAgICAgICAgICAgIGNvZGVWaWV3OiB0b29sLmNvZGVWaWV3XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpeiB3eXNpd3lnIGFyZWEgKE9ubHkgY2FsbGVkIGZyb20gY29yZS5faW5pdClcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbG9hZCBJcyByZWxvb2FkP1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgaW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2luaXRXeXNpd3lnQXJlYTogZnVuY3Rpb24gKHJlbG9hZCwgX2luaXRIVE1MKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmlubmVySFRNTCA9IHJlbG9hZCA/IF9pbml0SFRNTCA6IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKHR5cGVvZiBfaW5pdEhUTUwgPT09ICdzdHJpbmcnID8gX2luaXRIVE1MIDogY29udGV4dC5lbGVtZW50Lm9yaWdpbkVsZW1lbnQudmFsdWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byB0YWdzIGluIHRoZSB3eXNpd3lnIHJlZ2lvbi5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9yZXNvdXJjZXNTdGF0ZUNoYW5nZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pZnJhbWVBdXRvSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrUGxhY2Vob2xkZXIoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gYWZ0ZXIgZXhlY3V0ZSBcImhpc3RvcnkucHVzaFwiXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfb25DaGFuZ2VfaGlzdG9yeVN0YWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LnRvb2wuc2F2ZSkgY29udGV4dC50b29sLnNhdmUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbnMub25DaGFuZ2UpIGZ1bmN0aW9ucy5vbkNoYW5nZSh0aGlzLmdldENvbnRlbnRzKHRydWUpLCB0aGlzKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC50b29sYmFyLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb24oKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTW9kaWZ5IHRoZSBoZWlnaHQgdmFsdWUgb2YgdGhlIGlmcmFtZSB3aGVuIHRoZSBoZWlnaHQgb2YgdGhlIGlmcmFtZSBpcyBhdXRvbWF0aWMuXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaWZyYW1lQXV0b0hlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faWZyYW1lQXV0bykge1xyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0ID0gY29yZS5faWZyYW1lQXV0by5vZmZzZXRIZWlnaHQgKyAncHgnOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgZGlzcGxheSBwcm9wZXJ0eSB3aGVuIHRoZXJlIGlzIHBsYWNlaG9sZGVyLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NoZWNrUGxhY2Vob2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFyaWFibGUuaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uod3lzaXd5Zy50ZXh0Q29udGVudCkgfHwgd3lzaXd5Zy5xdWVyeVNlbGVjdG9yKHV0aWwuX2FsbG93ZWRFbXB0eU5vZGVMaXN0KSB8fCAod3lzaXd5Zy5pbm5lclRleHQubWF0Y2goL1xcbi9nKSB8fCAnJykubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRoZXJlIGlzIG5vIGRlZmF1bHQgZm9ybWF0LCBhZGQgYSBmb3JtYXQgYW5kIG1vdmUgXCJzZWxlY3Rpb25cIi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xudWxsfSBmb3JtYXROYW1lIEZvcm1hdCB0YWcgbmFtZSAoZGVmYXVsdDogJ1AnKVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldERlZmF1bHRGb3JtYXQ6IGZ1bmN0aW9uIChmb3JtYXROYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5SZWdFeHAudGVzdCh0aGlzLmN1cnJlbnRDb250cm9sbGVyTmFtZSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjb21tb25Db24gPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2VFbCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGNvbW1vbkNvbiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGxldCBmb2N1c05vZGUsIG9mZnNldCwgZm9ybWF0O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChjb21tb25Db24sIHV0aWwuaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudCAmJiAhdXRpbC5pc1RhYmxlKGZpbGVDb21wb25lbnQpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmKCh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHN0YXJ0Q29uKSB8fCB1dGlsLmlzV3lzaXd5Z0RpdihzdGFydENvbikpICYmICh1dGlsLmlzQ29tcG9uZW50KHN0YXJ0Q29uLmNoaWxkcmVuW3JhbmdlLnN0YXJ0T2Zmc2V0XSkgfHwgdXRpbC5pc0NvbXBvbmVudChzdGFydENvbi5jaGlsZHJlbltyYW5nZS5zdGFydE9mZnNldCAtIDFdKSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmIChyYW5nZUVsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoZm9ybWF0TmFtZSB8fCBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgZm9ybWF0LmlubmVySFRNTCA9IHJhbmdlRWwuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgZm9ybWF0LmlubmVySFRNTCA9IHV0aWwuemVyb1dpZHRoU3BhY2U7XHJcblxyXG4gICAgICAgICAgICAgICAgcmFuZ2VFbC5pbm5lckhUTUwgPSBmb3JtYXQub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gcmFuZ2VFbC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gdXRpbC5nZXRFZGdlQ2hpbGROb2Rlcyhmb3JtYXQsIG51bGwpLnNjO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQuaW5zZXJ0QmVmb3JlKGZvY3VzTm9kZSwgZm9ybWF0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBmb2N1c05vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShmb2N1c05vZGUsIG9mZnNldCwgZm9jdXNOb2RlLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZih1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGNvbW1vbkNvbikgJiYgKGNvbW1vbkNvbi5jaGlsZE5vZGVzLmxlbmd0aCA8PSAxKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChjb21tb25Db24uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgJiYgdXRpbC5pc0JyZWFrKGNvbW1vbkNvbi5maXJzdENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyID0gY29tbW9uQ29uLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25Db24uYXBwZW5kQ2hpbGQoYnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoYnIsIDEsIGJyLCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5leGVjQ29tbWFuZCgnZm9ybWF0QmxvY2snLCBmYWxzZSwgKGZvcm1hdE5hbWUgfHwgb3B0aW9ucy5kZWZhdWx0VGFnKSk7XHJcbiAgICAgICAgICAgIGZvY3VzTm9kZSA9IHV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMoY29tbW9uQ29uLCBjb21tb25Db24pO1xyXG4gICAgICAgICAgICBmb2N1c05vZGUgPSBmb2N1c05vZGUgPyBmb2N1c05vZGUuZWMgOiBjb21tb25Db247XHJcblxyXG4gICAgICAgICAgICBmb3JtYXQgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoZm9jdXNOb2RlLCBudWxsKTtcclxuICAgICAgICAgICAgaWYgKCFmb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsoZm9ybWF0Lm5leHRTaWJsaW5nKSkgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdC5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsoZm9ybWF0LnByZXZpb3VzU2libGluZykpIHV0aWwucmVtb3ZlSXRlbShmb3JtYXQucHJldmlvdXNTaWJsaW5nKTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhmb2N1c05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6ZXJvV2lkdGggPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHplcm9XaWR0aCwgZm9jdXNOb2RlKTtcclxuICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IHplcm9XaWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXphdGlvbiBhZnRlciBcInNldE9wdGlvbnNcIlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlbCBjb250ZXh0LmVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gX2luaXRIVE1MIEluaXRpYWwgaHRtbCBzdHJpbmdcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRPcHRpb25zSW5pdDogZnVuY3Rpb24gKGVsLCBfaW5pdEhUTUwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCA9IF9Db250ZXh0KGVsLm9yaWdpbkVsZW1lbnQsIHRoaXMuX2dldENvbnN0cnVjdGVkKGVsKSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudHNJbmZvUmVzZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9lZGl0b3JJbml0KHRydWUsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpeiBlZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbG9hZCBJcyByZWxvb2FkP1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgaW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2VkaXRvckluaXQ6IGZ1bmN0aW9uIChyZWxvYWQsIF9pbml0SFRNTCkge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIGNvcmUgYW5kIGFkZCBldmVudCBsaXN0ZW5lcnNcclxuICAgICAgICAgICAgdGhpcy5faW5pdChyZWxvYWQsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9hZGRFdmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRDaGFyQ291bnQoKTtcclxuICAgICAgICAgICAgZXZlbnQuX29mZlN0aWNreVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgZXZlbnQub25SZXNpemVfd2luZG93KCk7XHJcblxyXG4gICAgICAgICAgICAvLyB0b29sYmFyIHZpc2liaWxpdHlcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudHNJbmZvSW5pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRzSW5mb1Jlc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucmVzZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlc1N0YXRlQ2hhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9ubG9hZCA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9ubG9hZChjb3JlLCByZWxvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGFuZCByZXR1cm4gYW4gb2JqZWN0IHRvIGNhY2hlIHRoZSBuZXcgY29udGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRFbCBjb250ZXh0LmVsZW1lbnRcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2dldENvbnN0cnVjdGVkOiBmdW5jdGlvbiAoY29udGV4dEVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBfdG9wOiBjb250ZXh0RWwudG9wQXJlYSxcclxuICAgICAgICAgICAgICAgIF9yZWxhdGl2ZTogY29udGV4dEVsLnJlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgX3Rvb2xCYXI6IGNvbnRleHRFbC50b29sYmFyLFxyXG4gICAgICAgICAgICAgICAgX21lbnVUcmF5OiBjb250ZXh0RWwuX21lbnVUcmF5LFxyXG4gICAgICAgICAgICAgICAgX2VkaXRvckFyZWE6IGNvbnRleHRFbC5lZGl0b3JBcmVhLFxyXG4gICAgICAgICAgICAgICAgX3d5c2l3eWdBcmVhOiBjb250ZXh0RWwud3lzaXd5Z0ZyYW1lLFxyXG4gICAgICAgICAgICAgICAgX2NvZGVBcmVhOiBjb250ZXh0RWwuY29kZSxcclxuICAgICAgICAgICAgICAgIF9wbGFjZWhvbGRlcjogY29udGV4dEVsLnBsYWNlaG9sZGVyLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6aW5nQmFyOiBjb250ZXh0RWwucmVzaXppbmdCYXIsXHJcbiAgICAgICAgICAgICAgICBfbmF2aWdhdGlvbjogY29udGV4dEVsLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICBfY2hhckNvdW50ZXI6IGNvbnRleHRFbC5jaGFyQ291bnRlcixcclxuICAgICAgICAgICAgICAgIF9jaGFyV3JhcHBlcjogY29udGV4dEVsLmNoYXJXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgX2xvYWRpbmc6IGNvbnRleHRFbC5sb2FkaW5nLFxyXG4gICAgICAgICAgICAgICAgX2xpbmVCcmVha2VyOiBjb250ZXh0RWwubGluZUJyZWFrZXIsXHJcbiAgICAgICAgICAgICAgICBfbGluZUJyZWFrZXJfdDogY29udGV4dEVsLmxpbmVCcmVha2VyX3QsXHJcbiAgICAgICAgICAgICAgICBfbGluZUJyZWFrZXJfYjogY29udGV4dEVsLmxpbmVCcmVha2VyX2IsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXplQmFjazogY29udGV4dEVsLnJlc2l6ZUJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBfc3RpY2t5RHVtbXk6IGNvbnRleHRFbC5fc3RpY2t5RHVtbXksXHJcbiAgICAgICAgICAgICAgICBfYXJyb3c6IGNvbnRleHRFbC5fYXJyb3dcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGV2ZW50IGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICAgIF9JRWlzQ29tcG9zaW5nOiBmYWxzZSwgLy8gSW4gSUUsIHRoZXJlIGlzIG5vIFwiZS5pc0NvbXBvc2luZ1wiIGluIHRoZSBrZXktdXAgZXZlbnQuXHJcbiAgICAgICAgX2xpbmVCcmVha2VyQmluZDogbnVsbCxcclxuICAgICAgICBfcmVzcG9uc2l2ZUN1cnJlbnRTaXplOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25TaXplOiBudWxsLFxyXG4gICAgICAgIF9yZXNwb25zaXZlQnV0dG9uczogbnVsbCxcclxuICAgICAgICBfZGlyZWN0aW9uS2V5Q29kZTogbmV3IF93LlJlZ0V4cCgnXig4fDEzfDNbMi05XXw0MHw0NikkJyksXHJcbiAgICAgICAgX25vblRleHRLZXlDb2RlOiBuZXcgX3cuUmVnRXhwKCdeKDh8MTN8MVs2LTldfDIwfDI3fDNbMy05XXw0MHw0NXw0NnwxMVsyLTldfDEyWzAtM118MTQ0fDE0NSkkJyksXHJcbiAgICAgICAgX2hpc3RvcnlJZ25vcmVLZXlDb2RlOiBuZXcgX3cuUmVnRXhwKCdeKDFbNi05XXwyMHwyN3wzWzMtOV18NDB8NDV8MTFbMi05XXwxMlswLTNdfDE0NHwxNDUpJCcpLFxyXG4gICAgICAgIF9vbkJ1dHRvbnNDaGVjazogbmV3IF93LlJlZ0V4cCgnXignICsgX3cuT2JqZWN0LmtleXMob3B0aW9ucy5fdGV4dFRhZ3NNYXApLmpvaW4oJ3wnKSArICcpJCcsICdpJyksXHJcbiAgICAgICAgX2Zyb250WmVyb1dpZHRoUmVnOiBuZXcgX3cuUmVnRXhwKHV0aWwuemVyb1dpZHRoU3BhY2UgKyAnKycsICcnKSxcclxuICAgICAgICBfa2V5Q29kZVNob3J0Y3V0OiB7XHJcbiAgICAgICAgICAgIDY1OiAnQScsXHJcbiAgICAgICAgICAgIDY2OiAnQicsXHJcbiAgICAgICAgICAgIDgzOiAnUycsXHJcbiAgICAgICAgICAgIDg1OiAnVScsXHJcbiAgICAgICAgICAgIDczOiAnSScsXHJcbiAgICAgICAgICAgIDg5OiAnWScsXHJcbiAgICAgICAgICAgIDkwOiAnWicsXHJcbiAgICAgICAgICAgIDIxOTogJ1snLFxyXG4gICAgICAgICAgICAyMjE6ICddJ1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zaG9ydGN1dENvbW1hbmQ6IGZ1bmN0aW9uIChrZXlDb2RlLCBzaGlmdCkge1xyXG4gICAgICAgICAgICBsZXQgY29tbWFuZCA9IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleVN0ciA9IGV2ZW50Ll9rZXlDb2RlU2hvcnRjdXRba2V5Q29kZV07XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGtleVN0cikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdzZWxlY3RBbGwnO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQic6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdib2xkJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAnYm9sZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0ICYmIG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdzdHJpa2UnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdzdHJpa2UnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNoaWZ0ICYmIG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdzYXZlJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAnc2F2ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCd1bmRlcmxpbmUnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICd1bmRlcmxpbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0knOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignaXRhbGljJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAnaXRhbGljJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdaJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3VuZG8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3JlZG8nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICd1bmRvJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1knOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kbycpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3JlZG8nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1snOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignaW5kZW50JykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBvcHRpb25zLnJ0bCA/ICdpbmRlbnQnIDogJ291dGRlbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ10nOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignaW5kZW50JykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBvcHRpb25zLnJ0bCA/ICdvdXRkZW50JyA6ICdpbmRlbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBjb3JlLmNvbW1hbmRIYW5kbGVyKGNvcmUuY29tbWFuZE1hcFtjb21tYW5kXSwgY29tbWFuZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9hcHBseVRhZ0VmZmVjdHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk5vZGUgPT09IGNvcmUuZWZmZWN0Tm9kZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb3JlLmVmZmVjdE5vZGUgPSBzZWxlY3Rpb25Ob2RlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWFyZ2luRGlyID0gb3B0aW9ucy5ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnO1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTWFwID0gY29yZS5jb21tYW5kTWFwO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc09uQ2hlY2sgPSB0aGlzLl9vbkJ1dHRvbnNDaGVjaztcclxuICAgICAgICAgICAgY29uc3QgY29tbWFuZE1hcE5vZGVzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlUGx1Z2lucyA9IGNvcmUuYWN0aXZlUGx1Z2lucztcclxuICAgICAgICAgICAgY29uc3QgY0xlbiA9IGFjdGl2ZVBsdWdpbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgbm9kZU5hbWUgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChzZWxlY3Rpb25Ob2RlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk5vZGUgPSBzZWxlY3Rpb25Ob2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW1lbnQgPSBzZWxlY3Rpb25Ob2RlOyAhdXRpbC5pc1d5c2l3eWdEaXYoZWxlbWVudCk7IGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudCkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSAhPT0gMSB8fCB1dGlsLmlzQnJlYWsoZWxlbWVudCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZXMucHVzaChub2RlTmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLyogQWN0aXZlIHBsdWdpbnMgKi9cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBuYW1lOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGFjdGl2ZVBsdWdpbnNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRNYXBOb2Rlcy5pbmRleE9mKG5hbWUpID09PSAtMSAmJiBwbHVnaW5zW25hbWVdLmFjdGl2ZS5jYWxsKGNvcmUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXBOb2Rlcy5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvKiBPdXRkZW50ICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRNYXBOb2Rlcy5pbmRleE9mKCdPVVRERU5UJykgPT09IC0xICYmIGNvbW1hbmRNYXAuT1VUREVOVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGVsZW1lbnQpIHx8IChlbGVtZW50LnN0eWxlW21hcmdpbkRpcl0gJiYgdXRpbC5nZXROdW1iZXIoZWxlbWVudC5zdHlsZVttYXJnaW5EaXJdLCAwKSA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwTm9kZXMucHVzaCgnT1VUREVOVCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5PVVRERU5ULnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLyogSW5kZW50ICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRNYXBOb2Rlcy5pbmRleE9mKCdJTkRFTlQnKSA9PT0gLTEgJiYgY29tbWFuZE1hcC5JTkRFTlQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcE5vZGVzLnB1c2goJ0lOREVOVCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGVsZW1lbnQpICYmICFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXAuSU5ERU5ULnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXAuSU5ERU5ULnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIGRlZmF1bHQgYWN0aXZlIGJ1dHRvbnMgW3N0cm9uZywgaW5zLCBlbSwgZGVsLCBzdWIsIHN1cF0gKi9cclxuICAgICAgICAgICAgICAgIGlmIChjbGFzc09uQ2hlY2sudGVzdChub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwTm9kZXMucHVzaChub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjb21tYW5kTWFwW25vZGVOYW1lXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIGNsYXNzLCBkaXNwbGF5IHRleHQgKi9cclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbW1hbmRNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kTWFwTm9kZXMuaW5kZXhPZihrZXkpID4gLTEgfHwgIXV0aWwuaGFzT3duKGNvbW1hbmRNYXAsIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVBsdWdpbnMuaW5kZXhPZihrZXkpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW5zW2tleV0uYWN0aXZlLmNhbGwoY29yZSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRNYXAuT1VUREVOVCAmJiAvXk9VVERFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5PVVRERU5ULnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZE1hcC5JTkRFTlQgJiYgL15JTkRFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5JTkRFTlQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvbW1hbmRNYXBba2V5XSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogc2F2ZSBjdXJyZW50IG5vZGVzICovXHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLmN1cnJlbnROb2RlcyA9IGN1cnJlbnROb2Rlcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLmN1cnJlbnROb2Rlc01hcCA9IGNvbW1hbmRNYXBOb2RlcztcclxuXHJcbiAgICAgICAgICAgIC8qKiAgRGlzcGxheXMgdGhlIGN1cnJlbnQgbm9kZSBzdHJ1Y3R1cmUgdG8gcmVzaXppbmdCYXIgKi9cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd1BhdGhMYWJlbCkgY29udGV4dC5lbGVtZW50Lm5hdmlnYXRpb24udGV4dENvbnRlbnQgPSBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXMuam9pbignID4gJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NhbmNlbENhcHRpb25FZGl0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIGV2ZW50Ll9jYW5jZWxDYXB0aW9uRWRpdCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2J1dHRvbnNFdmVudEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2JpbmRDb250cm9sbGVyc09mZikgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICgvXihpbnB1dHx0ZXh0YXJlYXxzZWxlY3R8b3B0aW9uKSQvaS50ZXN0KHRhcmdldC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX2FudGlCbHVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmdldFBhcmVudEVsZW1lbnQodGFyZ2V0LCAnLnNlLXN1Ym1lbnUnKSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuX25vdEhpZGVUb29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCFjb21tYW5kICYmICEvc2UtbWVudS1saXN0Ly50ZXN0KGNsYXNzTmFtZSkgJiYgIS9zdW4tZWRpdG9yLWNvbW1vbi8udGVzdChjbGFzc05hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IHRhcmdldC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kID09PSBjb3JlLl9zdWJtZW51TmFtZSB8fCBjb21tYW5kID09PSBjb3JlLl9jb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ2xpY2tfdG9vbGJhcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICBsZXQgZGlzcGxheSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzcGxheScpO1xyXG4gICAgICAgICAgICBsZXQgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5wYXJlbnROb2RlICYmICFjb21tYW5kICYmICEvc2UtbWVudS1saXN0Ly50ZXN0KGNsYXNzTmFtZSkgJiYgIS9zZS10b29sYmFyLy50ZXN0KGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzcGxheScpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21tYW5kICYmICFkaXNwbGF5KSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFjb3JlLmhhc0ZvY3VzKSBjb3JlLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldykgY29yZS5fZWRpdG9yUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuYWN0aW9uQ2FsbChjb21tYW5kLCBkaXNwbGF5LCB0YXJnZXQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uTW91c2VEb3duX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzTm9uRWRpdGFibGUoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uTW91c2VEb3duID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbk1vdXNlRG93bihlLCBjb3JlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQ2VsbCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChlLnRhcmdldCwgdXRpbC5pc0NlbGwpO1xyXG4gICAgICAgICAgICBpZiAodGFibGVDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IGNvcmUucGx1Z2lucy50YWJsZTtcclxuICAgICAgICAgICAgICAgIGlmICh0YWJsZVBsdWdpbiAmJiB0YWJsZUNlbGwgIT09IHRhYmxlUGx1Z2luLl9maXhlZENlbGwgJiYgIXRhYmxlUGx1Z2luLl9zaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuY2FsbFBsdWdpbigndGFibGUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm9uVGFibGVDZWxsTXVsdGlTZWxlY3QuY2FsbChjb3JlLCB0YWJsZUNlbGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbikge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgvRklHVVJFL2kudGVzdChlLnRhcmdldC5ub2RlTmFtZSkpIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkNsaWNrX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNOb25FZGl0YWJsZShjb250ZXh0LmVsZW1lbnQud3lzaXd5ZykpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25DbGljayA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbnMub25DbGljayhlLCBjb3JlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnRJbmZvID0gY29yZS5nZXRGaWxlQ29tcG9uZW50KHRhcmdldEVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2VsZWN0Q29tcG9uZW50KGZpbGVDb21wb25lbnRJbmZvLnRhcmdldCwgZmlsZUNvbXBvbmVudEluZm8ucGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZ2NhcHRpb24gPSB1dGlsLmdldFBhcmVudEVsZW1lbnQodGFyZ2V0RWxlbWVudCwgJ0ZJR0NBUFRJT04nKTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNOb25FZGl0YWJsZShmaWdjYXB0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZmlnY2FwdGlvbi5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgZmlnY2FwdGlvbi5mb2N1cygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLl9pc0lubGluZSAmJiAhY29yZS5faW5saW5lVG9vbGJhckF0dHIuaXNTaG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFySW5saW5lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGVUb29sYmFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlnY2FwdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgaGlkZVRvb2xiYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZpZ2NhcHRpb24uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGhpZGVUb29sYmFyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChjb3JlLl9lZGl0b3JSYW5nZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29yZS5fZWRpdG9yUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuICAgICAgICAgICAgaWYgKCghZm9ybWF0RWwgfHwgZm9ybWF0RWwgPT09IHJhbmdlRWwpICYmICF1dGlsLmlzTm9uRWRpdGFibGUodGFyZ2V0RWxlbWVudCkgJiYgIXV0aWwuaXNMaXN0KHJhbmdlRWwpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIpID09PSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2UuZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdChyYW5nZUVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9MaSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnTEknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkxpID0gc2VsZWN0aW9uTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9MaS5hcHBlbmRDaGlsZChzZWxlY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5pbnNlcnRCZWZvcmUob0xpLCBwcmV2TGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdXRpbC5pc1d5c2l3eWdEaXYoc2VsZWN0aW9uTm9kZSkgJiYgIXV0aWwuaXNDb21wb25lbnQoc2VsZWN0aW9uTm9kZSkgJiYgKCF1dGlsLmlzVGFibGUoc2VsZWN0aW9uTm9kZSkgfHwgdXRpbC5pc0NlbGwoc2VsZWN0aW9uTm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5fc2V0RGVmYXVsdEZvcm1hdCh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbikgX3cuc2V0VGltZW91dChldmVudC5fdG9nZ2xlVG9vbGJhckJhbGxvb24pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9iYWxsb29uRGVsYXk6IG51bGwsXHJcbiAgICAgICAgX3Nob3dUb29sYmFyQmFsbG9vbkRlbGF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5fYmFsbG9vbkRlbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBfdy5jbGVhclRpbWVvdXQoZXZlbnQuX2JhbGxvb25EZWxheSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGV2ZW50Ll9iYWxsb29uRGVsYXkgPSBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF93LmNsZWFyVGltZW91dCh0aGlzLl9iYWxsb29uRGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYmFsbG9vbkRlbGF5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgICAgICB9LmJpbmQoZXZlbnQpLCAzNTApO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF90b2dnbGVUb29sYmFyQmFsbG9vbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2JpbmRDb250cm9sbGVyc09mZiB8fCAoIWNvcmUuX2lzQmFsbG9vbkFsd2F5cyAmJiByYW5nZS5jb2xsYXBzZWQpKSBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgZWxzZSBldmVudC5fc2hvd1Rvb2xiYXJCYWxsb29uKHJhbmdlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2hvd1Rvb2xiYXJCYWxsb29uOiBmdW5jdGlvbiAocmFuZ2VPYmopIHtcclxuICAgICAgICAgICAgaWYgKCFjb3JlLl9pc0JhbGxvb24pIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gcmFuZ2VPYmogfHwgY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyID0gY29udGV4dC5lbGVtZW50LnRvb2xiYXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcEFyZWEgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29yZS5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpc0RpclRvcDtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbkFsd2F5cyAmJiByYW5nZS5jb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgIGlzRGlyVG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBzZWxlY3Rpb24uYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaXNEaXJUb3AgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHV0aWwuZ2V0TGlzdENoaWxkTm9kZXMocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaXNEaXJUb3AgPSB1dGlsLmdldEFycmF5SW5kZXgoY2hpbGROb2Rlcywgc2VsZWN0aW9uLmZvY3VzTm9kZSkgPCB1dGlsLmdldEFycmF5SW5kZXgoY2hpbGROb2Rlcywgc2VsZWN0aW9uLmFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xyXG4gICAgICAgICAgICByZWN0cyA9IHJlY3RzW2lzRGlyVG9wID8gMCA6IHJlY3RzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ2xvYmFsU2Nyb2xsID0gY29yZS5nZXRHbG9iYWxTY3JvbGxPZmZzZXQoKTtcclxuICAgICAgICAgICAgbGV0IHNjcm9sbExlZnQgPSBnbG9iYWxTY3JvbGwubGVmdDtcclxuICAgICAgICAgICAgbGV0IHNjcm9sbFRvcCA9IGdsb2JhbFNjcm9sbC50b3A7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JXaWR0aCA9IHRvcEFyZWEub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBldmVudC5fZ2V0RWRpdG9yT2Zmc2V0cyhudWxsKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RpY2t5VG9wID0gb2Zmc2V0cy50b3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckxlZnQgPSBvZmZzZXRzLmxlZnQ7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLnRvcCA9ICctMTAwMDBweCc7XHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyZWN0cykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmluc2VydE5vZGUoemVyb1dpZHRoLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZSh6ZXJvV2lkdGgsIDEsIHplcm9XaWR0aCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICByZWN0cyA9IGNvcmUuZ2V0UmFuZ2UoKS5nZXRDbGllbnRSZWN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RzID0gcmVjdHNbaXNEaXJUb3AgPyAwIDogcmVjdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFyZWN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVPZmZzZXQgPSB1dGlsLmdldE9mZnNldChub2RlLCBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZWN0cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogbm9kZU9mZnNldC5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IG5vZGVPZmZzZXQudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogbm9kZU9mZnNldC5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3R0b206IG5vZGVPZmZzZXQudG9wICsgbm9kZS5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vVGV4dDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpc0RpclRvcCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFycm93TWFyZ2luID0gX3cuTWF0aC5yb3VuZChjb250ZXh0LmVsZW1lbnQuX2Fycm93Lm9mZnNldFdpZHRoIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IHRvb2xiYXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJIZWlnaHQgPSB0b29sYmFyLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgaWZyYW1lUmVjdHMgPSAvaWZyYW1lL2kudGVzdChjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLm5vZGVOYW1lKSA/IGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuZ2V0Q2xpZW50UmVjdHMoKVswXSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChpZnJhbWVSZWN0cykge1xyXG4gICAgICAgICAgICAgICAgcmVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogcmVjdHMubGVmdCArIGlmcmFtZVJlY3RzLmxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiByZWN0cy50b3AgKyBpZnJhbWVSZWN0cy50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IHJlY3RzLnJpZ2h0ICsgaWZyYW1lUmVjdHMucmlnaHQgLSBpZnJhbWVSZWN0cy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206IHJlY3RzLmJvdHRvbSArIGlmcmFtZVJlY3RzLmJvdHRvbSAtIGlmcmFtZVJlY3RzLmhlaWdodFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZXZlbnQuX3NldFRvb2xiYXJPZmZzZXQoaXNEaXJUb3AsIHJlY3RzLCB0b29sYmFyLCBlZGl0b3JMZWZ0LCBlZGl0b3JXaWR0aCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBzdGlja3lUb3AsIGFycm93TWFyZ2luKTtcclxuICAgICAgICAgICAgaWYgKHRvb2xiYXJXaWR0aCAhPT0gdG9vbGJhci5vZmZzZXRXaWR0aCB8fCB0b29sYmFySGVpZ2h0ICE9PSB0b29sYmFyLm9mZnNldEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX3NldFRvb2xiYXJPZmZzZXQoaXNEaXJUb3AsIHJlY3RzLCB0b29sYmFyLCBlZGl0b3JMZWZ0LCBlZGl0b3JXaWR0aCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBzdGlja3lUb3AsIGFycm93TWFyZ2luKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yUGFyZW50ID0gdG9wQXJlYS5wYXJlbnRFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBvcHRpb25zLnRvb2xiYXJDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGVmdCA9IGNvbnRhaW5lci5vZmZzZXRMZWZ0O1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvcCA9IGNvbnRhaW5lci5vZmZzZXRUb3A7XHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUoIWNvbnRhaW5lci5wYXJlbnRFbGVtZW50LmNvbnRhaW5zKGVkaXRvclBhcmVudCkgfHwgIS9eKEJPRFl8SFRNTCkkL2kudGVzdChjb250YWluZXIucGFyZW50RWxlbWVudC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gY29udGFpbmVyLm9mZnNldExlZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wICs9IGNvbnRhaW5lci5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5sZWZ0ID0gKHRvb2xiYXIub2Zmc2V0TGVmdCAtIGxlZnQgKyB0b3BBcmVhLm9mZnNldExlZnQpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudG9wID0gKHRvb2xiYXIub2Zmc2V0VG9wIC0gdG9wICsgdG9wQXJlYS5vZmZzZXRUb3ApICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldFRvb2xiYXJPZmZzZXQ6IGZ1bmN0aW9uIChpc0RpclRvcCwgcmVjdHMsIHRvb2xiYXIsIGVkaXRvckxlZnQsIGVkaXRvcldpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHN0aWNreVRvcCwgYXJyb3dNYXJnaW4pIHtcclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IHRvb2xiYXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJIZWlnaHQgPSByZWN0cy5ub1RleHQgJiYgIWlzRGlyVG9wID8gMCA6IHRvb2xiYXIub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVMZWZ0ID0gKGlzRGlyVG9wID8gcmVjdHMubGVmdCA6IHJlY3RzLnJpZ2h0KSAtIGVkaXRvckxlZnQgLSAodG9vbGJhcldpZHRoIC8gMikgKyBzY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgICBjb25zdCBvdmVyUmlnaHQgPSBhYnNvbHV0ZUxlZnQgKyB0b29sYmFyV2lkdGggLSBlZGl0b3JXaWR0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0ID0gKGlzRGlyVG9wID8gcmVjdHMudG9wIC0gdG9vbGJhckhlaWdodCAtIGFycm93TWFyZ2luIDogcmVjdHMuYm90dG9tICsgYXJyb3dNYXJnaW4pIC0gKHJlY3RzLm5vVGV4dCA/IDAgOiBzdGlja3lUb3ApICsgc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICBsZXQgbCA9IGFic29sdXRlTGVmdCA8IDAgPyBwYWRkaW5nIDogb3ZlclJpZ2h0IDwgMCA/IGFic29sdXRlTGVmdCA6IGFic29sdXRlTGVmdCAtIG92ZXJSaWdodCAtIHBhZGRpbmcgLSAxO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlc2V0VG9wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlID0gdCArIChpc0RpclRvcCA/IChldmVudC5fZ2V0RWRpdG9yT2Zmc2V0cyhudWxsKS50b3ApIDogKHRvb2xiYXIub2Zmc2V0SGVpZ2h0IC0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcub2Zmc2V0SGVpZ2h0KSk7XHJcbiAgICAgICAgICAgIGlmICghaXNEaXJUb3AgJiYgc3BhY2UgPiAwICYmIGV2ZW50Ll9nZXRQYWdlQm90dG9tU3BhY2UoKSA8IHNwYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RpclRvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXNldFRvcCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEaXJUb3AgJiYgX2QuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFRvcCA+IHNwYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RpclRvcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVzZXRUb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzZXRUb3ApIHQgPSAoaXNEaXJUb3AgPyByZWN0cy50b3AgLSB0b29sYmFySGVpZ2h0IC0gYXJyb3dNYXJnaW4gOiByZWN0cy5ib3R0b20gKyBhcnJvd01hcmdpbikgLSAocmVjdHMubm9UZXh0ID8gMCA6IHN0aWNreVRvcCkgKyBzY3JvbGxUb3A7XHJcblxyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLmxlZnQgPSBfdy5NYXRoLmZsb29yKGwpICsgJ3B4JztcclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS50b3AgPSBfdy5NYXRoLmZsb29yKHQpICsgJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc0RpclRvcCkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0LmVsZW1lbnQuX2Fycm93LCAnc2UtYXJyb3ctdXAnKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY29udGV4dC5lbGVtZW50Ll9hcnJvdywgJ3NlLWFycm93LWRvd24nKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fYXJyb3cuc3R5bGUudG9wID0gdG9vbGJhckhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvbnRleHQuZWxlbWVudC5fYXJyb3csICdzZS1hcnJvdy1kb3duJyk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGNvbnRleHQuZWxlbWVudC5fYXJyb3csICdzZS1hcnJvdy11cCcpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9hcnJvdy5zdHlsZS50b3AgPSAtYXJyb3dNYXJnaW4gKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhcnJvd19sZWZ0ID0gX3cuTWF0aC5mbG9vcigodG9vbGJhcldpZHRoIC8gMikgKyAoYWJzb2x1dGVMZWZ0IC0gbCkpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX2Fycm93LnN0eWxlLmxlZnQgPSAoYXJyb3dfbGVmdCArIGFycm93TWFyZ2luID4gdG9vbGJhci5vZmZzZXRXaWR0aCA/IHRvb2xiYXIub2Zmc2V0V2lkdGggLSBhcnJvd01hcmdpbiA6IGFycm93X2xlZnQgPCBhcnJvd01hcmdpbiA/IGFycm93TWFyZ2luIDogYXJyb3dfbGVmdCkgKyAncHgnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zaG93VG9vbGJhcklubGluZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIWNvcmUuX2lzSW5saW5lKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyID0gY29udGV4dC5lbGVtZW50LnRvb2xiYXI7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIHRvb2xiYXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgICAgICBlbHNlIHRvb2xiYXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGNvcmUuX2lubGluZVRvb2xiYXJBdHRyLndpZHRoID0gdG9vbGJhci5zdHlsZS53aWR0aCA9IG9wdGlvbnMudG9vbGJhcldpZHRoO1xyXG4gICAgICAgICAgICBjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci50b3AgPSB0b29sYmFyLnN0eWxlLnRvcCA9IChvcHRpb25zLnRvb2xiYXJDb250YWluZXIgPyAwIDogKC0xIC0gdG9vbGJhci5vZmZzZXRIZWlnaHQpKSArICdweCc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5zaG93SW5saW5lID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMuc2hvd0lubGluZSh0b29sYmFyLCBjb250ZXh0LCBjb3JlKTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50Lm9uU2Nyb2xsX3dpbmRvdygpO1xyXG4gICAgICAgICAgICBjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci5pc1Nob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaGlkZVRvb2xiYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFjb3JlLl9ub3RIaWRlVG9vbGJhciAmJiAhY29yZS5fdmFyaWFibGUuaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgY29yZS5faW5saW5lVG9vbGJhckF0dHIuaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbklucHV0X3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uSW5wdXQgPT09ICdmdW5jdGlvbicgJiYgZnVuY3Rpb25zLm9uSW5wdXQoZSwgY29yZSkgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gKGUuZGF0YSA9PT0gbnVsbCA/ICcnIDogZS5kYXRhID09PSB1bmRlZmluZWQgPyAnICcgOiBlLmRhdGEpIHx8ICcnOyAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFjb3JlLl9jaGFyQ291bnQoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2lzVW5lZGl0YWJsZU5vZGU6IGZ1bmN0aW9uIChyYW5nZSwgaXNGcm9udCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBpc0Zyb250ID8gcmFuZ2Uuc3RhcnRDb250YWluZXIgOiByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGlzRnJvbnQgPyByYW5nZS5zdGFydE9mZnNldCA6IHJhbmdlLmVuZE9mZnNldDtcclxuICAgICAgICAgICAgY29uc3Qgc2libGluZ0tleSA9IGlzRnJvbnQgPyAncHJldmlvdXNTaWJsaW5nJyA6ICduZXh0U2libGluZyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMTtcclxuICAgICAgICAgICAgbGV0IHNpYmxpbmdOb2RlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgc2libGluZ05vZGUgPSBldmVudC5faXNVbmVkaXRhYmxlTm9kZV9nZXRTaWJsaW5nKGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldF0sIHNpYmxpbmdLZXksIGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZ05vZGUgJiYgc2libGluZ05vZGUubm9kZVR5cGUgPT09IDEgJiYgc2libGluZ05vZGUuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmdOb2RlID0gZXZlbnQuX2lzVW5lZGl0YWJsZU5vZGVfZ2V0U2libGluZyhjb250YWluZXIsIHNpYmxpbmdLZXksIGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5pc0VkZ2VQb2ludChjb250YWluZXIsIG9mZnNldCwgaXNGcm9udCA/ICdmcm9udCcgOiAnZW5kJykgJiYgKHNpYmxpbmdOb2RlICYmIHNpYmxpbmdOb2RlLm5vZGVUeXBlID09PSAxICYmIHNpYmxpbmdOb2RlLmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICdmYWxzZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2lzVW5lZGl0YWJsZU5vZGVfZ2V0U2libGluZzogZnVuY3Rpb24gKHNlbGVjdE5vZGUsIHNpYmxpbmdLZXksIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBpZiAoIXNlbGVjdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc2libGluZ05vZGUgPSBzZWxlY3ROb2RlW3NpYmxpbmdLZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFzaWJsaW5nTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgc2libGluZ05vZGUgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmdOb2RlID0gc2libGluZ05vZGUgPyBzaWJsaW5nTm9kZVtzaWJsaW5nS2V5XSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2libGluZ05vZGUgJiYgIXV0aWwuaXNDb21wb25lbnQoc2libGluZ05vZGUpKSBzaWJsaW5nTm9kZSA9IHNpYmxpbmdLZXkgPT09ICdwcmV2aW91c1NpYmxpbmcnID8gc2libGluZ05vZGUuZmlyc3RFbGVtZW50Q2hpbGQgOiBzaWJsaW5nTm9kZS5sYXN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdOb2RlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vblNob3J0Y3V0S2V5OiBmYWxzZSxcclxuICAgICAgICBvbktleURvd25fd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcclxuICAgICAgICAgICAgY29uc3Qgc2hpZnQgPSBlLnNoaWZ0S2V5O1xyXG4gICAgICAgICAgICBjb25zdCBjdHJsID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBrZXlDb2RlID09PSA5MSB8fCBrZXlDb2RlID09PSA5MiB8fCBrZXlDb2RlID09PSAyMjQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsdCA9IGUuYWx0S2V5O1xyXG4gICAgICAgICAgICBldmVudC5fSUVpc0NvbXBvc2luZyA9IGtleUNvZGUgPT09IDIyOTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuc3VibWVudU9mZigpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbikge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25LZXlEb3duID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbktleURvd24oZSwgY29yZSkgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvKiogU2hvcnRjdXRzICovXHJcbiAgICAgICAgICAgIGlmIChjdHJsICYmIGV2ZW50Ll9zaG9ydGN1dENvbW1hbmQoa2V5Q29kZSwgc2hpZnQpKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fb25TaG9ydGN1dEtleSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Ll9vblNob3J0Y3V0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fb25TaG9ydGN1dEtleSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogZGVmYXVsdCBrZXkgYWN0aW9uICovXHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Ob2RlID0gY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RSYW5nZSA9ICFyYW5nZS5jb2xsYXBzZWQgfHwgcmFuZ2Uuc3RhcnRDb250YWluZXIgIT09IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudE5hbWUgPSBjb3JlLl9maWxlTWFuYWdlci5wbHVnaW5SZWdFeHAudGVzdChjb3JlLmN1cnJlbnRDb250cm9sbGVyTmFtZSkgPyBjb3JlLmN1cnJlbnRDb250cm9sbGVyTmFtZSA6ICcnO1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCkgfHwgc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgbGV0IHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXRFbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgODogLyoqIGJhY2tzcGFjZSBrZXkgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUucGx1Z2luc1tmaWxlQ29tcG9uZW50TmFtZV0uZGVzdHJveS5jYWxsKGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RSYW5nZSAmJiBldmVudC5faGFyZERlbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNGb3JtYXRFbGVtZW50KGZvcm1hdEVsKSAmJiAhY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZmlyc3RFbGVtZW50Q2hpbGQgJiYgIXV0aWwuaXNDb21wb25lbnQoc2VsZWN0aW9uTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLl9zZXREZWZhdWx0Rm9ybWF0KG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0UmFuZ2UgJiYgIWZvcm1hdEVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgKHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwICYmICFzZWxlY3Rpb25Ob2RlLnByZXZpb3VzU2libGluZyAmJiAhdXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGZvcm1hdEVsKSAmJiAoIXV0aWwuaXNGcmVlRm9ybWF0RWxlbWVudChmb3JtYXRFbCkgfHwgdXRpbC5pc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudChmb3JtYXRFbCkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvc3VyZSByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Nsb3N1cmVSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFpbnRhaW4gZGVmYXVsdCBmb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KGZvcm1hdEVsLnBhcmVudE5vZGUpICYmIGZvcm1hdEVsLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEgJiYgKCFmb3JtYXRFbC5maXJzdENoaWxkIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsLnRleHRDb250ZW50KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG9wdGlvbnMuZGVmYXVsdFRhZy50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gZm9ybWF0RWwuYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXR0cnNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwucmVtb3ZlQXR0cmlidXRlKGF0dHJzWzBdLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKGRlZmF1bHRGb3JtYXQsIGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsZWFuIHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0RWwgJiYgcmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lciAmJiBzZWxlY3Rpb25Ob2RlLm5vZGVUeXBlID09PSAzICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQgPyBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMSA6IChyYW5nZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCkgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IHNlbGVjdGlvbk5vZGUucGFyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gc2VsZWN0aW9uTm9kZS5wYXJlbnROb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLmFwcGVuZENoaWxkKHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBuZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW1BbGxQYXJlbnRzKHNlbGVjdGlvbk5vZGUsIG51bGwsIGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInID8gb2Zmc2V0IDogcHJldi5ub2RlVHlwZSA9PT0gMyA/IHByZXYudGV4dENvbnRlbnQubGVuZ3RoIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UocHJldiwgb2Zmc2V0LCBwcmV2LCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRhZ1tjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5faXNVbmVkaXRhYmxlTm9kZShyYW5nZSwgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbW9uQ29uID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXRFbCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgZm9ybWF0RWwgJiYgIXV0aWwuaXNDZWxsKHJhbmdlRWwpICYmICEvXkZJR0NBUFRJT04kL2kudGVzdChyYW5nZUVsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdChyYW5nZUVsKSAmJiAodXRpbC5pc0xpc3RDZWxsKHJhbmdlRWwucGFyZW50Tm9kZSkgfHwgZm9ybWF0RWwucHJldmlvdXNFbGVtZW50U2libGluZykgJiYgKHNlbGVjdGlvbk5vZGUgPT09IGZvcm1hdEVsIHx8IChzZWxlY3Rpb25Ob2RlLm5vZGVUeXBlID09PSAzICYmICghc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcpKSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAodXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKSAhPT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLmVuZENvbnRhaW5lciwgbnVsbCkgPyByYW5nZUVsLmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSA6IChyYW5nZS5zdGFydE9mZnNldCA9PT0gMCAgJiYgcmFuZ2UuY29sbGFwc2VkKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciAhPT0gcmFuZ2UuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoLCByYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IGZvcm1hdEVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgcmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwocHJldikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZMYXN0ID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2LmNvbnRhaW5zKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdENlbGwocHJldkxhc3QpICYmIHV0aWwuaXNMaXN0KHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2TGFzdCA9IHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh1dGlsLmlzTGlzdENlbGwocHJldkxhc3QpICYmIHV0aWwuaXNMaXN0KHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkxhc3QgPSBwcmV2TGFzdC5sYXN0RWxlbWVudENoaWxkICYmIHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBwcmV2TGFzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbiA9IHByZXYgPT09IHJhbmdlRWwucGFyZW50Tm9kZSA/IHJhbmdlRWwucHJldmlvdXNTaWJsaW5nIDogcHJldi5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24gPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb24sIHJhbmdlRWwucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBjb24ubm9kZVR5cGUgPT09IDMgPyBjb24udGV4dENvbnRlbnQubGVuZ3RoIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmb3JtYXRFbC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWZ0ZXIgPSBjb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoaWxkID0gY2hpbGRyZW5bMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Lmluc2VydEJlZm9yZShjaGlsZCwgYWZ0ZXIubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB1dGlsLnJlbW92ZUl0ZW0ocmFuZ2VFbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGNvbiwgb2Zmc2V0LCBjb24sIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0YWNoIHJhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0UmFuZ2UgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXRhY2ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW0gPSBjb21tb25Db247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29tbSAmJiBjb21tICE9PSByYW5nZUVsICYmICF1dGlsLmlzV3lzaXd5Z0Rpdihjb21tKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tLnByZXZpb3VzU2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbS5wcmV2aW91c1NpYmxpbmcubm9kZVR5cGUgPT09IDEgfHwgIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGNvbW0ucHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50LnRyaW0oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbSA9IGNvbW0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFjaCAmJiByYW5nZUVsLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5kZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VFbCwgKHV0aWwuaXNMaXN0Q2VsbChmb3JtYXRFbCkgPyBbZm9ybWF0RWxdIDogbnVsbCksIG51bGwsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlICYmIGZvcm1hdEVsICYmIChyYW5nZS5zdGFydE9mZnNldCA9PT0gMCB8fCAoc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyAhIWZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIDogZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWwgPSBzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCA/IGZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIDogc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGZvcm1hdEVsLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGZpbGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZVpXUyA9IChjb21tb25Db24ubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKGNvbW1vbkNvbikpICYmICFjb21tb25Db24ucHJldmlvdXNTaWJsaW5nICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbC5wcmV2aW91c1NpYmxpbmcgJiYgKHV0aWwuaXNDb21wb25lbnQoY29tbW9uQ29uLnByZXZpb3VzU2libGluZykgfHwgKGlnbm9yZVpXUyAmJiB1dGlsLmlzQ29tcG9uZW50KHByZXYpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnRJbmZvID0gY29yZS5nZXRGaWxlQ29tcG9uZW50KHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVsLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKSA9PT0gZmFsc2UpIGNvcmUuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzQ29tcG9uZW50KHByZXYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIG5vbkVkaXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTm9uRWRpdGFibGUoc2VsLnByZXZpb3VzU2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oc2VsLnByZXZpb3VzU2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ2OiAvKiogZGVsZXRlIGtleSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUucGx1Z2luc1tmaWxlQ29tcG9uZW50TmFtZV0uZGVzdHJveS5jYWxsKGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RSYW5nZSAmJiBldmVudC5faGFyZERlbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0YWdbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuX2lzVW5lZGl0YWJsZU5vZGUocmFuZ2UsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1dGlsLmlzRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlKSB8fCBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nID09PSBudWxsIHx8ICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nKSAmJiBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nLm5leHRTaWJsaW5nID09PSBudWxsKSkgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0RWwgPSBmb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dEVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNDb21wb25lbnQobmV4dEVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShmb3JtYXRFbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZm9ybWF0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhYmxlIGNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzVGFibGUobmV4dEVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2VsbCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KG5leHRFbCwgdXRpbC5pc0NlbGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IGNlbGwuZmlyc3RFbGVtZW50Q2hpbGQgfHwgY2VsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShjZWxsLCAwLCBjZWxsLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBmaWxlIGNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudEluZm8gPSBjb3JlLmdldEZpbGVDb21wb25lbnQobmV4dEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmUuc2VsZWN0Q29tcG9uZW50KGZpbGVDb21wb25lbnRJbmZvLnRhcmdldCwgZmlsZUNvbXBvbmVudEluZm8ucGx1Z2luTmFtZSkgPT09IGZhbHNlKSBjb3JlLmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc0NvbXBvbmVudChuZXh0RWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0obmV4dEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZSAmJiAoY29yZS5pc0VkZ2VQb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCkgfHwgKHNlbGVjdGlvbk5vZGUgPT09IGZvcm1hdEVsID8gISFmb3JtYXRFbC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XSA6IGZhbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsID0gc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyBmb3JtYXRFbC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XSA6IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBub25FZGl0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc05vbkVkaXRhYmxlKHNlbC5uZXh0U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oc2VsLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZm9ybWF0RWwpICYmIHV0aWwuaXNMaXN0KHJhbmdlRWwpICYmIChzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCB8fCAoc2VsZWN0aW9uTm9kZS5ub2RlVHlwZSA9PT0gMyAmJiAoIXNlbGVjdGlvbk5vZGUubmV4dFNpYmxpbmcgfHwgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZykpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICh1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwpICE9PSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2UuZW5kQ29udGFpbmVyLCBudWxsKSA/IHJhbmdlRWwuY29udGFpbnMocmFuZ2UuZW5kQ29udGFpbmVyKSA6IChyYW5nZS5lbmRPZmZzZXQgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoICYmIHJhbmdlLmNvbGxhcHNlZCkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyICE9PSByYW5nZS5lbmRDb250YWluZXIpIGNvcmUucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSB1dGlsLmdldEFycmF5SXRlbShmb3JtYXRFbC5jaGlsZHJlbiwgdXRpbC5pc0xpc3QsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IG5leHQgfHwgZm9ybWF0RWwubmV4dEVsZW1lbnRTaWJsaW5nIHx8IHJhbmdlRWwucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmICh1dGlsLmlzTGlzdChuZXh0KSB8fCB1dGlsLmdldEFycmF5SXRlbShuZXh0LmNoaWxkcmVuLCB1dGlsLmlzTGlzdCwgZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb24sIGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KG5leHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBuZXh0LmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24gPSBjaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwuaW5zZXJ0QmVmb3JlKGNoaWxkcmVuWzBdLCBuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uID0gbmV4dC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gbmV4dC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRFbC5hcHBlbmRDaGlsZChjaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoY29uLCAwLCBjb24sIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLyoqIHRhYiBrZXkgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUgfHwgb3B0aW9ucy50YWJEaXNhYmxlKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0cmwgfHwgYWx0IHx8IHV0aWwuaXNXeXNpd3lnRGl2KHNlbGVjdGlvbk5vZGUpKSBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFZGdlID0gKCFyYW5nZS5jb2xsYXBzZWQgfHwgY29yZS5pc0VkZ2VQb2ludChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1hdHMgPSBjb3JlLmdldFNlbGVjdGVkRWxlbWVudHMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZjID0gdXRpbC5pc0xpc3RDZWxsKHNlbGVjdGVkRm9ybWF0c1swXSksIGxjID0gdXRpbC5pc0xpc3RDZWxsKHNlbGVjdGVkRm9ybWF0c1tzZWxlY3RlZEZvcm1hdHMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByID0ge3NjOiByYW5nZS5zdGFydENvbnRhaW5lciwgc286IHJhbmdlLnN0YXJ0T2Zmc2V0LCBlYzogcmFuZ2UuZW5kQ29udGFpbmVyLCBlbzogcmFuZ2UuZW5kT2Zmc2V0fTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCwgZjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxlY3RlZEZvcm1hdHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxscy5sZW5ndGggPiAwICYmIGlzRWRnZSAmJiBjb3JlLnBsdWdpbnMubGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gY29yZS5wbHVnaW5zLmxpc3QuZWRpdEluc2lkZUxpc3QuY2FsbChjb3JlLCBzaGlmdCwgY2VsbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlQ2VsbCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3Rpb25Ob2RlLCB1dGlsLmlzQ2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZUNlbGwgJiYgaXNFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YWJsZUNlbGwsICd0YWJsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB1dGlsLmdldExpc3RDaGlsZHJlbih0YWJsZSwgdXRpbC5pc0NlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkeCA9IHNoaWZ0ID8gdXRpbC5wcmV2SWR4KGNlbGxzLCB0YWJsZUNlbGwpIDogdXRpbC5uZXh0SWR4KGNlbGxzLCB0YWJsZUNlbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggPT09IGNlbGxzLmxlbmd0aCAmJiAhc2hpZnQpIGlkeCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSAtMSAmJiBzaGlmdCkgaWR4ID0gY2VsbHMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbW92ZUNlbGwgPSBjZWxsc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3ZlQ2VsbCkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlQ2VsbCA9IG1vdmVDZWxsLmZpcnN0RWxlbWVudENoaWxkIHx8IG1vdmVDZWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShtb3ZlQ2VsbCwgMCwgbW92ZUNlbGwsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KGNlbGxzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmMgPSBsYyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBMaW5lcyB0YWIoNClcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJUZXh0ID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShuZXcgX3cuQXJyYXkoY29yZS5fdmFyaWFibGUudGFiU2l6ZSArIDEpLmpvaW4oJ1xcdTAwQTAnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFJhbmdlID0gY29yZS5pbnNlcnROb2RlKHRhYlRleHQsIG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dFJhbmdlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnNjID0gdGFiVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zbyA9IHRleHRSYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5lYyA9IHRhYlRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZW8gPSB0ZXh0UmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuID0gbGluZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY2hpbGQ7IGkgPD0gbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBsaW5lc1tpXS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0uaW5zZXJ0QmVmb3JlKHRhYlRleHQuY2xvbmVOb2RlKGZhbHNlKSwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQudGV4dENvbnRlbnQgPSB0YWJUZXh0LnRleHRDb250ZW50ICsgY2hpbGQudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZXNbMF0sICd0ZXh0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENoaWxkID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZXNbbGVuXSwgJ3RleHQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZjICYmIGZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zYyA9IGZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc28gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxjICYmIGVuZENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZWMgPSBlbmRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5lbyA9IGVuZENoaWxkLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSBsaW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxpbmU7IGkgPD0gbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZXNbaV0uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGxpbmUubGVuZ3RoLCBjaGlsZDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGxpbmVbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY2hpbGQpKSBjb250aW51ZTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9eXFxzezEsNH0kLy50ZXN0KGNoaWxkLnRleHRDb250ZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXlxcc3sxLDR9Ly50ZXN0KGNoaWxkLnRleHRDb250ZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQudGV4dENvbnRlbnQgPSBjaGlsZC50ZXh0Q29udGVudC5yZXBsYWNlKC9eXFxzezEsNH0vLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVzWzBdLCAndGV4dCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENoaWxkID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZXNbbGVuXSwgJ3RleHQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmMgJiYgZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2MgPSBmaXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc28gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYyAmJiBlbmRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZWMgPSBlbmRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVvID0gZW5kQ2hpbGQudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKHIuc2MsIHIuc28sIHIuZWMsIHIuZW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEzOiAvKiogZW50ZXIga2V5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlZUZvcm1hdEVsID0gdXRpbC5nZXRGcmVlRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmUuX2NoYXJUeXBlSFRNTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50ZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIXNoaWZ0ICYmIGZyZWVGb3JtYXRFbCkgfHwgc2hpZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVySFRNTCA9ICc8JyArIGZvcm1hdEVsLm5vZGVOYW1lICsgJz48YnI+PC8nICsgZm9ybWF0RWwubm9kZU5hbWUgKyAnPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29yZS5jaGVja0NoYXJDb3VudChlbnRlckhUTUwsICdieXRlLWh0bWwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdElubmVycyA9IGNvcmUuX2lzRWRnZUZvcm1hdChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCwgJ2VuZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZvcm1hdElubmVycyAmJiAvXkhbMS02XSQvaS50ZXN0KGZvcm1hdEVsLm5vZGVOYW1lKSkgfHwgL15IUiQvaS50ZXN0KGZvcm1hdEVsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gY29yZS5hcHBlbmRGb3JtYXRUYWcoZm9ybWF0RWwsIG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdElubmVycyAmJiBmb3JtYXRJbm5lcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBmb3JtYXRJbm5lcnMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJOb2RlID0gdGVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShmb3JtYXRJbm5lcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcC5hcHBlbmRDaGlsZChmb3JtYXRJbm5lcnMucG9wKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQuYXBwZW5kQ2hpbGQoaW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gIXRlbXAgPyBuZXdGb3JtYXQuZmlyc3RDaGlsZCA6IHRlbXAuYXBwZW5kQ2hpbGQobmV3Rm9ybWF0LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZSh0ZW1wLCAwLCB0ZW1wLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZUZvcm1hdEVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Gb3JtYXQgPSBzZWxlY3Rpb25Ob2RlID09PSBmcmVlRm9ybWF0RWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3U2VsZWN0aW9uID0gY29yZS5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2VsZWN0aW9uTm9kZS5jaGlsZE5vZGVzLCBvZmZzZXQgPSB3U2VsZWN0aW9uLmZvY3VzT2Zmc2V0LCBwcmV2ID0gc2VsZWN0aW9uTm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLCBuZXh0ID0gc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZztcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzQ2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50KGZyZWVGb3JtYXRFbCkgJiYgISFjaGlsZHJlbiAmJiAoKHNlbGVjdGlvbkZvcm1hdCAmJiByYW5nZS5jb2xsYXBzZWQgJiYgY2hpbGRyZW4ubGVuZ3RoIC0gMSA8PSBvZmZzZXQgKyAxICYmIHV0aWwuaXNCcmVhayhjaGlsZHJlbltvZmZzZXRdKSAmJiAoIWNoaWxkcmVuW29mZnNldCArIDFdIHx8ICgoIWNoaWxkcmVuW29mZnNldCArIDJdIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKGNoaWxkcmVuW29mZnNldCArIDJdLnRleHRDb250ZW50KSkgJiYgY2hpbGRyZW5bb2Zmc2V0ICsgMV0ubm9kZVR5cGUgPT09IDMgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY2hpbGRyZW5bb2Zmc2V0ICsgMV0udGV4dENvbnRlbnQpKSkgJiYgIG9mZnNldCA+IDAgJiYgdXRpbC5pc0JyZWFrKGNoaWxkcmVuW29mZnNldCAtIDFdKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFzZWxlY3Rpb25Gb3JtYXQgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc2VsZWN0aW9uTm9kZS50ZXh0Q29udGVudCkgJiYgdXRpbC5pc0JyZWFrKHByZXYpICYmICh1dGlsLmlzQnJlYWsocHJldi5wcmV2aW91c1NpYmxpbmcpIHx8ICF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwcmV2LnByZXZpb3VzU2libGluZy50ZXh0Q29udGVudCkpICYmICghbmV4dCB8fCAoIXV0aWwuaXNCcmVhayhuZXh0KSAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShuZXh0LnRleHRDb250ZW50KSkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uRm9ybWF0KSB1dGlsLnJlbW92ZUl0ZW0oY2hpbGRyZW5bb2Zmc2V0IC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdXRpbC5yZW1vdmVJdGVtKHNlbGVjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gY29yZS5hcHBlbmRGb3JtYXRUYWcoZnJlZUZvcm1hdEVsLCB1dGlsLmlzRm9ybWF0RWxlbWVudChmcmVlRm9ybWF0RWwubmV4dEVsZW1lbnRTaWJsaW5nKSA/IGZyZWVGb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmcgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlGb3JtYXRBdHRyaWJ1dGVzKG5ld0VsLCBmcmVlRm9ybWF0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UobmV3RWwsIDEsIG5ld0VsLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5pbnNlcnRIVE1MKCgocmFuZ2UuY29sbGFwc2VkICYmIHV0aWwuaXNCcmVhayhyYW5nZS5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0IC0gMV0pKSA/ICc8YnI+JyA6ICc8YnI+PGJyPicpLCB0cnVlLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9jdXNOb2RlID0gd1NlbGVjdGlvbi5mb2N1c05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd09mZnNldCA9IHdTZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVGb3JtYXRFbCA9PT0gZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5jaGlsZE5vZGVzW3dPZmZzZXQgLSBvZmZzZXQgPiAxID8gd09mZnNldCAtIDEgOiB3T2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGZvY3VzTm9kZSwgMSwgZm9jdXNOb2RlLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNOZXh0ID0gd1NlbGVjdGlvbi5mb2N1c05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnROb2RlKGJyLCBudWxsLCBmYWxzZSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiclByZXYgPSBici5wcmV2aW91c1NpYmxpbmcsIGJyTmV4dCA9IGJyLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0JyZWFrKGZvY3VzTmV4dCkgJiYgIXV0aWwuaXNCcmVhayhiclByZXYpICYmICghYnJOZXh0IHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKGJyTmV4dCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJyLmNsb25lTm9kZShmYWxzZSksIGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShiciwgMSwgYnIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoYnJOZXh0LCAwLCBick5leHQsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX29uU2hvcnRjdXRLZXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RSYW5nZSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgZm9ybWF0RWwgJiYgIXV0aWwuaXNDZWxsKHJhbmdlRWwpICYmICEvXkZJR0NBUFRJT04kL2kudGVzdChyYW5nZUVsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29yZS5pc0VkZ2VQb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCkgJiYgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5hcHBlbmRDaGlsZChicik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3RWwsIGZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5hcHBlbmRDaGlsZChzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShiciwgMSwgYnIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IDMgPyAhcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nIDogdHJ1ZSkgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZm9ybWF0RWwuaW5uZXJUZXh0LnRyaW0oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdFbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChyYW5nZUVsLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbCA9IGZvcm1hdEVsLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gdXRpbC5zcGxpdEVsZW1lbnQoZm9ybWF0RWwsIG51bGwsIHV0aWwuZ2V0RWxlbWVudERlcHRoKGZvcm1hdEVsKSAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3RWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3TGlzdENlbGwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0xJJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpc3RDZWxsLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5pbnNlcnRCZWZvcmUobmV3TGlzdENlbGwsIG5ld0VsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSBuZXdMaXN0Q2VsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Zvcm1hdCA9IHV0aWwuaXNDZWxsKHJhbmdlRWwucGFyZW50Tm9kZSkgPyAnRElWJyA6IHV0aWwuaXNMaXN0KHJhbmdlRWwucGFyZW50Tm9kZSkgPyAnTEknIDogdXRpbC5pc0Zvcm1hdEVsZW1lbnQocmFuZ2VFbC5uZXh0RWxlbWVudFNpYmxpbmcpID8gcmFuZ2VFbC5uZXh0RWxlbWVudFNpYmxpbmcubm9kZU5hbWUgOiB1dGlsLmlzRm9ybWF0RWxlbWVudChyYW5nZUVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpID8gcmFuZ2VFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm5vZGVOYW1lIDogb3B0aW9ucy5kZWZhdWx0VGFnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gdXRpbC5jcmVhdGVFbGVtZW50KG5ld0Zvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRnZSA9IGNvcmUuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwsIFtmb3JtYXRFbF0sIG51bGwsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuY2MuaW5zZXJ0QmVmb3JlKG5ld0VsLCBlZGdlLmVjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5Rm9ybWF0QXR0cmlidXRlcyhuZXdFbCwgZm9ybWF0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhmb3JtYXRFbCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKG5ld0VsLCAxLCBuZXdFbCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgdXRpbC5nZXRQYXJlbnRFbGVtZW50KHJhbmdlRWwsICdGSUdDQVBUSU9OJykgJiYgdXRpbC5nZXRQYXJlbnRFbGVtZW50KHJhbmdlRWwsIHV0aWwuaXNMaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsID0gY29yZS5hcHBlbmRGb3JtYXRUYWcoZm9ybWF0RWwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGZvcm1hdEVsLCAwLCBmb3JtYXRFbCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wQ29udGV4dCA9IGNvbnRleHRbZmlsZUNvbXBvbmVudE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBjb21wQ29udGV4dC5fY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gY29udGFpbmVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdFbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoY29udGFpbmVyLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gdXRpbC5jcmVhdGVFbGVtZW50KHV0aWwuaXNGb3JtYXRFbGVtZW50KHNpYmxpbmcpID8gc2libGluZy5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdFbCwgY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuY2FsbFBsdWdpbihmaWxlQ29tcG9uZW50TmFtZSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmUuc2VsZWN0Q29tcG9uZW50KGNvbXBDb250ZXh0Ll9lbGVtZW50LCBmaWxlQ29tcG9uZW50TmFtZSkgPT09IGZhbHNlKSBjb3JlLmJsdXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzaGlmdCAmJiBrZXlDb2RlID09PSAxNikge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gY29yZS5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhYmxlUGx1Z2luICYmICF0YWJsZVBsdWdpbi5fc2hpZnQgJiYgIXRhYmxlUGx1Z2luLl9yZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGZvcm1hdEVsLCB1dGlsLmlzQ2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4ub25UYWJsZUNlbGxNdWx0aVNlbGVjdC5jYWxsKGNvcmUsIGNlbGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0ICYmICh1dGlsLmlzT1NYX0lPUyA/IGFsdCA6IGN0cmwpICYmIGtleUNvZGUgPT09IDMyKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmJzcCA9IGNvcmUuaW5zZXJ0Tm9kZSh1dGlsLmNyZWF0ZVRleHROb2RlKCdcXHUwMGEwJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ic3AgJiYgbmJzcC5jb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKG5ic3AuY29udGFpbmVyLCBuYnNwLmVuZE9mZnNldCwgbmJzcC5jb250YWluZXIsIG5ic3AuZW5kT2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRLZXkgPSAhY3RybCAmJiAhYWx0ICYmICFzZWxlY3RSYW5nZSAmJiAhZXZlbnQuX25vblRleHRLZXlDb2RlLnRlc3Qoa2V5Q29kZSk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0S2V5ICYmIHJhbmdlLmNvbGxhcHNlZCAmJiByYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHV0aWwuaXNCcmVhayhyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmluc2VydE5vZGUoemVyb1dpZHRoLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKHplcm9XaWR0aCwgMSwgemVyb1dpZHRoLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uS2V5VXBfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll9vblNob3J0Y3V0S2V5KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcclxuICAgICAgICAgICAgY29uc3QgY3RybCA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwga2V5Q29kZSA9PT0gOTEgfHwga2V5Q29kZSA9PT0gOTIgfHwga2V5Q29kZSA9PT0gMjI0O1xyXG4gICAgICAgICAgICBjb25zdCBhbHQgPSBlLmFsdEtleTtcclxuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb24gJiYgKChjb3JlLl9pc0JhbGxvb25BbHdheXMgJiYga2V5Q29kZSAhPT0gMjcpIHx8ICFyYW5nZS5jb2xsYXBzZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5faXNCYWxsb29uQWx3YXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleUNvZGUgIT09IDI3KSBldmVudC5fc2hvd1Rvb2xiYXJCYWxsb29uRGVsYXkoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbktleVVwID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbktleVVwKGUsIGNvcmUpID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLyoqIHdoZW4gZm9ybWF0IHRhZyBkZWxldGVkICovXHJcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSA4ICYmIHV0aWwuaXNXeXNpd3lnRGl2KHNlbGVjdGlvbk5vZGUpICYmIHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQgPT09ICcnICYmIHNlbGVjdGlvbk5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk5vZGUuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb0Zvcm1hdFRhZyA9IHV0aWwuY3JlYXRlRWxlbWVudCh1dGlsLmlzRm9ybWF0RWxlbWVudChjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXNbMF0pID8gY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzWzBdIDogb3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgIG9Gb3JtYXRUYWcuaW5uZXJIVE1MID0gJzxicj4nO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk5vZGUuYXBwZW5kQ2hpbGQob0Zvcm1hdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKG9Gb3JtYXRUYWcsIDAsIG9Gb3JtYXRUYWcsIDApO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuICAgICAgICAgICAgaWYgKCgoIWZvcm1hdEVsICYmIHJhbmdlLmNvbGxhcHNlZCkgfHwgZm9ybWF0RWwgPT09IHJhbmdlRWwpICYmICF1dGlsLmlzQ29tcG9uZW50KHNlbGVjdGlvbk5vZGUpICYmICF1dGlsLmlzTGlzdChzZWxlY3Rpb25Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fc2V0RGVmYXVsdEZvcm1hdCh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuX2RpcmVjdGlvbktleUNvZGUudGVzdChrZXlDb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX2FwcGx5VGFnRWZmZWN0cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZXh0S2V5ID0gIWN0cmwgJiYgIWFsdCAmJiAhZXZlbnQuX25vblRleHRLZXlDb2RlLnRlc3Qoa2V5Q29kZSk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0S2V5ICYmIHNlbGVjdGlvbk5vZGUubm9kZVR5cGUgPT09IDMgJiYgdXRpbC56ZXJvV2lkdGhSZWdFeHAudGVzdChzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50KSAmJiAhKGUuaXNDb21wb3NpbmcgIT09IHVuZGVmaW5lZCA/IGUuaXNDb21wb3NpbmcgOiBldmVudC5fSUVpc0NvbXBvc2luZykpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzbyA9IHJhbmdlLnN0YXJ0T2Zmc2V0LCBlbyA9IHJhbmdlLmVuZE9mZnNldDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZyb250WmVyb1dpZHRoQ250ID0gKHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIGVvKS5tYXRjaChldmVudC5fZnJvbnRaZXJvV2lkdGhSZWcpIHx8ICcnKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBzbyA9IHJhbmdlLnN0YXJ0T2Zmc2V0IC0gZnJvbnRaZXJvV2lkdGhDbnQ7XHJcbiAgICAgICAgICAgICAgICBlbyA9IHJhbmdlLmVuZE9mZnNldCAtIGZyb250WmVyb1dpZHRoQ250O1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTm9kZS50ZXh0Q29udGVudCA9IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQucmVwbGFjZSh1dGlsLnplcm9XaWR0aFJlZ0V4cCwgJycpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShzZWxlY3Rpb25Ob2RlLCBzbyA8IDAgPyAwIDogc28sIHNlbGVjdGlvbk5vZGUsIGVvIDwgMCA/IDAgOiBlbyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvcmUuX2NoYXJDb3VudCgnJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uU2Nyb2xsX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbikgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMub25TY3JvbGwoZSwgY29yZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25Gb2N1c193eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5fYW50aUJsdXIpIHJldHVybjtcclxuICAgICAgICAgICAgY29yZS5oYXNGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0lubGluZSkgZXZlbnQuX3Nob3dUb29sYmFySW5saW5lKCk7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uRm9jdXMgPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy5vbkZvY3VzKGUsIGNvcmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQmx1cl93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5fYW50aUJsdXIgfHwgY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldykgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb3JlLmhhc0ZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzSW5saW5lIHx8IGNvcmUuX2lzQmFsbG9vbikgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9uQmx1cihlLCBjb3JlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFjdGl2ZSBjbGFzcyByZXNldCBvZiBidXR0b25zXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRNYXAgPSBjb3JlLmNvbW1hbmRNYXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVBsdWdpbnMgPSBjb3JlLmFjdGl2ZVBsdWdpbnM7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBjb21tYW5kTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzT3duKGNvbW1hbmRNYXAsIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVBsdWdpbnMuaW5kZXhPZihrZXkpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBwbHVnaW5zW2tleV0uYWN0aXZlLmNhbGwoY29yZSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRNYXAuT1VUREVOVCAmJiAvXk9VVERFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5PVVRERU5ULnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZE1hcC5JTkRFTlQgJiYgL15JTkRFTlQkL2kudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5JTkRFTlQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvbW1hbmRNYXBba2V5XSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXMgPSBbXTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzTWFwID0gW107XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dQYXRoTGFiZWwpIGNvbnRleHQuZWxlbWVudC5uYXZpZ2F0aW9uLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25Nb3VzZURvd25fcmVzaXppbmdCYXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJldkhlaWdodCA9IHV0aWwuZ2V0TnVtYmVyKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0LCAwKTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUucmVzaXplQ2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlc2l6ZUJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9zdXJlRnVuYygpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5yZXNpemVCYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICBfZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudC5fcmVzaXplX2VkaXRvcik7XHJcbiAgICAgICAgICAgICAgICBfZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgY2xvc3VyZUZ1bmMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25SZXNpemVFZGl0b3IgPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy5vblJlc2l6ZUVkaXRvcih1dGlsLmdldE51bWJlcihjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnN0eWxlLmhlaWdodCwgMCksIHByZXZIZWlnaHQsIGNvcmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudC5fcmVzaXplX2VkaXRvcik7XHJcbiAgICAgICAgICAgIF9kLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBjbG9zdXJlRnVuYyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3Jlc2l6ZV9lZGl0b3I6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZUludGVydmFsID0gY29udGV4dC5lbGVtZW50LmVkaXRvckFyZWEub2Zmc2V0SGVpZ2h0ICsgKGUuY2xpZW50WSAtIGNvcmUuX3ZhcmlhYmxlLnJlc2l6ZUNsaWVudFkpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnN0eWxlLmhlaWdodCA9IGNvbnRleHQuZWxlbWVudC5jb2RlLnN0eWxlLmhlaWdodCA9IChyZXNpemVJbnRlcnZhbCA8IGNvcmUuX3ZhcmlhYmxlLm1pblJlc2l6aW5nU2l6ZSA/IGNvcmUuX3ZhcmlhYmxlLm1pblJlc2l6aW5nU2l6ZSA6IHJlc2l6ZUludGVydmFsKSArICdweCc7XHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLnJlc2l6ZUNsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25SZXNpemVfd2luZG93OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNpdmVTaXplID0gZXZlbnQuX3Jlc3BvbnNpdmVCdXR0b25TaXplO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2l2ZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIGxldCB3ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmICgoY29yZS5faXNCYWxsb29uIHx8IGNvcmUuX2lzSW5saW5lKSAmJiBvcHRpb25zLnRvb2xiYXJXaWR0aCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdyA9IGNvbnRleHQuZWxlbWVudC50b3BBcmVhLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB3ID0gY29udGV4dC5lbGVtZW50LnRvb2xiYXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNpdmVXaWR0aCA9ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxLCBsZW4gPSByZXNwb25zaXZlU2l6ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3IDwgcmVzcG9uc2l2ZVNpemVbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZVdpZHRoID0gcmVzcG9uc2l2ZVNpemVbaV0gKyAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5fcmVzcG9uc2l2ZUN1cnJlbnRTaXplICE9PSByZXNwb25zaXZlV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fcmVzcG9uc2l2ZUN1cnJlbnRTaXplID0gcmVzcG9uc2l2ZVdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5zZXRUb29sYmFyQnV0dG9ucyhldmVudC5fcmVzcG9uc2l2ZUJ1dHRvbnNbcmVzcG9uc2l2ZVdpZHRoXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQudG9vbGJhci5vZmZzZXRXaWR0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZmlsZUJyb3dzZXIgJiYgY29udGV4dC5maWxlQnJvd3Nlci5hcmVhLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIuYm9keS5zdHlsZS5tYXhIZWlnaHQgPSAoX3cuaW5uZXJIZWlnaHQgLSBjb250ZXh0LmZpbGVCcm93c2VyLmhlYWRlci5vZmZzZXRIZWlnaHQgLSA1MCkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5zdWJtZW51QWN0aXZlQnV0dG9uICYmIGNvcmUuc3VibWVudSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fc2V0TWVudVBvc2l0aW9uKGNvcmUuc3VibWVudUFjdGl2ZUJ1dHRvbiwgY29yZS5zdWJtZW51KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX3ZhcmlhYmxlLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuaW5uZXJIZWlnaHRfZnVsbFNjcmVlbiArPSAoX3cuaW5uZXJIZWlnaHQgLSBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5vZmZzZXRIZWlnaHQpIC0gY29yZS5fdmFyaWFibGUuaW5uZXJIZWlnaHRfZnVsbFNjcmVlbjtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5lZGl0b3JBcmVhLnN0eWxlLmhlaWdodCA9IGNvcmUuX3ZhcmlhYmxlLmlubmVySGVpZ2h0X2Z1bGxTY3JlZW4gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldyAmJiBjb3JlLl9pc0lubGluZSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFySW5saW5lKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvcmUuX2lmcmFtZUF1dG9IZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9zdGlja3kpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLnN0eWxlLndpZHRoID0gKGNvbnRleHQuZWxlbWVudC50b3BBcmVhLm9mZnNldFdpZHRoIC0gMikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQub25TY3JvbGxfd2luZG93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblNjcm9sbF93aW5kb3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX3ZhcmlhYmxlLmlzRnVsbFNjcmVlbiB8fCBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5vZmZzZXRXaWR0aCA9PT0gMCB8fCBvcHRpb25zLnN0aWNreVRvb2xiYXIgPCAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlbGVtZW50LmVkaXRvckFyZWEub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCB5ID0gKHRoaXMuc2Nyb2xsWSB8fCBfZC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSArIG9wdGlvbnMuc3RpY2t5VG9vbGJhcjtcclxuICAgICAgICAgICAgY29uc3QgZWRpdG9yVG9wID0gZXZlbnQuX2dldEVkaXRvck9mZnNldHMob3B0aW9ucy50b29sYmFyQ29udGFpbmVyKS50b3AgLSAoY29yZS5faXNJbmxpbmUgPyBlbGVtZW50LnRvb2xiYXIub2Zmc2V0SGVpZ2h0IDogMCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoeSA8IGVkaXRvclRvcCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX29mZlN0aWNreVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh5ICsgY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplID49IGVkaXRvckhlaWdodCArIGVkaXRvclRvcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb3JlLl9zdGlja3kpIGV2ZW50Ll9vblN0aWNreVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS50b3AgPSAoZWRpdG9ySGVpZ2h0ICsgZWRpdG9yVG9wICsgb3B0aW9ucy5zdGlja3lUb29sYmFyIC15IC0gY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplKSArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoeSA+PSBlZGl0b3JUb3ApIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9vblN0aWNreVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9nZXRFZGl0b3JPZmZzZXRzOiBmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGxldCBvZmZzZXRFbCA9IGNvbnRhaW5lciB8fCBjb250ZXh0LmVsZW1lbnQudG9wQXJlYTtcclxuICAgICAgICAgICAgbGV0IHQgPSAwLCBsID0gMCwgcyA9IDA7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAob2Zmc2V0RWwpIHtcclxuICAgICAgICAgICAgICAgIHQgKz0gb2Zmc2V0RWwub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgbCArPSBvZmZzZXRFbC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgICAgICAgICAgcyArPSBvZmZzZXRFbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXRFbCA9IG9mZnNldEVsLm9mZnNldFBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRvcDogdCxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IGwsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZ2V0UGFnZUJvdHRvbVNwYWNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gKGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKG51bGwpLnRvcCArIGNvbnRleHQuZWxlbWVudC50b3BBcmVhLm9mZnNldEhlaWdodCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uU3RpY2t5VG9vbGJhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb3JlLl9pc0lubGluZSAmJiAhb3B0aW9ucy50b29sYmFyQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5oZWlnaHQgPSBlbGVtZW50LnRvb2xiYXIub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnRvb2xiYXIuc3R5bGUudG9wID0gb3B0aW9ucy5zdGlja3lUb29sYmFyICsgJ3B4JztcclxuICAgICAgICAgICAgZWxlbWVudC50b29sYmFyLnN0eWxlLndpZHRoID0gY29yZS5faXNJbmxpbmUgPyBjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci53aWR0aCA6IGVsZW1lbnQudG9vbGJhci5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoZWxlbWVudC50b29sYmFyLCAnc2UtdG9vbGJhci1zdGlja3knKTtcclxuICAgICAgICAgICAgY29yZS5fc3RpY2t5ID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb2ZmU3RpY2t5VG9vbGJhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgZWxlbWVudC50b29sYmFyLnN0eWxlLnRvcCA9IGNvcmUuX2lzSW5saW5lID8gY29yZS5faW5saW5lVG9vbGJhckF0dHIudG9wIDogJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS53aWR0aCA9IGNvcmUuX2lzSW5saW5lID8gY29yZS5faW5saW5lVG9vbGJhckF0dHIud2lkdGggOiAnJztcclxuICAgICAgICAgICAgZWxlbWVudC5lZGl0b3JBcmVhLnN0eWxlLm1hcmdpblRvcCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhlbGVtZW50LnRvb2xiYXIsICdzZS10b29sYmFyLXN0aWNreScpO1xyXG4gICAgICAgICAgICBjb3JlLl9zdGlja3kgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfY29kZVZpZXdBdXRvSGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnN0eWxlLmhlaWdodCA9IGNvbnRleHQuZWxlbWVudC5jb2RlLnNjcm9sbEhlaWdodCArICdweCc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gRmlyZUZveCAtIHRhYmxlIGRlbGV0ZSwgQ2hyb21lIC0gaW1hZ2UsIHZpZGVvLCBhdWRpb1xyXG4gICAgICAgIF9oYXJkRGVsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBzYyA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBlYyA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHRhYmxlXHJcbiAgICAgICAgICAgIGNvbnN0IHNDZWxsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2MpO1xyXG4gICAgICAgICAgICBjb25zdCBlQ2VsbCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGVjKTtcclxuICAgICAgICAgICAgY29uc3Qgc0lzQ2VsbCA9IHV0aWwuaXNDZWxsKHNDZWxsKTtcclxuICAgICAgICAgICAgY29uc3QgZUlzQ2VsbCA9IHV0aWwuaXNDZWxsKGVDZWxsKTtcclxuICAgICAgICAgICAgaWYgKCgoc0lzQ2VsbCAmJiAhc0NlbGwucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhc0NlbGwucGFyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB8fCAoZUlzQ2VsbCAmJiAhZUNlbGwubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlQ2VsbC5wYXJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykpICYmIHNDZWxsICE9PSBlQ2VsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzSXNDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHV0aWwuZ2V0UGFyZW50RWxlbWVudChlQ2VsbCwgdXRpbC5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZUlzQ2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh1dGlsLmdldFBhcmVudEVsZW1lbnQoc0NlbGwsIHV0aWwuaXNDb21wb25lbnQpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHV0aWwuZ2V0UGFyZW50RWxlbWVudChzQ2VsbCwgdXRpbC5pc0NvbXBvbmVudCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY29tcG9uZW50XHJcbiAgICAgICAgICAgIGNvbnN0IHNDb21wID0gc2Mubm9kZVR5cGUgPT09IDEgPyB1dGlsLmdldFBhcmVudEVsZW1lbnQoc2MsICcuc2UtY29tcG9uZW50JykgOiBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBlQ29tcCA9IGVjLm5vZGVUeXBlID09PSAxID8gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGVjLCAnLnNlLWNvbXBvbmVudCcpIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKHNDb21wKSB1dGlsLnJlbW92ZUl0ZW0oc0NvbXApO1xyXG4gICAgICAgICAgICBpZiAoZUNvbXApIHV0aWwucmVtb3ZlSXRlbShlQ29tcCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25QYXN0ZV93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gdXRpbC5pc0lFID8gX3cuY2xpcGJvYXJkRGF0YSA6IGUuY2xpcGJvYXJkRGF0YTtcclxuICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmREYXRhKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Ll9kYXRhVHJhbnNmZXJBY3Rpb24oJ3Bhc3RlJywgZSwgY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldENsaXBib2FyZENvbXBvbmVudDogZnVuY3Rpb24gKGUsIGluZm8sIGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvaHRtbCcsIGluZm8uY29tcG9uZW50Lm91dGVySFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25Db3B5X3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSB1dGlsLmlzSUUgPyBfdy5jbGlwYm9hcmREYXRhIDogZS5jbGlwYm9hcmREYXRhO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbkNvcHkgPT09ICdmdW5jdGlvbicgJiYgIWZ1bmN0aW9ucy5vbkNvcHkoZSwgY2xpcGJvYXJkRGF0YSwgY29yZSkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBjb3JlLmN1cnJlbnRGaWxlQ29tcG9uZW50SW5mbztcclxuICAgICAgICAgICAgaWYgKGluZm8gJiYgIXV0aWwuaXNJRSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX3NldENsaXBib2FyZENvbXBvbmVudChlLCBpbmZvLCBjbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoaW5mby5jb21wb25lbnQsICdzZS1jb21wb25lbnQtY29weScpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29weSBlZmZlY3RcclxuICAgICAgICAgICAgICAgIF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoaW5mby5jb21wb25lbnQsICdzZS1jb21wb25lbnQtY29weScpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTUwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ3V0X3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSB1dGlsLmlzSUUgPyBfdy5jbGlwYm9hcmREYXRhIDogZS5jbGlwYm9hcmREYXRhO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbkN1dCA9PT0gJ2Z1bmN0aW9uJyAmJiAhZnVuY3Rpb25zLm9uQ3V0KGUsIGNsaXBib2FyZERhdGEsIGNvcmUpKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gY29yZS5jdXJyZW50RmlsZUNvbXBvbmVudEluZm87XHJcbiAgICAgICAgICAgIGlmIChpbmZvICYmICF1dGlsLmlzSUUpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9zZXRDbGlwYm9hcmRDb21wb25lbnQoZSwgaW5mbywgY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oaW5mby5jb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25Ecm9wX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xyXG4gICAgICAgICAgICBpZiAoIWRhdGFUcmFuc2ZlcikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzSUUpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvcmUucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICBldmVudC5fc2V0RHJvcExvY2F0aW9uU2VsZWN0aW9uKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuX2RhdGFUcmFuc2ZlckFjdGlvbignZHJvcCcsIGUsIGRhdGFUcmFuc2Zlcik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldERyb3BMb2NhdGlvblNlbGVjdGlvbjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUucmFuZ2VQYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoZS5yYW5nZVBhcmVudCwgZS5yYW5nZU9mZnNldCwgZS5yYW5nZVBhcmVudCwgZS5yYW5nZU9mZnNldCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29yZS5fd2QuY2FyZXRSYW5nZUZyb21Qb2ludCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGNvcmUuX3dkLmNhcmV0UmFuZ2VGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyLnN0YXJ0Q29udGFpbmVyLCByLnN0YXJ0T2Zmc2V0LCByLmVuZENvbnRhaW5lciwgci5lbmRPZmZzZXQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2Uoci5zdGFydENvbnRhaW5lciwgci5zdGFydE9mZnNldCwgci5lbmRDb250YWluZXIsIHIuZW5kT2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kYXRhVHJhbnNmZXJBY3Rpb246IGZ1bmN0aW9uICh0eXBlLCBlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGxldCBwbGFpblRleHQsIGNsZWFuRGF0YTtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNJRSkge1xyXG4gICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gZGF0YS5nZXREYXRhKCdUZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcERpdiA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvOiByYW5nZS5zdGFydE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICBlYzogcmFuZ2UuZW5kQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGVvOiByYW5nZS5lbmRPZmZzZXRcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdGVtcERpdi5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGVtcERpdi5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgbGVmdDowOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92ZXJmbG93OmhpZGRlbjsnO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQodGVtcERpdik7XHJcbiAgICAgICAgICAgICAgICB0ZW1wRGl2LmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5EYXRhID0gdGVtcERpdi5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHRlbXBEaXYpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UodGVtcFJhbmdlLnNjLCB0ZW1wUmFuZ2Uuc28sIHRlbXBSYW5nZS5lYywgdGVtcFJhbmdlLmVvKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fc2V0Q2xpcGJvYXJkRGF0YSh0eXBlLCBlLCBwbGFpblRleHQsIGNsZWFuRGF0YSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IGRhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xyXG4gICAgICAgICAgICAgICAgY2xlYW5EYXRhID0gZGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5fc2V0Q2xpcGJvYXJkRGF0YSh0eXBlLCBlLCBwbGFpblRleHQsIGNsZWFuRGF0YSwgZGF0YSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldENsaXBib2FyZERhdGE6IGZ1bmN0aW9uICh0eXBlLCBlLCBwbGFpblRleHQsIGNsZWFuRGF0YSwgZGF0YSkge1xyXG4gICAgICAgICAgICAvLyBNUyB3b3JkLCBPbmVOb2RlLCBFeGNlbFxyXG4gICAgICAgICAgICBjb25zdCBNU0RhdGEgPSAvY2xhc3M9W1wiJ10qTXNvKE5vcm1hbHxMaXN0KS9pLnRlc3QoY2xlYW5EYXRhKSB8fCAvY29udGVudD1bXCInXSpXb3JkLkRvY3VtZW50L2kudGVzdChjbGVhbkRhdGEpIHx8IC9jb250ZW50PVtcIiddKk9uZU5vdGUuRmlsZS9pLnRlc3QoY2xlYW5EYXRhKSB8fCAvY29udGVudD1bXCInXSpFeGNlbC5TaGVldC9pLnRlc3QoY2xlYW5EYXRhKTtcclxuICAgICAgICAgICAgY29uc3Qgb25seVRleHQgPSAhY2xlYW5EYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvbmx5VGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKE1TRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IGNsZWFuRGF0YS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcclxuICAgICAgICAgICAgICAgICAgICBwbGFpblRleHQgPSBwbGFpblRleHQucmVwbGFjZSgvXFxuL2csICcgJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IChwbGFpblRleHQgPT09IGNsZWFuRGF0YSA/IHBsYWluVGV4dCA6IGNsZWFuRGF0YSkucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSBjb3JlLmNsZWFuSFRNTChjbGVhbkRhdGEsIGNvcmUucGFzdGVUYWdzV2hpdGVsaXN0UmVnRXhwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IHV0aWwuX0hUTUxDb252ZXJ0b3IocGxhaW5UZXh0KS5yZXBsYWNlKC9cXG4vZywgJzxicj4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbWF4Q2hhckNvdW50ID0gY29yZS5fY2hhckNvdW50KGNvcmUuX2NoYXJUeXBlSFRNTCA/IGNsZWFuRGF0YSA6IHBsYWluVGV4dCk7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnQgLSBwYXN0ZVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3Bhc3RlJyAmJiB0eXBlb2YgZnVuY3Rpb25zLm9uUGFzdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZnVuY3Rpb25zLm9uUGFzdGUoZSwgY2xlYW5EYXRhLCBtYXhDaGFyQ291bnQsIGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIGNsZWFuRGF0YSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnQgLSBkcm9wXHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZHJvcCcgJiYgdHlwZW9mIGZ1bmN0aW9ucy5vbkRyb3AgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZnVuY3Rpb25zLm9uRHJvcChlLCBjbGVhbkRhdGEsIG1heENoYXJDb3VudCwgY29yZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgY2xlYW5EYXRhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGZpbGVzXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gZGF0YS5maWxlcztcclxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDAgJiYgIU1TRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9eaW1hZ2UvLnRlc3QoZmlsZXNbMF0udHlwZSkgJiYgY29yZS5wbHVnaW5zLmltYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmluc2VydEltYWdlKGZpbGVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFtYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNsZWFuRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25zLmluc2VydEhUTUwoY2xlYW5EYXRhLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbk1vdXNlTW92ZV93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5pc0Rpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChlLnRhcmdldCwgdXRpbC5pc0NvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVCcmVha2VyU3R5bGUgPSBjb3JlLl9saW5lQnJlYWtlci5zdHlsZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgJiYgIWNvcmUuY3VycmVudENvbnRyb2xsZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdHhFbCA9IGNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGxldCBzY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsID0gY3R4RWwud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgKz0gZWwuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVsICYmICEvXihCT0RZfEhUTUwpJC9pLnRlc3QoZWwubm9kZU5hbWUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB3U2Nyb2xsID0gY3R4RWwud3lzaXd5Zy5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZXZlbnQuX2dldEVkaXRvck9mZnNldHMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRUb3AgPSB1dGlsLmdldE9mZnNldChjb21wb25lbnQsIGN0eEVsLnd5c2l3eWdGcmFtZSkudG9wICsgd1Njcm9sbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBlLnBhZ2VZICsgc2Nyb2xsVG9wICsgKG9wdGlvbnMuaWZyYW1lICYmICFvcHRpb25zLnRvb2xiYXJDb250YWluZXIgPyBjdHhFbC50b29sYmFyLm9mZnNldEhlaWdodCA6IDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IGNvbXBvbmVudFRvcCArIChvcHRpb25zLmlmcmFtZSA/IHNjcm9sbFRvcCA6IG9mZnNldHMudG9wKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xpc3QgPSB1dGlsLmlzTGlzdENlbGwoY29tcG9uZW50LnBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRpciA9ICcnLCB0b3AgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmICgoaXNMaXN0ID8gIWNvbXBvbmVudC5wcmV2aW91c1NpYmxpbmcgOiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29tcG9uZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSAmJiB5IDwgKGMgKyAyMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3AgPSBjb21wb25lbnRUb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyID0gJ3QnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoaXNMaXN0ID8gIWNvbXBvbmVudC5uZXh0U2libGluZyA6ICF1dGlsLmlzRm9ybWF0RWxlbWVudChjb21wb25lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSkgJiYgeSA+IChjICsgY29tcG9uZW50Lm9mZnNldEhlaWdodCAtIDIwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IGNvbXBvbmVudFRvcCArIGNvbXBvbmVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyID0gJ2InO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lQnJlYWtlclN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLl9saW5lQnJlYWtDb21wID0gY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuX2xpbmVCcmVha0RpciA9IGRpcjtcclxuICAgICAgICAgICAgICAgIGxpbmVCcmVha2VyU3R5bGUudG9wID0gKHRvcCAtIHdTY3JvbGwpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyQnV0dG9uLnN0eWxlLmxlZnQgPSAodXRpbC5nZXRPZmZzZXQoY29tcG9uZW50KS5sZWZ0ICsgKGNvbXBvbmVudC5vZmZzZXRXaWR0aCAvIDIpIC0gMTUpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGxpbmVCcmVha2VyU3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH0gLy8gb2ZmIGxpbmUgYnJlYWtlclxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaW5lQnJlYWtlclN0eWxlLmRpc3BsYXkgIT09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgbGluZUJyZWFrZXJTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uTW91c2VEb3duX2xpbmVCcmVhazogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vbkxpbmVCcmVhazogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29yZS5fdmFyaWFibGUuX2xpbmVCcmVha0NvbXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpciA9ICF0aGlzID8gY29yZS5fdmFyaWFibGUuX2xpbmVCcmVha0RpciA6IHRoaXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTGlzdCA9IHV0aWwuaXNMaXN0Q2VsbChjb21wb25lbnQucGFyZW50Tm9kZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoaXNMaXN0ID8gJ0JSJyA6IHV0aWwuaXNDZWxsKGNvbXBvbmVudC5wYXJlbnROb2RlKSA/ICdESVYnIDogb3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgaWYgKCFpc0xpc3QpIGZvcm1hdC5pbm5lckhUTUwgPSAnPGJyPic7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5fY2hhclR5cGVIVE1MICYmICFjb3JlLmNoZWNrQ2hhckNvdW50KGZvcm1hdC5vdXRlckhUTUwsICdieXRlLWh0bWwnKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29tcG9uZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgZGlyID09PSAndCcgPyBjb21wb25lbnQgOiBjb21wb25lbnQubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICBjb3JlLl9saW5lQnJlYWtlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5fbGluZUJyZWFrQ29tcCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmb2N1c0VsID0gaXNMaXN0ID8gZm9ybWF0IDogZm9ybWF0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoZm9jdXNFbCwgMSwgZm9jdXNFbCwgMSk7XHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9hZGRFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudFd5c2l3eWcgPSBvcHRpb25zLmlmcmFtZSA/IGNvcmUuX3d3IDogY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcblxyXG4gICAgICAgICAgICAvKiogdG9vbGJhciBldmVudCAqL1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fYnV0dG9uc0V2ZW50SGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX21lbnVUcmF5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9idXR0b25zRXZlbnRIYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQub25DbGlja190b29sYmFyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIC8qKiBlZGl0b3IgYXJlYSAqL1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQub25Nb3VzZURvd25fd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudC5vbkNsaWNrX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIodXRpbC5pc0lFID8gJ3RleHRpbnB1dCcgOiAnaW5wdXQnLCBldmVudC5vbklucHV0X3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBldmVudC5vbktleURvd25fd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBldmVudC5vbktleVVwX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZXZlbnQub25QYXN0ZV93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdjb3B5JywgZXZlbnQub25Db3B5X3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2N1dCcsIGV2ZW50Lm9uQ3V0X3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBldmVudC5vbkRyb3Bfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZXZlbnQub25TY3JvbGxfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBldmVudC5vbkZvY3VzX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBldmVudC5vbkJsdXJfd3lzaXd5ZywgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgLyoqIGxpbmUgYnJlYWtlciAqL1xyXG4gICAgICAgICAgICBldmVudC5fbGluZUJyZWFrZXJCaW5kID0geyBhOiBldmVudC5fb25MaW5lQnJlYWsuYmluZCgnJyksIHQ6IGV2ZW50Ll9vbkxpbmVCcmVhay5iaW5kKCd0JyksIGI6IGV2ZW50Ll9vbkxpbmVCcmVhay5iaW5kKCdiJykgfTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGV2ZW50Lm9uTW91c2VNb3ZlX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgY29yZS5fbGluZUJyZWFrZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX29uTW91c2VEb3duX2xpbmVCcmVhaywgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb3JlLl9saW5lQnJlYWtlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQuYSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fbGluZUJyZWFrZXJCaW5kLnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX2IuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2xpbmVCcmVha2VyQmluZC5iLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAvKiogRXZlbnRzIGFyZSByZWdpc3RlcmVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIHRhYmxlIHBsdWdpbi4gICovXHJcbiAgICAgICAgICAgIGlmIChjb3JlLnBsdWdpbnMudGFibGUpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZXZlbnQub25Nb3VzZURvd25fd3lzaXd5Zywge3Bhc3NpdmU6IHRydWUsIHVzZUNhcHR1cmU6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qKiBjb2RlIHZpZXcgYXJlYSBhdXRvIGxpbmUgKi9cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycgJiYgIW9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGV2ZW50Ll9jb2RlVmlld0F1dG9IZWlnaHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBldmVudC5fY29kZVZpZXdBdXRvSGVpZ2h0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKiByZXNpemluZ0JhciAqL1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoL1xcZCsvLnRlc3Qob3B0aW9ucy5oZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Lm9uTW91c2VEb3duX3Jlc2l6aW5nQmFyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyLCAnc2UtcmVzaXppbmctbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogd2luZG93IGV2ZW50ICovXHJcbiAgICAgICAgICAgIGV2ZW50Ll9zZXRSZXNwb25zaXZlVG9vbGJhcigpO1xyXG4gICAgICAgICAgICBfdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBldmVudC5vblJlc2l6ZV93aW5kb3cpO1xyXG4gICAgICAgICAgICBfdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBldmVudC5vblNjcm9sbF93aW5kb3cpO1xyXG5cclxuICAgICAgICAgICAgX3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZXZlbnQub25SZXNpemVfd2luZG93LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0aWNreVRvb2xiYXIgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgX3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZXZlbnQub25TY3JvbGxfd2luZG93LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfcmVtb3ZlRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnRXeXNpd3lnID0gb3B0aW9ucy5pZnJhbWUgPyBjb3JlLl93dyA6IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2J1dHRvbnNFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX21lbnVUcmF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9idXR0b25zRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudC5vbkNsaWNrX3Rvb2xiYXIpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Lm9uTW91c2VEb3duX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudC5vbkNsaWNrX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcih1dGlsLmlzSUUgPyAndGV4dGlucHV0JyA6ICdpbnB1dCcsIGV2ZW50Lm9uSW5wdXRfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXZlbnQub25LZXlEb3duX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBldmVudC5vbktleVVwX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBldmVudC5vblBhc3RlX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIGV2ZW50Lm9uQ29weV93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2N1dCcsIGV2ZW50Lm9uQ3V0X3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIGV2ZW50Lm9uRHJvcF93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGV2ZW50Lm9uU2Nyb2xsX3d5c2l3eWcpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGV2ZW50Lm9uTW91c2VNb3ZlX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBjb3JlLl9saW5lQnJlYWtlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fb25Nb3VzZURvd25fbGluZUJyZWFrKTtcclxuICAgICAgICAgICAgY29yZS5fbGluZUJyZWFrZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudC5fbGluZUJyZWFrZXJCaW5kLmEpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfdC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fbGluZUJyZWFrZXJCaW5kLnQpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfYi5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fbGluZUJyZWFrZXJCaW5kLmIpO1xyXG4gICAgICAgICAgICBldmVudC5fbGluZUJyZWFrZXJCaW5kID0gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZXZlbnQub25Nb3VzZURvd25fd3lzaXd5Zywge3Bhc3NpdmU6IHRydWUsIHVzZUNhcHR1cmU6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBldmVudC5vbkZvY3VzX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIGV2ZW50Lm9uQmx1cl93eXNpd3lnKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBldmVudC5fY29kZVZpZXdBdXRvSGVpZ2h0KTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBldmVudC5fY29kZVZpZXdBdXRvSGVpZ2h0KTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBldmVudC5fY29kZVZpZXdBdXRvSGVpZ2h0KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQucmVzaXppbmdCYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5yZXNpemluZ0Jhci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5vbk1vdXNlRG93bl9yZXNpemluZ0Jhcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIF93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGV2ZW50Lm9uUmVzaXplX3dpbmRvdyk7XHJcbiAgICAgICAgICAgIF93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGV2ZW50Lm9uU2Nyb2xsX3dpbmRvdyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldFJlc3BvbnNpdmVUb29sYmFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChfcmVzcG9uc2l2ZUJ1dHRvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBfcmVzcG9uc2l2ZUJ1dHRvbnMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldmVudC5fcmVzcG9uc2l2ZUN1cnJlbnRTaXplID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICBjb25zdCBzaXplQXJyYXkgPSBldmVudC5fcmVzcG9uc2l2ZUJ1dHRvblNpemUgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uc09iaiA9IGV2ZW50Ll9yZXNwb25zaXZlQnV0dG9ucyA9IHtkZWZhdWx0OiBfcmVzcG9uc2l2ZUJ1dHRvbnNbMF19O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMSwgbGVuID0gX3Jlc3BvbnNpdmVCdXR0b25zLmxlbmd0aCwgc2l6ZSwgYnV0dG9uR3JvdXA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uR3JvdXAgPSBfcmVzcG9uc2l2ZUJ1dHRvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBzaXplID0gYnV0dG9uR3JvdXBbMF0gKiAxO1xyXG4gICAgICAgICAgICAgICAgc2l6ZUFycmF5LnB1c2goc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zT2JqW3NpemVdID0gYnV0dG9uR3JvdXBbMV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNpemVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhIC0gYjsgfSkudW5zaGlmdCgnZGVmYXVsdCcpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqIGZ1bmN0aW9ucyAqL1xyXG4gICAgY29uc3QgZnVuY3Rpb25zID0ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb3JlLCBVdGlsIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvcmU6IGNvcmUsXHJcbiAgICAgICAgdXRpbDogdXRpbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGZ1bmN0aW9uc1xyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlIEV2ZW50IE9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25sb2FkOiBudWxsLFxyXG4gICAgICAgIG9uU2Nyb2xsOiBudWxsLFxyXG4gICAgICAgIG9uTW91c2VEb3duOiBudWxsLFxyXG4gICAgICAgIG9uQ2xpY2s6IG51bGwsXHJcbiAgICAgICAgb25JbnB1dDogbnVsbCxcclxuICAgICAgICBvbktleURvd246IG51bGwsXHJcbiAgICAgICAgb25LZXlVcDogbnVsbCxcclxuICAgICAgICBvbkNvcHk6IG51bGwsXHJcbiAgICAgICAgb25DdXQ6IG51bGwsXHJcbiAgICAgICAgb25Gb2N1czogbnVsbCxcclxuICAgICAgICBvbkJsdXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBmdW5jdGlvbnNcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgQ3VycmVudCBjb250ZW50c1xyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25DaGFuZ2U6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBmdW5jdGlvbnMgKGRyb3AsIHBhc3RlKVxyXG4gICAgICAgICAqIFdoZW4gZmFsc2UgaXMgcmV0dXJuZWQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHN0b3BwZWQuXHJcbiAgICAgICAgICogSWYgdGhlIHN0cmluZyBpcyByZXR1cm5lZCwgdGhlIGNsZWFuRGF0YSB2YWx1ZSBpcyBtb2RpZmllZCB0byB0aGUgcmV0dXJuIHZhbHVlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlIEV2ZW50IG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xlYW5EYXRhIEhUTUwgc3RyaW5nIG1vZGlmaWVkIGZvciBlZGl0b3IgZm9ybWF0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbWF4Q2hhcnRDb3VudCBvcHRpb24gKHRydWUgaWYgbWF4IGNoYXJhY3RlciBpcyBleGNlZWRlZClcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufFN0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkRyb3A6IG51bGwsXHJcbiAgICAgICAgb25QYXN0ZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCBqdXN0IGJlZm9yZSB0aGUgaW5saW5lIHRvb2xiYXIgaXMgcG9zaXRpb25lZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0b29sYmFyIFRvb2xiYXIgRWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IFRoZSBlZGl0b3IncyBjb250ZXh0IG9iamVjdCAoZWRpdG9yLmdldENvbnRleHQoKSlcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3dJbmxpbmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQganVzdCBhZnRlciB0aGUgY29udHJvbGxlciBpcyBwb3NpdGlvbmVkIGFuZCBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi5cclxuICAgICAgICAgKiBjb250cm9sbGVyIC0gZWRpdGluZyBlbGVtZW50cyBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiBbaW1hZ2UgcmVzaXppbmcsIHRhYmxlIGVkaXRvciwgbGluayBlZGl0b3IuLl1dXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNhbGxlZCB0aGUgY29udHJvbGxlclxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGNvbnRyb2xsZXJzIEFycmF5IG9mIENvbnRyb2xsZXIgZWxlbWVudHNcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3dDb250cm9sbGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQW4gZXZlbnQgd2hlbiB0b2dnbGluZyBiZXR3ZWVuIGNvZGUgdmlldyBhbmQgd3lzaXd5ZyB2aWV3LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNDb2RlVmlldyBXaGV0aGVyIHRoZSBjdXJyZW50IGNvZGUgdmlldyBtb2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVDb2RlVmlldzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFuIGV2ZW50IHdoZW4gdG9nZ2xpbmcgZnVsbCBzY3JlZW4uXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc0Z1bGxTY3JlZW4gV2hldGhlciB0aGUgY3VycmVudCBmdWxsIHNjcmVlbiBtb2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVGdWxsU2NyZWVuOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXQgcmVwbGFjZXMgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGltYWdlIHVwbG9hZFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBSZXNwb25zZSBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5mbyBJbnB1dCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAqIC0gbGlua1ZhbHVlOiBMaW5rIHVybCB2YWx1ZVxyXG4gICAgICAgICAqIC0gbGlua05ld1dpbmRvdzogT3BlbiBpbiBuZXcgd2luZG93IENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpbnB1dFdpZHRoOiBWYWx1ZSBvZiB3aWR0aCBpbnB1dFxyXG4gICAgICAgICAqIC0gaW5wdXRIZWlnaHQ6IFZhbHVlIG9mIGhlaWdodCBpbnB1dFxyXG4gICAgICAgICAqIC0gYWxpZ246IEFsaWduIENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpc1VwZGF0ZTogVXBkYXRlIGltYWdlIGlmIHRydWUsIGNyZWF0ZSBpbWFnZSBpZiBmYWxzZVxyXG4gICAgICAgICAqIC0gZWxlbWVudDogSWYgaXNVcGRhdGUgaXMgdHJ1ZSwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZS5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltYWdlVXBsb2FkSGFuZGxlcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEl0IHJlcGxhY2VzIHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSB2aWRlbyB1cGxvYWRcclxuICAgICAgICAgKiBAcGFyYW0geG1sSHR0cCB4bWxIdHRwUmVxdWVzdCBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0gaW5mbyBJbnB1dCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAqIC0gaW5wdXRXaWR0aDogVmFsdWUgb2Ygd2lkdGggaW5wdXRcclxuICAgICAgICAgKiAtIGlucHV0SGVpZ2h0OiBWYWx1ZSBvZiBoZWlnaHQgaW5wdXRcclxuICAgICAgICAgKiAtIGFsaWduOiBBbGlnbiBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaXNVcGRhdGU6IFVwZGF0ZSB2aWRlbyBpZiB0cnVlLCBjcmVhdGUgdmlkZW8gaWYgZmFsc2VcclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IElmIGlzVXBkYXRlIGlzIHRydWUsIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmlkZW8uXHJcbiAgICAgICAgICogQHBhcmFtIGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWRlb1VwbG9hZEhhbmRsZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJdCByZXBsYWNlcyB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgYXVkaW8gdXBsb2FkXHJcbiAgICAgICAgICogQHBhcmFtIHhtbEh0dHAgeG1sSHR0cFJlcXVlc3Qgb2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIGluZm8gSW5wdXQgaW5mb3JtYXRpb25cclxuICAgICAgICAgKiAtIGlzVXBkYXRlOiBVcGRhdGUgYXVkaW8gaWYgdHJ1ZSwgY3JlYXRlIGF1ZGlvIGlmIGZhbHNlXHJcbiAgICAgICAgICogLSBlbGVtZW50OiBJZiBpc1VwZGF0ZSBpcyB0cnVlLCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGF1ZGlvLlxyXG4gICAgICAgICAqIEBwYXJhbSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXVkaW9VcGxvYWRIYW5kbGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGJlZm9yZSB0aGUgaW1hZ2UgaXMgdXBsb2FkZWRcclxuICAgICAgICAgKiBJZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgaW50ZXJuYWwgdXBsb2FkIHByb2Nlc3MgcnVucyBub3JtYWxseS5cclxuICAgICAgICAgKiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgbm8gaW1hZ2UgdXBsb2FkIGlzIHBlcmZvcm1lZC5cclxuICAgICAgICAgKiBJZiBuZXcgZmlsZUxpc3QgYXJlIHJldHVybmVkLCAgcmVwbGFjZWQgdGhlIHByZXZpb3VzIGZpbGVMaXN0XHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlcyBGaWxlcyBhcnJheVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIGluZm86IHtcclxuICAgICAgICAgKiAtIGxpbmtWYWx1ZTogTGluayB1cmwgdmFsdWVcclxuICAgICAgICAgKiAtIGxpbmtOZXdXaW5kb3c6IE9wZW4gaW4gbmV3IHdpbmRvdyBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaW5wdXRXaWR0aDogVmFsdWUgb2Ygd2lkdGggaW5wdXRcclxuICAgICAgICAgKiAtIGlucHV0SGVpZ2h0OiBWYWx1ZSBvZiBoZWlnaHQgaW5wdXRcclxuICAgICAgICAgKiAtIGFsaWduOiBBbGlnbiBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaXNVcGRhdGU6IFVwZGF0ZSBpbWFnZSBpZiB0cnVlLCBjcmVhdGUgaW1hZ2UgaWYgZmFsc2VcclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IElmIGlzVXBkYXRlIGlzIHRydWUsIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW1hZ2UuXHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBsb2FkSGFuZGxlciBJZiB1bmRlZmluZWQgaXMgcmV0dXJuZWQsIGl0IHdhaXRzIHVudGlsIFwidXBsb2FkSGFuZGxlclwiIGlzIGV4ZWN1dGVkLlxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFwidXBsb2FkSGFuZGxlclwiIGlzIGFuIHVwbG9hZCBmdW5jdGlvbiB3aXRoIFwiY29yZVwiIGFuZCBcImluZm9cIiBib3VuZC5cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbdXBsb2FkIGZpbGVzXSA6IHVwbG9hZEhhbmRsZXIoZmlsZXMgb3IgW25ldyBGaWxlKC4uLiksXSlcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbZXJyb3JdICAgICAgICA6IHVwbG9hZEhhbmRsZXIoXCJFcnJvciBtZXNzYWdlXCIpXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW0p1c3QgZmluaXNoXSAgOiB1cGxvYWRIYW5kbGVyKClcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbZGlyZWN0bHkgcmVnaXN0ZXJdIDogdXBsb2FkSGFuZGxlcihyZXNwb25zZSkgLy8gU2FtZSBmb3JtYXQgYXMgXCJpbWFnZVVwbG9hZFVybFwiIHJlc3BvbnNlXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4KSB7XHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiZXJyb3JNZXNzYWdlXCI6IFwiaW5zZXJ0IGVycm9yIG1lc3NhZ2VcIixcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXN1bHRcIjogWyB7IFwidXJsXCI6IFwiLi4uXCIsIFwibmFtZVwiOiBcIi4uLlwiLCBcInNpemVcIjogXCI5OTlcIiB9LCBdXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbnxBcnJheXx1bmRlZmluZWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25JbWFnZVVwbG9hZEJlZm9yZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGJlZm9yZSB0aGUgdmlkZW8gaXMgdXBsb2FkZWRcclxuICAgICAgICAgKiBJZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgaW50ZXJuYWwgdXBsb2FkIHByb2Nlc3MgcnVucyBub3JtYWxseS5cclxuICAgICAgICAgKiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgbm8gdmlkZW8oaWZyYW1lLCB2aWRlbykgdXBsb2FkIGlzIHBlcmZvcm1lZC5cclxuICAgICAgICAgKiBJZiBuZXcgZmlsZUxpc3QgYXJlIHJldHVybmVkLCAgcmVwbGFjZWQgdGhlIHByZXZpb3VzIGZpbGVMaXN0XHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlcyBGaWxlcyBhcnJheVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIGluZm86IHtcclxuICAgICAgICAgKiAtIGlucHV0V2lkdGg6IFZhbHVlIG9mIHdpZHRoIGlucHV0XHJcbiAgICAgICAgICogLSBpbnB1dEhlaWdodDogVmFsdWUgb2YgaGVpZ2h0IGlucHV0XHJcbiAgICAgICAgICogLSBhbGlnbjogQWxpZ24gQ2hlY2sgVmFsdWVcclxuICAgICAgICAgKiAtIGlzVXBkYXRlOiBVcGRhdGUgdmlkZW8gaWYgdHJ1ZSwgY3JlYXRlIHZpZGVvIGlmIGZhbHNlXHJcbiAgICAgICAgICogLSBlbGVtZW50OiBJZiBpc1VwZGF0ZSBpcyB0cnVlLCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZpZGVvLlxyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwbG9hZEhhbmRsZXIgSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBcInVwbG9hZEhhbmRsZXJcIiBpcyBhbiB1cGxvYWQgZnVuY3Rpb24gd2l0aCBcImNvcmVcIiBhbmQgXCJpbmZvXCIgYm91bmQuXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW3VwbG9hZCBmaWxlc10gOiB1cGxvYWRIYW5kbGVyKGZpbGVzIG9yIFtuZXcgRmlsZSguLi4pLF0pXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW2Vycm9yXSAgICAgICAgOiB1cGxvYWRIYW5kbGVyKFwiRXJyb3IgbWVzc2FnZVwiKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtKdXN0IGZpbmlzaF0gIDogdXBsb2FkSGFuZGxlcigpXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW2RpcmVjdGx5IHJlZ2lzdGVyXSA6IHVwbG9hZEhhbmRsZXIocmVzcG9uc2UpIC8vIFNhbWUgZm9ybWF0IGFzIFwidmlkZW9VcGxvYWRVcmxcIiByZXNwb25zZVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCkge1xyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcImVycm9yTWVzc2FnZVwiOiBcImluc2VydCBlcnJvciBtZXNzYWdlXCIsXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVzdWx0XCI6IFsgeyBcInVybFwiOiBcIi4uLlwiLCBcIm5hbWVcIjogXCIuLi5cIiwgXCJzaXplXCI6IFwiOTk5XCIgfSwgXVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW58QXJyYXl8dW5kZWZpbmVkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uVmlkZW9VcGxvYWRCZWZvcmU6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCBiZWZvcmUgdGhlIGF1ZGlvIGlzIHVwbG9hZGVkXHJcbiAgICAgICAgICogSWYgdHJ1ZSBpcyByZXR1cm5lZCwgdGhlIGludGVybmFsIHVwbG9hZCBwcm9jZXNzIHJ1bnMgbm9ybWFsbHkuXHJcbiAgICAgICAgICogSWYgZmFsc2UgaXMgcmV0dXJuZWQsIG5vIGF1ZGlvIHVwbG9hZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAgICAgICogSWYgbmV3IGZpbGVMaXN0IGFyZSByZXR1cm5lZCwgIHJlcGxhY2VkIHRoZSBwcmV2aW91cyBmaWxlTGlzdFxyXG4gICAgICAgICAqIElmIHVuZGVmaW5lZCBpcyByZXR1cm5lZCwgaXQgd2FpdHMgdW50aWwgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gZmlsZXMgRmlsZXMgYXJyYXlcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5mbyBpbmZvOiB7XHJcbiAgICAgICAgICogLSBpc1VwZGF0ZTogVXBkYXRlIGF1ZGlvIGlmIHRydWUsIGNyZWF0ZSBhdWRpbyBpZiBmYWxzZVxyXG4gICAgICAgICAqIC0gZWxlbWVudDogSWYgaXNVcGRhdGUgaXMgdHJ1ZSwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhdWRpby5cclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGxvYWRIYW5kbGVyIElmIHVuZGVmaW5lZCBpcyByZXR1cm5lZCwgaXQgd2FpdHMgdW50aWwgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgYW4gdXBsb2FkIGZ1bmN0aW9uIHdpdGggXCJjb3JlXCIgYW5kIFwiaW5mb1wiIGJvdW5kLlxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFt1cGxvYWQgZmlsZXNdIDogdXBsb2FkSGFuZGxlcihmaWxlcyBvciBbbmV3IEZpbGUoLi4uKSxdKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtlcnJvcl0gICAgICAgIDogdXBsb2FkSGFuZGxlcihcIkVycm9yIG1lc3NhZ2VcIilcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbSnVzdCBmaW5pc2hdICA6IHVwbG9hZEhhbmRsZXIoKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtkaXJlY3RseSByZWdpc3Rlcl0gOiB1cGxvYWRIYW5kbGVyKHJlc3BvbnNlKSAvLyBTYW1lIGZvcm1hdCBhcyBcImF1ZGlvVXBsb2FkVXJsXCIgcmVzcG9uc2VcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgpIHtcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJlcnJvck1lc3NhZ2VcIjogXCJpbnNlcnQgZXJyb3IgbWVzc2FnZVwiLFxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlc3VsdFwiOiBbIHsgXCJ1cmxcIjogXCIuLi5cIiwgXCJuYW1lXCI6IFwiLi4uXCIsIFwic2l6ZVwiOiBcIjk5OVwiIH0sIF1cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufEFycmF5fHVuZGVmaW5lZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkF1ZGlvVXBsb2FkQmVmb3JlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGlzIHVwbG9hZGVkLCB1cGRhdGVkLCBkZWxldGVkXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXRFbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFVwbG9hZGVkIGluZGV4XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRlIFVwbG9hZCBzdGF0dXMgKCdjcmVhdGUnLCAndXBkYXRlJywgJ2RlbGV0ZScpXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGluZm8gSW1hZ2UgaW5mbyBvYmplY3RcclxuICAgICAgICAgKiAtIGluZGV4OiBkYXRhIGluZGV4XHJcbiAgICAgICAgICogLSBuYW1lOiBmaWxlIG5hbWVcclxuICAgICAgICAgKiAtIHNpemU6IGZpbGUgc2l6ZVxyXG4gICAgICAgICAqIC0gc2VsZWN0OiBzZWxlY3QgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGRlbGV0ZTogZGVsZXRlIGZ1bmN0aW9uXHJcbiAgICAgICAgICogLSBlbGVtZW50OiB0YXJnZXQgZWxlbWVudFxyXG4gICAgICAgICAqIC0gc3JjOiBzcmMgYXR0cmlidXRlIG9mIHRhZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSByZW1haW5pbmdGaWxlc0NvdW50IENvdW50IG9mIHJlbWFpbmluZyBmaWxlcyB0byB1cGxvYWQgKDAgd2hlbiBhZGRlZCBhcyBhIHVybClcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uSW1hZ2VVcGxvYWQ6IG51bGwsXHJcbiAgICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgdmlkZW8oaWZyYW1lLCB2aWRlbykgaXMgaXMgdXBsb2FkZWQsIHVwZGF0ZWQsIGRlbGV0ZWRcclxuICAgICAgICAgKiAtLSBhcmd1bWVudHMgaXMgc2FtZSBcIm9uSW1hZ2VVcGxvYWRcIiAtLVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uVmlkZW9VcGxvYWQ6IG51bGwsXHJcbiAgICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gaXMgaXMgdXBsb2FkZWQsIHVwZGF0ZWQsIGRlbGV0ZWRcclxuICAgICAgICAgKiAtLSBhcmd1bWVudHMgaXMgc2FtZSBcIm9uSW1hZ2VVcGxvYWRcIiAtLVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uQXVkaW9VcGxvYWQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgaXMgdXBsb2FkIGZhaWxlZFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlcnJvck1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXN1bHQgUmVzcG9uc2UgT2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkltYWdlVXBsb2FkRXJyb3I6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSB2aWRlbyhpZnJhbWUsIHZpZGVvKSB1cGxvYWQgZmFpbGVkXHJcbiAgICAgICAgICogLS0gYXJndW1lbnRzIGlzIHNhbWUgXCJvbkltYWdlVXBsb2FkRXJyb3JcIiAtLVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uVmlkZW9VcGxvYWRFcnJvcjogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIGF1ZGlvIHVwbG9hZCBmYWlsZWRcclxuICAgICAgICAgKiAtLSBhcmd1bWVudHMgaXMgc2FtZSBcIm9uSW1hZ2VVcGxvYWRFcnJvclwiIC0tXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25BdWRpb1VwbG9hZEVycm9yOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIGVkaXRvciBpcyByZXNpemVkIHVzaW5nIHRoZSBib3R0b20gYmFyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25SZXNpemVFZGl0b3I6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCB0aGUgYnV0dG9ucyBvbiB0aGUgdG9vbGJhci4gKEVkaXRvciBpcyBub3QgcmVsb2FkZWQpXHJcbiAgICAgICAgICogWW91IGNhbm5vdCBzZXQgYSBuZXcgcGx1Z2luIGZvciB0aGUgYnV0dG9uLlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGJ1dHRvbkxpc3QgQnV0dG9uIGxpc3QgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0VG9vbGJhckJ1dHRvbnM6IGZ1bmN0aW9uIChidXR0b25MaXN0KSB7XHJcbiAgICAgICAgICAgIGNvcmUuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRhaW5lck9mZigpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgbmV3VG9vbGJhciA9IF9Db25zdHJ1Y3Rvci5fY3JlYXRlVG9vbEJhcihfZCwgYnV0dG9uTGlzdCwgY29yZS5wbHVnaW5zLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zID0gbmV3VG9vbGJhci5yZXNwb25zaXZlQnV0dG9ucztcclxuICAgICAgICAgICAgY29yZS5fbW9yZUxheWVyQWN0aXZlQnV0dG9uID0gbnVsbDtcclxuICAgICAgICAgICAgZXZlbnQuX3NldFJlc3BvbnNpdmVUb29sYmFyKCk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5yZXBsYWNlQ2hpbGQobmV3VG9vbGJhci5fYnV0dG9uVHJheSwgY29udGV4dC5lbGVtZW50Ll9idXR0b25UcmF5KTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IF9Db250ZXh0KGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50LCBjb3JlLl9nZXRDb25zdHJ1Y3RlZChjb250ZXh0LmVsZW1lbnQpLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudCA9IG5ld0NvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgY29udGV4dC50b29sID0gbmV3Q29udGV4dC50b29sO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIGNvbnRleHQuZWxlbWVudC53eXNpd3lnID0gY29yZS5fd2QuYm9keTtcclxuICAgICAgICAgICAgY29yZS5fY2FjaGluZ0J1dHRvbnMoKTtcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5Ll9yZXNldENhY2hpbmdCdXR0b24oKTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuYWN0aXZlUGx1Z2lucyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBvbGRDYWxsQnV0dG9ucyA9IHBsdWdpbkNhbGxCdXR0b25zO1xyXG4gICAgICAgICAgICBwbHVnaW5DYWxsQnV0dG9ucyA9IG5ld1Rvb2xiYXIucGx1Z2luQ2FsbEJ1dHRvbnM7XHJcbiAgICAgICAgICAgIGxldCBwbHVnaW4sIGJ1dHRvbiwgb2xkQnV0dG9uO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gcGx1Z2luQ2FsbEJ1dHRvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNPd24ocGx1Z2luQ2FsbEJ1dHRvbnMsIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luID0gcGx1Z2luc1trZXldO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uID0gcGx1Z2luQ2FsbEJ1dHRvbnNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uYWN0aXZlICYmIGJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9sZEJ1dHRvbiA9IG9sZENhbGxCdXR0b25zW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5jYWxsUGx1Z2luKGtleSwgbnVsbCwgb2xkQnV0dG9uIHx8IGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZEJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24ucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQob2xkQnV0dG9uLCBidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5DYWxsQnV0dG9uc1trZXldID0gb2xkQnV0dG9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuaGFzRm9jdXMpIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl92YXJpYWJsZS5pc0NvZGVWaWV3KSB1dGlsLmFkZENsYXNzKGNvcmUuX3N0eWxlQ29tbWFuZE1hcC5jb2RlVmlldywgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5fdmFyaWFibGUuaXNGdWxsU2NyZWVuKSB1dGlsLmFkZENsYXNzKGNvcmUuX3N0eWxlQ29tbWFuZE1hcC5mdWxsU2NyZWVuLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmhhc0NsYXNzKGNvbnRleHQuZWxlbWVudC53eXNpd3lnLCAnc2Utc2hvdy1ibG9jaycpKSB1dGlsLmFkZENsYXNzKGNvcmUuX3N0eWxlQ29tbWFuZE1hcC5zaG93QmxvY2tzLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFkZCBvciByZXNldCBvcHRpb24gcHJvcGVydHkgKEVkaXRvciBpcyByZWxvYWRlZClcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gX29wdGlvbnMgT3B0aW9uc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIChfb3B0aW9ucykge1xyXG4gICAgICAgICAgICBldmVudC5fcmVtb3ZlRXZlbnQoKTtcclxuICAgICAgICAgICAgY29yZS5fcmVzZXRDb21wb25lbnRzKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvcmUuX3N0eWxlQ29tbWFuZE1hcC5zaG93QmxvY2tzLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY29yZS5fc3R5bGVDb21tYW5kTWFwLmNvZGVWaWV3LCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLmlzQ29kZVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29yZS5faWZyYW1lQXV0byA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb3JlLnBsdWdpbnMgPSBfb3B0aW9ucy5wbHVnaW5zIHx8IGNvcmUucGx1Z2lucztcclxuICAgICAgICAgICAgY29uc3QgbWVyZ2VPcHRpb25zID0gW29wdGlvbnMsIF9vcHRpb25zXS5yZWR1Y2UoZnVuY3Rpb24gKGluaXQsIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNPd24ob3B0aW9uLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncGx1Z2lucycgJiYgb3B0aW9uW2tleV0gJiYgaW5pdFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5pdFtrZXldLCBvID0gb3B0aW9uW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpLmxlbmd0aCA/IGkgOiBfdy5PYmplY3Qua2V5cyhpKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gaVtuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBvLmxlbmd0aCA/IG8gOiBfdy5PYmplY3Qua2V5cyhvKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gb1tuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IChvLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0dXJuIGkuaW5kZXhPZih2YWwpID09PSAtMTsgfSkpLmNvbmNhdChpKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0W2tleV0gPSBvcHRpb25ba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5pdDtcclxuICAgICAgICAgICAgfSwge30pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IF9pbml0SFRNTCA9IGVsLnd5c2l3eWcuaW5uZXJIVE1MO1xyXG5cclxuICAgICAgICAgICAgLy8gc2V0IG9wdGlvblxyXG4gICAgICAgICAgICBjb25zdCBjb25zID0gX0NvbnN0cnVjdG9yLl9zZXRPcHRpb25zKG1lcmdlT3B0aW9ucywgY29udGV4dCwgb3B0aW9ucyk7ICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGlmIChjb25zLmNhbGxCdXR0b25zKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW5DYWxsQnV0dG9ucyA9IGNvbnMuY2FsbEJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmluaXRQbHVnaW5zID0ge307XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25zLnBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUucGx1Z2lucyA9IHBsdWdpbnMgPSBjb25zLnBsdWdpbnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHJlc2V0IGNvbnRleHRcclxuICAgICAgICAgICAgaWYgKGVsLl9tZW51VHJheS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHRoaXMuX21lbnVUcmF5ID0ge307XHJcbiAgICAgICAgICAgIF9yZXNwb25zaXZlQnV0dG9ucyA9IGNvbnMudG9vbGJhci5yZXNwb25zaXZlQnV0dG9ucztcclxuICAgICAgICAgICAgY29yZS5vcHRpb25zID0gb3B0aW9ucyA9IG1lcmdlT3B0aW9ucztcclxuICAgICAgICAgICAgY29yZS5sYW5nID0gbGFuZyA9IG9wdGlvbnMubGFuZztcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZWwud3lzaXd5Z0ZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5fc2V0SWZyYW1lRG9jdW1lbnQodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5fc2V0T3B0aW9uc0luaXQoZWwsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWwuZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChlbC53eXNpd3lnRnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fc2V0T3B0aW9uc0luaXQoZWwsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IFwib3B0aW9ucy5kZWZhdWx0U3R5bGVcIiBzdHlsZS5cclxuICAgICAgICAgKiBEZWZpbmUgdGhlIHN0eWxlIG9mIHRoZSBlZGl0IGFyZWFcclxuICAgICAgICAgKiBJdCBjYW4gYWxzbyBiZSBkZWZpbmVkIHdpdGggdGhlIFwic2V0T3B0aW9uc1wiIG1ldGhvZCwgYnV0IHRoZSBcInNldERlZmF1bHRTdHlsZVwiIG1ldGhvZCBkb2VzIG5vdCByZW5kZXIgdGhlIGVkaXRvciBhZ2Fpbi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGUgU3R5bGUgc3RyaW5nXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0RGVmYXVsdFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3U3R5bGVzID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzID0gdXRpbC5fc2V0RGVmYXVsdE9wdGlvblN0eWxlKG9wdGlvbnMsIHN0eWxlKTtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAvLyB0b3AgYXJlYVxyXG4gICAgICAgICAgICBlbC50b3BBcmVhLnN0eWxlLmNzc1RleHQgPSBuZXdTdHlsZXMudG9wO1xyXG4gICAgICAgICAgICAvLyBjb2RlIHZpZXdcclxuICAgICAgICAgICAgZWwuY29kZS5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmZyYW1lO1xyXG4gICAgICAgICAgICBlbC5jb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5jb2RlLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbC5jb2RlLnN0eWxlLm92ZXJmbG93ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gd3lzaXd5ZyBmcmFtZVxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBlbC53eXNpd3lnRnJhbWUuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy5mcmFtZSArIG5ld1N0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbC53eXNpd3lnRnJhbWUuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy5mcmFtZTtcclxuICAgICAgICAgICAgICAgIGVsLnd5c2l3eWcuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhIG5vdGljZSBhcmVhXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgTm90aWNlIG1lc3NhZ2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBub3RpY2VPcGVuOiBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICAgICAgICBjb3JlLm5vdGljZS5vcGVuLmNhbGwoY29yZSwgbWVzc2FnZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3NlIGEgbm90aWNlIGFyZWFcclxuICAgICAgICAgKi9cclxuICAgICAgICBub3RpY2VDbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb3JlLm5vdGljZS5jbG9zZS5jYWxsKGNvcmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb3B5aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIHRvIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNhdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lm9yaWdpbkVsZW1lbnQudmFsdWUgPSBjb3JlLmdldENvbnRlbnRzKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgc3VuZWRpdG9yJ3MgY29udGV4dCBvYmplY3QuIENvbnRhaW5zIHNldHRpbmdzLCBwbHVnaW5zLCBhbmQgY2FjaGVkIGVsZW1lbnQgb2JqZWN0c1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0Q29udGV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY29udGVudHMgb2YgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gb25seUNvbnRlbnRzIC0gUmV0dXJuIG9ubHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBib2R5IHdpdGhvdXQgaGVhZGVycyB3aGVuIHRoZSBcImZ1bGxQYWdlXCIgb3B0aW9uIGlzIHRydWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENvbnRlbnRzOiBmdW5jdGlvbiAob25seUNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3JlLmdldENvbnRlbnRzKG9ubHlDb250ZW50cyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgb25seSB0aGUgdGV4dCBvZiB0aGUgc3VuZWRpdG9yIGNvbnRlbnRzXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRUZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy50ZXh0Q29udGVudDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBlZGl0b3IncyBudW1iZXIgb2YgY2hhcmFjdGVycyBvciBiaW5hcnkgZGF0YSBzaXplLlxyXG4gICAgICAgICAqIFlvdSBjYW4gdXNlIHRoZSBcImNoYXJDb3VudGVyVHlwZVwiIG9wdGlvbiBmb3JtYXQuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gY2hhckNvdW50ZXJUeXBlIG9wdGlvbnMgLSBjaGFyQ291bnRlclR5cGUgKCdjaGFyJywgJ2J5dGUnLCAnYnl0ZS1odG1sJylcclxuICAgICAgICAgKiBJZiBhcmd1bWVudCBpcyBubyB2YWx1ZSwgdGhlIGN1cnJlbnRseSBzZXQgXCJjaGFyQ291bnRlclR5cGVcIiBvcHRpb24gaXMgdXNlZC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENoYXJDb3VudDogZnVuY3Rpb24gKGNoYXJDb3VudGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjaGFyQ291bnRlclR5cGUgPSB0eXBlb2YgY2hhckNvdW50ZXJUeXBlID09PSAnc3RyaW5nJyA/IGNoYXJDb3VudGVyVHlwZSA6IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gY29yZS5nZXRDaGFyTGVuZ3RoKChjb3JlLl9jaGFyVHlwZUhUTUwgPyBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5pbm5lckhUTUwgOiBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy50ZXh0Q29udGVudCksIGNoYXJDb3VudGVyVHlwZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdXBsb2FkZWQgaW1hZ2VzIGluZm9ybWF0aW9uc1xyXG4gICAgICAgICAqIC0gaW5kZXg6IGRhdGEgaW5kZXhcclxuICAgICAgICAgKiAtIG5hbWU6IGZpbGUgbmFtZVxyXG4gICAgICAgICAqIC0gc2l6ZTogZmlsZSBzaXplXHJcbiAgICAgICAgICogLSBzZWxlY3Q6IHNlbGVjdCBmdW5jdGlvblxyXG4gICAgICAgICAqIC0gZGVsZXRlOiBkZWxldGUgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IHRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogLSBzcmM6IHNyYyBhdHRyaWJ1dGUgb2YgdGFnXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldEltYWdlc0luZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW1hZ2UgPyBjb250ZXh0LmltYWdlLl9pbmZvTGlzdCA6IFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdXBsb2FkZWQgZmlsZXMocGx1Z2luIHVzaW5nIGZpbGVNYW5hZ2VyKSBpbmZvcm1hdGlvbiBsaXN0LlxyXG4gICAgICAgICAqIGltYWdlOiBbaW1nXSwgdmlkZW86IFt2aWRlbywgaWZyYW1lXSwgYXVkaW86IFthdWRpb11cclxuICAgICAgICAgKiBXaGVuIHRoZSBhcmd1bWVudCB2YWx1ZSBpcyAnaW1hZ2UnLCBpdCBpcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyBcImdldEltYWdlc0luZm9cIi5cclxuICAgICAgICAgKiAtIGluZGV4OiBkYXRhIGluZGV4XHJcbiAgICAgICAgICogLSBuYW1lOiBmaWxlIG5hbWVcclxuICAgICAgICAgKiAtIHNpemU6IGZpbGUgc2l6ZVxyXG4gICAgICAgICAqIC0gc2VsZWN0OiBzZWxlY3QgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGRlbGV0ZTogZGVsZXRlIGZ1bmN0aW9uXHJcbiAgICAgICAgICogLSBlbGVtZW50OiB0YXJnZXQgZWxlbWVudFxyXG4gICAgICAgICAqIC0gc3JjOiBzcmMgYXR0cmlidXRlIG9mIHRhZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFBsdWdpbiBuYW1lIChpbWFnZSwgdmlkZW8sIGF1ZGlvKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRGaWxlc0luZm86IGZ1bmN0aW9uIChwbHVnaW5OYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3BsdWdpbk5hbWVdID8gY29udGV4dFtwbHVnaW5OYW1lXS5faW5mb0xpc3QgOiBbXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVXBsb2FkIGltYWdlcyB1c2luZyBpbWFnZSBwbHVnaW5cclxuICAgICAgICAgKiBAcGFyYW0ge0ZpbGVMaXN0fSBmaWxlcyBGaWxlTGlzdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluc2VydEltYWdlOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFjb3JlLnBsdWdpbnMuaW1hZ2UgfHwgIWZpbGVzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvcmUuaW5pdFBsdWdpbnMuaW1hZ2UpIGNvcmUuY2FsbFBsdWdpbignaW1hZ2UnLCBjb3JlLnBsdWdpbnMuaW1hZ2Uuc3VibWl0QWN0aW9uLmJpbmQoY29yZSwgZmlsZXMpLCBudWxsKTtcclxuICAgICAgICAgICAgZWxzZSBjb3JlLnBsdWdpbnMuaW1hZ2Uuc3VibWl0QWN0aW9uLmNhbGwoY29yZSwgZmlsZXMpO1xyXG4gICAgICAgICAgICBjb3JlLmZvY3VzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluc2VydHMgYW4gSFRNTCBlbGVtZW50IG9yIEhUTUwgc3RyaW5nIG9yIHBsYWluIHN0cmluZyBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb25cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8U3RyaW5nfSBodG1sIEhUTUwgRWxlbWVudCBvciBIVE1MIHN0cmluZyBvciBwbGFpbiBzdHJpbmdcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG5vdENsZWFuaW5nRGF0YSBJZiB0cnVlLCBpbnNlcnRzIHRoZSBIVE1MIHN0cmluZyB3aXRob3V0IHJlZmluaW5nIGl0IHdpdGggY29yZS5jbGVhbkhUTUwuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBjaGVja0NoYXJDb3VudCBJZiB0cnVlLCBpZiBcIm9wdGlvbnMubWF4Q2hhckNvdW50XCIgaXMgZXhjZWVkZWQgd2hlbiBcImVsZW1lbnRcIiBpcyBhZGRlZCwgbnVsbCBpcyByZXR1cm5lZCB3aXRob3V0IGFkZGl0aW9uLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmFuZ2VTZWxlY3Rpb24gSWYgdHJ1ZSwgcmFuZ2Ugc2VsZWN0IHRoZSBpbnNlcnRlZCBub2RlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluc2VydEhUTUw6IGZ1bmN0aW9uIChodG1sLCBub3RDbGVhbmluZ0RhdGEsIGNoZWNrQ2hhckNvdW50LCByYW5nZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vdENsZWFuaW5nRGF0YSkgaHRtbCA9IGNvcmUuY2xlYW5IVE1MKGh0bWwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBfZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb21UcmVlID0gZG9tLmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0NoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gY29yZS5fY2hhclR5cGVIVE1MID8gJ291dGVySFRNTCcgOiAndGV4dENvbnRlbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkb21UcmVlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0hUTUwgKz0gZG9tVHJlZVtpXVt0eXBlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvcmUuY2hlY2tDaGFyQ291bnQoY2hlY2tIVE1MLCBudWxsKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGMsIGEsIHQsIHByZXYsIGZpcnN0Q29uO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoYyA9IGRvbVRyZWVbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIHByZXYubm9kZVR5cGUgPT09IDMgJiYgYSAmJiBhLm5vZGVUeXBlID09PSAxICYmIHV0aWwuaXNCcmVhayhjKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gY29yZS5pbnNlcnROb2RlKGMsIGEsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHQuY29udGFpbmVyIHx8IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb24pIGZpcnN0Q29uID0gdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5ub2RlVHlwZSA9PT0gMyAmJiBhLm5vZGVUeXBlID09PSAxKSBhID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBhLm5vZGVUeXBlID09PSAzID8gKHQuZW5kT2Zmc2V0IHx8IGEudGV4dENvbnRlbnQubGVuZ3RoKTogYS5jaGlsZE5vZGVzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VTZWxlY3Rpb24pIGNvcmUuc2V0UmFuZ2UoZmlyc3RDb24uY29udGFpbmVyIHx8IGZpcnN0Q29uLCBmaXJzdENvbi5zdGFydE9mZnNldCB8fCAwLCBhLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29yZS5zZXRSYW5nZShhLCBvZmZzZXQsIGEsIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5pbnNlcnRIVE1MLmZhaWxdICcgKyBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBodG1sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQ29tcG9uZW50KGh0bWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnRDb21wb25lbnQoaHRtbCwgZmFsc2UsIGNoZWNrQ2hhckNvdW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChodG1sKSB8fCB1dGlsLmlzTWVkaWEoaHRtbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmluc2VydE5vZGUoaHRtbCwgYWZ0ZXJOb2RlLCBjaGVja0NoYXJDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvcmUuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGNvcmUuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IGNvbnRlbnRzIENvbnRlbnRzIHRvIElucHV0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q29udGVudHM6IGZ1bmN0aW9uIChjb250ZW50cykge1xyXG4gICAgICAgICAgICBjb3JlLnNldENvbnRlbnRzKGNvbnRlbnRzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkIGNvbnRlbnRzIHRvIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgQ29udGVudHMgdG8gSW5wdXRcclxuICAgICAgICAgKi9cclxuICAgICAgICBhcHBlbmRDb250ZW50czogZnVuY3Rpb24gKGNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IGNvcmUuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKGNvbnRlbnRzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICB0ZW1wLmlubmVySFRNTCA9IGNvbnZlcnRWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB3eXNpd3lnID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRlbXAuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB3eXNpd3lnLmFwcGVuZENoaWxkKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX3NldENvZGVWaWV3KGNvcmUuX2dldENvZGVWaWV3KCkgKyAnXFxuJyArIGNvcmUuY29udmVydEhUTUxGb3JDb2RlVmlldyhjb252ZXJ0VmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERpc2FibGUgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQudG9vbC5jb3Zlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvcmUuaXNEaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3Iuc2V0T3B0aW9uKCdyZWFkT25seScsIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVuYWJsZSB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LnRvb2wuY292ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKTtcclxuICAgICAgICAgICAgY29yZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3Iuc2V0T3B0aW9uKCdyZWFkT25seScsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTaG93IHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBzaG93OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcEFyZWFTdHlsZSA9IGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlO1xyXG4gICAgICAgICAgICBpZiAodG9wQXJlYVN0eWxlLmRpc3BsYXkgPT09ICdub25lJykgdG9wQXJlYVN0eWxlLmRpc3BsYXkgPSBvcHRpb25zLmRpc3BsYXk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEhpZGUgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGhpZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvcEFyZWEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGVzdHJveSB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvKiogb2ZmIG1lbnVzICovXHJcbiAgICAgICAgICAgIGNvcmUuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRhaW5lck9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLm5vdGljZSkgY29yZS5ub3RpY2UuY2xvc2UuY2FsbChjb3JlKTtcclxuICAgICAgICAgICAgaWYgKGNvcmUubW9kYWxGb3JtKSBjb3JlLnBsdWdpbnMuZGlhbG9nLmNsb3NlLmNhbGwoY29yZSk7XHJcblxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIGhpc3RvcnkgKi9cclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5Ll9kZXN0cm95KCk7XHJcblxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgICAgICBldmVudC5fcmVtb3ZlRXZlbnQoKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qKiByZW1vdmUgZWxlbWVudCAqL1xyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oY29udGV4dC5lbGVtZW50LnRvb2xiYXIpO1xyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oY29udGV4dC5lbGVtZW50LnRvcEFyZWEpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHJlbW92ZSBvYmplY3QgcmVmZXJlbmNlICovXHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gY29yZS5mdW5jdGlvbnMpIHsgaWYgKHV0aWwuaGFzT3duKGNvcmUsIGspKSBkZWxldGUgY29yZS5mdW5jdGlvbnNba107IH1cclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBjb3JlKSB7IGlmICh1dGlsLmhhc093bihjb3JlLCBrKSkgZGVsZXRlIGNvcmVba107IH1cclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBldmVudCkgeyBpZiAodXRpbC5oYXNPd24oZXZlbnQsIGspKSBkZWxldGUgZXZlbnRba107IH1cclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBjb250ZXh0KSB7IGlmICh1dGlsLmhhc093bihjb250ZXh0LCBrKSkgZGVsZXRlIGNvbnRleHRba107IH1cclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBwbHVnaW5DYWxsQnV0dG9ucykgeyBpZiAodXRpbC5oYXNPd24ocGx1Z2luQ2FsbEJ1dHRvbnMsIGspKSBkZWxldGUgcGx1Z2luQ2FsbEJ1dHRvbnNba107IH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qKiByZW1vdmUgdXNlciBvYmplY3QgKi9cclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiB0aGlzKSB7IGlmICh1dGlsLmhhc093bih0aGlzLCBrKSkgZGVsZXRlIHRoaXNba107IH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVG9vbGJhciBtZXRob2RzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9vbGJhcjoge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIERpc2FibGUgdGhlIHRvb2xiYXJcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnRvb2wuY292ZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIEVuYWJsZSB0aGUgdG9vbGJhclxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZW5hYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC50b29sLmNvdmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIFNob3cgdGhlIHRvb2xiYXJcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLl9pc0lubGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIEhpZGUgdGhlIHRvb2xiYXJcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGhpZGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLl9pc0lubGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9oaWRlVG9vbGJhcigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKioqKioqKioqKiogQ29yZSBpbml0ICoqKioqKioqKioqKi9cclxuICAgIC8vIGZ1bmN0aW9uc1xyXG4gICAgY29yZS5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7XHJcbiAgICBjb3JlLm9wdGlvbnMgPSBvcHRpb25zO1xyXG5cclxuICAgIC8vIENyZWF0ZSB0byBzaWJsaW5nIG5vZGVcclxuICAgIGxldCBjb250ZXh0RWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcbiAgICBsZXQgb3JpZ2luRWwgPSBjb250ZXh0RWwub3JpZ2luRWxlbWVudDtcclxuICAgIGxldCB0b3BFbCA9IGNvbnRleHRFbC50b3BBcmVhO1xyXG4gICAgb3JpZ2luRWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIHRvcEVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgIC8vIGluaXRcclxuICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgIGNvbnRleHRFbC53eXNpd3lnRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXRpbC5fc2V0SWZyYW1lRG9jdW1lbnQodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvcmUuX2VkaXRvckluaXQoZmFsc2UsIG9wdGlvbnMudmFsdWUpO1xyXG4gICAgICAgICAgICBvcHRpb25zLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbnNlcnQgZWRpdG9yIGVsZW1lbnRcclxuICAgIGlmICh0eXBlb2Ygb3JpZ2luRWwubmV4dEVsZW1lbnRTaWJsaW5nID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG9yaWdpbkVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRvcEVsLCBvcmlnaW5FbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvcmlnaW5FbC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRvcEVsKTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZXh0RWwuZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChjb250ZXh0RWwud3lzaXd5Z0ZyYW1lKTtcclxuICAgIGNvbnRleHRFbCA9IG9yaWdpbkVsID0gdG9wRWwgPSBudWxsO1xyXG5cclxuICAgIC8vIGluaXRcclxuICAgIGlmICghb3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICBjb3JlLl9lZGl0b3JJbml0KGZhbHNlLCBvcHRpb25zLnZhbHVlKTtcclxuICAgICAgICBvcHRpb25zLnZhbHVlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb25zO1xyXG59XHJcbiIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE5IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY29yZSwgY2hhbmdlKSB7XG4gICAgY29uc3QgX3cgPSBjb3JlLl93O1xuICAgIGNvbnN0IHV0aWwgPSBjb3JlLnV0aWw7XG4gICAgY29uc3QgZGVsYXlUaW1lID0gY29yZS5vcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZTtcbiAgICBsZXQgZWRpdG9yID0gY29yZS5jb250ZXh0LmVsZW1lbnQ7XG4gICAgbGV0IHVuZG8gPSBjb3JlLmNvbnRleHQudG9vbC51bmRvO1xuICAgIGxldCByZWRvID0gY29yZS5jb250ZXh0LnRvb2wucmVkbztcblxuICAgIGxldCBwdXNoRGVsYXkgPSBudWxsO1xuICAgIGxldCBzdGFja0luZGV4ID0gMDtcbiAgICBsZXQgc3RhY2sgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHNldENvbnRlbnRzRnJvbVN0YWNrICgpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHN0YWNrW3N0YWNrSW5kZXhdO1xuICAgICAgICBlZGl0b3Iud3lzaXd5Zy5pbm5lckhUTUwgPSBpdGVtLmNvbnRlbnRzO1xuXG4gICAgICAgIGNvcmUuc2V0UmFuZ2UodXRpbC5nZXROb2RlRnJvbVBhdGgoaXRlbS5zLnBhdGgsIGVkaXRvci53eXNpd3lnKSwgaXRlbS5zLm9mZnNldCwgdXRpbC5nZXROb2RlRnJvbVBhdGgoaXRlbS5lLnBhdGgsIGVkaXRvci53eXNpd3lnKSwgaXRlbS5lLm9mZnNldCk7XG4gICAgICAgIGNvcmUuZm9jdXMoKTtcblxuICAgICAgICBpZiAoc3RhY2tJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHVuZG8pIHVuZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgaWYgKHJlZG8pIHJlZG8ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrSW5kZXggPT09IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcbiAgICAgICAgY29yZS5fY2hlY2tDb21wb25lbnRzKCk7XG4gICAgICAgIGNvcmUuX3NldENoYXJDb3VudCgpO1xuICAgICAgICBjb3JlLl9yZXNvdXJjZXNTdGF0ZUNoYW5nZSgpO1xuICAgICAgICBcbiAgICAgICAgLy8gb25DaGFuZ2VcbiAgICAgICAgY2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaFN0YWNrICgpIHtcbiAgICAgICAgY29yZS5fY2hlY2tDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjb3JlLmdldENvbnRlbnRzKHRydWUpO1xuICAgICAgICBpZiAoIWN1cnJlbnQgfHwgKCEhc3RhY2tbc3RhY2tJbmRleF0gJiYgY3VycmVudCA9PT0gc3RhY2tbc3RhY2tJbmRleF0uY29udGVudHMpKSByZXR1cm47XG5cbiAgICAgICAgc3RhY2tJbmRleCsrO1xuICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuX3ZhcmlhYmxlLl9yYW5nZTtcblxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gc3RhY2tJbmRleCkge1xuICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCBzdGFja0luZGV4KTtcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHN0YWNrW3N0YWNrSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHM6IHsgcGF0aDogWzAsIDBdLCBvZmZzZXQ6IFswLCAwXSB9LFxuICAgICAgICAgICAgICAgIGU6IHsgcGF0aDogMCwgb2Zmc2V0OiAwIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1tzdGFja0luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogY3VycmVudCxcbiAgICAgICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHV0aWwuZ2V0Tm9kZVBhdGgocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IHV0aWwuZ2V0Tm9kZVBhdGgocmFuZ2UuZW5kQ29udGFpbmVyLCBudWxsLCBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiByYW5nZS5lbmRPZmZzZXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YWNrSW5kZXggPT09IDEgJiYgdW5kbykgdW5kby5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgY29yZS5fc2V0Q2hhckNvdW50KCk7XG4gICAgICAgIC8vIG9uQ2hhbmdlXG4gICAgICAgIGNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSGlzdG9yeSBzdGFja1xuICAgICAgICAgKi9cbiAgICAgICAgc3RhY2s6IHN0YWNrLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2F2aW5nIHRoZSBjdXJyZW50IHN0YXR1cyB0byB0aGUgaGlzdG9yeSBvYmplY3Qgc3RhY2tcbiAgICAgICAgICogSWYgXCJkZWxheVwiIGlzIHRydWUsIGl0IHdpbGwgYmUgc2F2ZWQgYWZ0ZXIgKG9wdGlvbnMuaGlzdG9yeVN0YWNrRGVsYXlUaW1lIHx8IDQwMCkgbWlsaXNlY29uZHNcbiAgICAgICAgICogSWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZ2FpbiB3aXRoIHRoZSBcImRlbGF5XCIgYXJndW1lbnQgdHJ1ZSBiZWZvcmUgaXQgaXMgc2F2ZWQsIHRoZSBkZWxheSB0aW1lIGlzIHJlbmV3YWxcbiAgICAgICAgICogWW91IGNhbiBzcGVjaWZ5IHRoZSBkZWxheSB0aW1lIGJ5IHNlbmRpbmcgYSBudW1iZXIuXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ9IGRlbGF5IElmIHRydWUsIEFkZCBzdGFjayB3aXRob3V0IGRlbGF5IHRpbWUuXG4gICAgICAgICAqL1xuICAgICAgICBwdXNoOiBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIF93LnNldFRpbWVvdXQoY29yZS5fcmVzb3VyY2VzU3RhdGVDaGFuZ2UuYmluZChjb3JlKSk7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gdHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyA/IChkZWxheSA+IDAgPyBkZWxheSA6IDApIDogKCFkZWxheSA/IDAgOiBkZWxheVRpbWUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXRpbWUgfHwgcHVzaERlbGF5KSB7XG4gICAgICAgICAgICAgICAgX3cuY2xlYXJUaW1lb3V0KHB1c2hEZWxheSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoRGVsYXkgPSBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdy5jbGVhclRpbWVvdXQocHVzaERlbGF5KTtcbiAgICAgICAgICAgICAgICBwdXNoRGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgICAgIHB1c2hTdGFjaygpO1xuICAgICAgICAgICAgfSwgdGltZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBVbmRvIGZ1bmN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB1bmRvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBzdGFja0luZGV4LS07XG4gICAgICAgICAgICAgICAgc2V0Q29udGVudHNGcm9tU3RhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlZG8gZnVuY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHJlZG86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggLSAxID4gc3RhY2tJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0YWNrSW5kZXgrKztcbiAgICAgICAgICAgICAgICBzZXRDb250ZW50c0Zyb21TdGFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR28gdG8gdGhlIGhpc3Rvcnkgc3RhY2sgZm9yIHRoYXQgaW5kZXguXG4gICAgICAgICAqIElmIFwiaW5kZXhcIiBpcyAtMSwgZ28gdG8gdGhlIGxhc3Qgc3RhY2tcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFN0YWNrIGluZGV4XG4gICAgICAgICAqL1xuICAgICAgICBnbzogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICBzdGFja0luZGV4ID0gaW5kZXggPCAwID8gKHN0YWNrLmxlbmd0aCAtIDEpIDogaW5kZXg7XG4gICAgICAgICAgICBzZXRDb250ZW50c0Zyb21TdGFjaygpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCB0aGUgaGlzdG9yeSBvYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoaWdub3JlQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLmlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGNvcmUuY29udGV4dC50b29sLnNhdmUpIGNvcmUuY29udGV4dC50b29sLnNhdmUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBzdGFjay5zcGxpY2UoMCk7XG4gICAgICAgICAgICBzdGFja0luZGV4ID0gMDtcblxuICAgICAgICAgICAgLy8gcHVzaFN0YWNrXG4gICAgICAgICAgICBzdGFja1tzdGFja0luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogY29yZS5nZXRDb250ZW50cyh0cnVlKSxcbiAgICAgICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKCFpZ25vcmVDaGFuZ2VFdmVudCkgY2hhbmdlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGJ1dHRvbnMgdG8gZml0IHRoZSBjdXJyZW50IHN0YWNrLlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX3Jlc2V0Q2FjaGluZ0J1dHRvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZWRpdG9yID0gY29yZS5jb250ZXh0LmVsZW1lbnQ7XG4gICAgICAgICAgICB1bmRvID0gY29yZS5jb250ZXh0LnRvb2wudW5kbztcbiAgICAgICAgICAgIHJlZG8gPSBjb3JlLmNvbnRleHQudG9vbC5yZWRvO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2tJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVkbyAmJiBzdGFja0luZGV4ID09PSBzdGFjay5sZW5ndGggLSAxKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5pc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5jb250ZXh0LnRvb2wuc2F2ZSkgY29yZS5jb250ZXh0LnRvb2wuc2F2ZS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrSW5kZXggPT09IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVkbykgcmVkby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmUgYWxsIHN0YWNrcyBhbmQgcmVtb3ZlIHRoZSB0aW1lb3V0IGZ1bmN0aW9uLlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChwdXNoRGVsYXkpIF93LmNsZWFyVGltZW91dChwdXNoRGVsYXkpO1xuICAgICAgICAgICAgc3RhY2sgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAnLi9hc3NldHMvY3NzL3N1bmVkaXRvci5jc3MnO1xuaW1wb3J0ICcuL2Fzc2V0cy9jc3Mvc3VuZWRpdG9yLWNvbnRlbnRzLmNzcyc7XG5cbmltcG9ydCBwbHVnaW5zIGZyb20gJy4vcGx1Z2lucyc7XG5pbXBvcnQgc3VuZWRpdG9yIGZyb20gJy4vc3VuZWRpdG9yJztcblxuaWYgKCF3aW5kb3cuU1VORURJVE9SKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUicsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogc3VuZWRpdG9yLmluaXQoe1xuICAgICAgICAgICAgcGx1Z2luczogcGx1Z2luc1xuICAgICAgICB9KVxuICAgIH0pO1xufSIsIi8qXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcbiAqXG4gKiBzdW5lZGl0b3IuanNcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXG4gKiBNSVQgbGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XG4gICAgICAgICAgICBmdW5jdGlvbiAodykge1xuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9NT0RVTEVTIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcbiAgICAgICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xuICAgIH1cbn0odHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiAod2luZG93LCBub0dsb2JhbCkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHtcbiAgICAgICAgbmFtZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgcmVzaXppbmcgY29tcG9uZW50IGFuZCBpbnNlcnQgdGhlIGVsZW1lbnQuXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY292ZXIgQ292ZXIgZWxlbWVudCAoRklHVVJFKVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgb2YgY29udGFpbmVyIChmaXhlZDogc2UtY29tcG9uZW50KVxuICAgICAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gQ3JlYXRlZCBjb250YWluZXIgZWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgc2V0X2NvbnRhaW5lcjogZnVuY3Rpb24gKGNvdmVyLCBjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnc2UtY29tcG9uZW50ICcgKyBjbGFzc05hbWU7XG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY292ZXIpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvdmVyIHRoZSB0YXJnZXQgZWxlbWVudCB3aXRoIGEgRklHVVJFIGVsZW1lbnQuXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgc2V0X2NvdmVyOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnRklHVVJFJyk7XG4gICAgICAgICAgICBjb3Zlci5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICBcbiAgICAgICAgICAgIHJldHVybiBjb3ZlcjtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybiBIVE1MIHN0cmluZyBvZiBjYXB0aW9uKEZJR0NBUFRJT04pIGVsZW1lbnRcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cbiAgICAgICAgICovXG4gICAgICAgIGNyZWF0ZV9jYXB0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0ZJR0NBUFRJT04nKTtcbiAgICAgICAgICAgIGNhcHRpb24uc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCB0cnVlKTtcbiAgICAgICAgICAgIGNhcHRpb24uaW5uZXJIVE1MID0gJzxkaXY+JyArIHRoaXMubGFuZy5kaWFsb2dCb3guY2FwdGlvbiArICc8L2Rpdj4nO1xuICAgICAgICAgICAgcmV0dXJuIGNhcHRpb247XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBub0dsb2JhbCA9PT0gdHlwZW9mIHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIXdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUykge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHt9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1VORURJVE9SX01PRFVMRVMsICdjb21wb25lbnQnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBjb21wb25lbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn0pKTsiLCIvKlxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXG4gKlxuICogc3VuZWRpdG9yLmpzXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxuICogTUlUIGxpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG4gICAgICAgICAgICBmYWN0b3J5KGdsb2JhbCwgdHJ1ZSkgOlxuICAgICAgICAgICAgZnVuY3Rpb24gKHcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXcuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTVU5FRElUT1JfTU9EVUxFUyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnkodyk7XG4gICAgICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZhY3RvcnkoZ2xvYmFsKTtcbiAgICB9XG59KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgbm9HbG9iYWwpIHtcbiAgICBjb25zdCByZXNpemluZyA9IHtcbiAgICAgICAgbmFtZTogJ3Jlc2l6aW5nJyxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxuICAgICAgICAgKiBSZXF1aXJlIGNvbnRleHQgcHJvcGVydGllcyB3aGVuIHJlc2l6aW5nIG1vZHVsZVxuICAgICAgICAgICAgaW5wdXRYOiBFbGVtZW50LFxuICAgICAgICAgICAgaW5wdXRZOiBFbGVtZW50LFxuICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCxcbiAgICAgICAgICAgIF9jb3ZlcjogbnVsbCxcbiAgICAgICAgICAgIF9lbGVtZW50OiBudWxsLFxuICAgICAgICAgICAgX2VsZW1lbnRfdzogMSxcbiAgICAgICAgICAgIF9lbGVtZW50X2g6IDEsXG4gICAgICAgICAgICBfZWxlbWVudF9sOiAwLFxuICAgICAgICAgICAgX2VsZW1lbnRfdDogMCxcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVg6ICdhdXRvJyxcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVk6ICdhdXRvJyxcbiAgICAgICAgICAgIF9vcmlnaW5fdzogY29yZS5vcHRpb25zLmltYWdlV2lkdGggPT09ICdhdXRvJyA/ICcnIDogY29yZS5vcHRpb25zLmltYWdlV2lkdGgsXG4gICAgICAgICAgICBfb3JpZ2luX2g6IGNvcmUub3B0aW9ucy5pbWFnZUhlaWdodCA9PT0gJ2F1dG8nID8gJycgOiBjb3JlLm9wdGlvbnMuaW1hZ2VIZWlnaHQsXG4gICAgICAgICAgICBfcHJvcG9ydGlvbkNoZWNrZWQ6IHRydWUsXG4gICAgICAgICAgICAvLyAtLSBzZWxlY3QgZnVuY3Rpb24gLS1cbiAgICAgICAgICAgIF9yZXNpemluZzogY29yZS5vcHRpb25zLmltYWdlUmVzaXppbmcsXG4gICAgICAgICAgICBfcmVzaXplRG90SGlkZTogIWNvcmUub3B0aW9ucy5pbWFnZUhlaWdodFNob3csXG4gICAgICAgICAgICBfcm90YXRpb246IGNvcmUub3B0aW9ucy5pbWFnZVJvdGF0aW9uLFxuICAgICAgICAgICAgX29ubHlQZXJjZW50YWdlOiBjb3JlLm9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBfcmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgX3JhdGlvWDogMSxcbiAgICAgICAgICAgIF9yYXRpb1k6IDFcbiAgICAgICAgICAgIF9jYXB0aW9uU2hvdzogdHJ1ZSxcbiAgICAgICAgICAgIC8vIC0tIHdoZW4gdXNlZCBjYXB0aW9uIChfY2FwdGlvblNob3c6IHRydWUpIC0tXG4gICAgICAgICAgICBfY2FwdGlvbjogbnVsbCxcbiAgICAgICAgICAgIF9jYXB0aW9uQ2hlY2tlZDogZmFsc2UsXG4gICAgICAgICAgICBjYXB0aW9uQ2hlY2tFbDogbnVsbCxcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXG4gICAgICAgICAqL1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZyA9IHtcbiAgICAgICAgICAgICAgICBfcmVzaXplQ2xpZW50WDogMCxcbiAgICAgICAgICAgICAgICBfcmVzaXplQ2xpZW50WTogMCxcbiAgICAgICAgICAgICAgICBfcmVzaXplX3BsdWdpbjogJycsXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZV93OiAwLFxuICAgICAgICAgICAgICAgIF9yZXNpemVfaDogMCxcbiAgICAgICAgICAgICAgICBfb3JpZ2luX3c6IDAsXG4gICAgICAgICAgICAgICAgX29yaWdpbl9oOiAwLFxuICAgICAgICAgICAgICAgIF9yb3RhdGVWZXJ0aWNhbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZV9kaXJlY3Rpb246ICcnLFxuICAgICAgICAgICAgICAgIF9tb3ZlX3BhdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgX2lzQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhbGlnbkljb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2ljOiBpY29ucy5hbGlnbl9qdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBpY29ucy5hbGlnbl9sZWZ0LFxuICAgICAgICAgICAgICAgICAgICByaWdodDogaWNvbnMuYWxpZ25fcmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlcjogaWNvbnMuYWxpZ25fY2VudGVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICBcbiAgICAgICAgICAgIC8qKiByZXNpemUgY29udHJvbGxlciwgYnV0dG9uICovXG4gICAgICAgICAgICBsZXQgcmVzaXplX2Rpdl9jb250YWluZXIgPSB0aGlzLnNldENvbnRyb2xsZXJfcmVzaXplKGNvcmUpO1xuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVDb250YWluZXIgPSByZXNpemVfZGl2X2NvbnRhaW5lcjtcbiAgICBcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcucmVzaXplRGl2ID0gcmVzaXplX2Rpdl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLnNlLW1vZGFsLXJlc2l6ZScpO1xuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVEb3QgPSByZXNpemVfZGl2X2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuc2UtcmVzaXplLWRvdCcpO1xuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVEaXNwbGF5ID0gcmVzaXplX2Rpdl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLnNlLXJlc2l6ZS1kaXNwbGF5Jyk7XG4gICAgXG4gICAgICAgICAgICBsZXQgcmVzaXplX2J1dHRvbiA9IHRoaXMuc2V0Q29udHJvbGxlcl9idXR0b24oY29yZSk7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUJ1dHRvbiA9IHJlc2l6ZV9idXR0b247XG4gICAgXG4gICAgICAgICAgICBsZXQgcmVzaXplX2hhbmRsZXMgPSBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUhhbmRsZXMgPSBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZURvdC5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuJyk7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUJ1dHRvbkdyb3VwID0gcmVzaXplX2J1dHRvbi5xdWVyeVNlbGVjdG9yKCcuX3NlX3Jlc2l6aW5nX2J0bl9ncm91cCcpO1xuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yb3RhdGlvbkJ1dHRvbnMgPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5fc2VfcmVzaXppbmdfYnRuX2dyb3VwIC5fc2Vfcm90YXRpb24nKTtcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcucGVyY2VudGFnZUJ1dHRvbnMgPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5fc2VfcmVzaXppbmdfYnRuX2dyb3VwIC5fc2VfcGVyY2VudGFnZScpO1xuICAgIFxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUgPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5zZS1yZXNpemluZy1hbGlnbi1saXN0Jyk7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudUxpc3QgPSBjb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcuYWxpZ25CdXR0b24gPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfcmVzaXppbmdfYWxpZ25fYnV0dG9uJyk7XG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLmF1dG9TaXplQnV0dG9uID0gcmVzaXplX2J1dHRvbi5xdWVyeVNlbGVjdG9yKCcuX3NlX3Jlc2l6aW5nX2J0bl9ncm91cCAuX3NlX2F1dG9fc2l6ZScpO1xuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5jYXB0aW9uQnV0dG9uID0gcmVzaXplX2J1dHRvbi5xdWVyeVNlbGVjdG9yKCcuX3NlX3Jlc2l6aW5nX2NhcHRpb25fYnV0dG9uJyk7XG4gICAgXG4gICAgICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xuICAgICAgICAgICAgcmVzaXplX2Rpdl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9KTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzFdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzJdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzNdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzRdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzVdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzZdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzddLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcbiAgICAgICAgICAgIHJlc2l6ZV9idXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfcmVzaXplQnV0dG9uLmJpbmQoY29yZSkpO1xuICAgIFxuICAgICAgICAgICAgLyoqIGFwcGVuZCBodG1sICovXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXplX2Rpdl9jb250YWluZXIpO1xuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKHJlc2l6ZV9idXR0b24pO1xuICAgIFxuICAgICAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xuICAgICAgICAgICAgcmVzaXplX2Rpdl9jb250YWluZXIgPSBudWxsLCByZXNpemVfYnV0dG9uID0gbnVsbCwgcmVzaXplX2hhbmRsZXMgPSBudWxsO1xuICAgICAgICB9LFxuICAgIFxuICAgICAgICAvKiogcmVzaXplIGNvbnRyb2xsZXIsIGJ1dHRvbiAoaW1hZ2UsIGlmcmFtZSwgdmlkZW8pICovXG4gICAgICAgIHNldENvbnRyb2xsZXJfcmVzaXplOiBmdW5jdGlvbiAoY29yZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzaXplX2NvbnRhaW5lciA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmVzaXplX2NvbnRhaW5lci5jbGFzc05hbWUgPSAnc2UtY29udHJvbGxlciBzZS1yZXNpemluZy1jb250YWluZXInO1xuICAgICAgICAgICAgcmVzaXplX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgcmVzaXplX2NvbnRhaW5lci5pbm5lckhUTUwgPSAnJyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1tb2RhbC1yZXNpemVcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXJlc2l6ZS1kb3RcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGxcIj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRyXCI+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJibFwiPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYnJcIj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImx3XCI+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aFwiPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicndcIj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImJoXCI+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXJlc2l6ZS1kaXNwbGF5XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gcmVzaXplX2NvbnRhaW5lcjtcbiAgICAgICAgfSxcbiAgICBcbiAgICAgICAgc2V0Q29udHJvbGxlcl9idXR0b246IGZ1bmN0aW9uIChjb3JlKSB7XG4gICAgICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xuICAgICAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xuICAgICAgICAgICAgY29uc3QgcmVzaXplX2J1dHRvbiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgIFxuICAgICAgICAgICAgcmVzaXplX2J1dHRvbi5jbGFzc05hbWUgPSBcInNlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci1yZXNpemluZ1wiO1xuICAgICAgICAgICAgcmVzaXplX2J1dHRvbi5pbm5lckhUTUwgPSAnJyArXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hcnJvdyBzZS1hcnJvdy11cFwiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwIF9zZV9yZXNpemluZ19idG5fZ3JvdXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInBlcmNlbnRcIiBkYXRhLXZhbHVlPVwiMVwiIGNsYXNzPVwic2UtdG9vbHRpcCBfc2VfcGVyY2VudGFnZVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuPjEwMCU8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlc2l6ZTEwMCArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJwZXJjZW50XCIgZGF0YS12YWx1ZT1cIjAuNzVcIiBjbGFzcz1cInNlLXRvb2x0aXAgX3NlX3BlcmNlbnRhZ2VcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3Bhbj43NSU8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlc2l6ZTc1ICsgJzwvc3Bhbj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInBlcmNlbnRcIiBkYXRhLXZhbHVlPVwiMC41XCIgY2xhc3M9XCJzZS10b29sdGlwIF9zZV9wZXJjZW50YWdlXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4+NTAlPC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZXNpemU1MCArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJhdXRvXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2VfYXV0b19zaXplXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5hdXRvX3NpemUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5hdXRvU2l6ZSArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyb3RhdGVcIiBkYXRhLXZhbHVlPVwiLTkwXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2Vfcm90YXRpb25cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLnJvdGF0ZV9sZWZ0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucm90YXRlTGVmdCArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyb3RhdGVcIiBkYXRhLXZhbHVlPVwiOTBcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV9yb3RhdGlvblwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMucm90YXRlX3JpZ2h0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucm90YXRlUmlnaHQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDA7XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJtaXJyb3JcIiBkYXRhLXZhbHVlPVwiaFwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLm1pcnJvcl9ob3Jpem9udGFsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIubWlycm9ySG9yaXpvbnRhbCArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJtaXJyb3JcIiBkYXRhLXZhbHVlPVwidlwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLm1pcnJvcl92ZXJ0aWNhbCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLm1pcnJvclZlcnRpY2FsICsgJzwvc3Bhbj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cIm9uYWxpZ25cIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV9yZXNpemluZ19hbGlnbl9idXR0b25cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2p1c3RpZnkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcudG9vbGJhci5hbGlnbiArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwLXN1YiBzdW4tZWRpdG9yLWNvbW1vbiBzZS1saXN0LWxheWVyIHNlLXJlc2l6aW5nLWFsaWduLWxpc3RcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiYWxpZ25cIiBkYXRhLXZhbHVlPVwiYmFzaWNcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2p1c3RpZnkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmJhc2ljICsgJzwvc3Bhbj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtdG9vbHRpcFwiIGRhdGEtY29tbWFuZD1cImFsaWduXCIgZGF0YS12YWx1ZT1cImxlZnRcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2xlZnQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmxlZnQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiYWxpZ25cIiBkYXRhLXZhbHVlPVwiY2VudGVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5hbGlnbl9jZW50ZXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmNlbnRlciArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLXRvb2x0aXBcIiBkYXRhLWNvbW1hbmQ9XCJhbGlnblwiIGRhdGEtdmFsdWU9XCJyaWdodFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuYWxpZ25fcmlnaHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJpZ2h0ICsgJzwvc3Bhbj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJjYXB0aW9uXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2VfcmVzaXppbmdfY2FwdGlvbl9idXR0b25cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmNhcHRpb24gK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmNhcHRpb24gKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwicmV2ZXJ0XCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMucmV2ZXJ0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmRpYWxvZ0JveC5yZXZlcnRCdXR0b24gKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwidXBkYXRlXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMubW9kaWZ5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZWRpdCArICc8L3NwYW4+PC9zcGFuPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlc2l6ZV9idXR0b247XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgd2lkdGggc2l6ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFBsdWdpbiBjb250ZXh0IG9iamVjdCBvZiBwbHVnaW4gKGNvcmUuY29udGV4dFtwbHVnaW5dKVxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb3ZlciBDb3ZlciBlbGVtZW50IChGSUdVUkUpXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyIENvbnRhaW5lciBlbGVtZW50IChESVYuc2UtY29tcG9uZW50KVxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgX21vZHVsZV9nZXRTaXplWDogZnVuY3Rpb24gKGNvbnRleHRQbHVnaW4sIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IGNvbnRleHRQbHVnaW4uX2VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIWNvdmVyKSBjb3ZlciA9IGNvbnRleHRQbHVnaW4uX2NvdmVyO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IGNvbnRleHRQbHVnaW4uX2NvbnRhaW5lcjtcbiAgICBcbiAgICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuICcnO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuICEvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS53aWR0aCkgPyBlbGVtZW50LnN0eWxlLndpZHRoIDogKChjb250YWluZXIgJiYgdGhpcy51dGlsLmdldE51bWJlcihjb250YWluZXIuc3R5bGUud2lkdGgsIDIpKSB8fCAxMDApICsgJyUnO1xuICAgICAgICB9LFxuICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGhlaWdodCBzaXplXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvdmVyIENvdmVyIGVsZW1lbnQgKEZJR1VSRSlcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQgKERJVi5zZS1jb21wb25lbnQpXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBfbW9kdWxlX2dldFNpemVZOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbiwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikge1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gY29udGV4dFBsdWdpbi5fZWxlbWVudDtcbiAgICAgICAgICAgIGlmICghY292ZXIpIGNvdmVyID0gY29udGV4dFBsdWdpbi5fY292ZXI7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gY29udGV4dFBsdWdpbi5fY29udGFpbmVyO1xuICAgIFxuICAgICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgIWNvdmVyKSByZXR1cm4gKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZS5oZWlnaHQpIHx8ICcnO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXRpbC5nZXROdW1iZXIoY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSwgMCkgPiAwICYmICF0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gY292ZXIuc3R5bGUuaGVpZ2h0IDogKCEvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS5oZWlnaHQpIHx8ICEvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS53aWR0aCkgPyBlbGVtZW50LnN0eWxlLmhlaWdodCA6ICgoY29udGFpbmVyICYmIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGFpbmVyLnN0eWxlLmhlaWdodCwgMikpIHx8IDEwMCkgKyAnJScpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGF0IHRoZSBcIm9wZW5Nb2RpZnlcIiB0byBwdXQgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgdGFyZ2V0IGludG8gdGhlIHNpemUgaW5wdXQgZWxlbWVudC5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRQbHVnaW4gY29udGV4dCBvYmplY3Qgb2YgcGx1Z2luIChjb3JlLmNvbnRleHRbcGx1Z2luXSlcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbk9iaiBQbHVnaW4gb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBfbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZTogZnVuY3Rpb24gKGNvbnRleHRQbHVnaW4sIHBsdWdpbk9iaikge1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZVJvdGF0aW9uID0gY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UgJiYgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbDtcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4ucHJvcG9ydGlvbi5jaGVja2VkID0gY29udGV4dFBsdWdpbi5fcHJvcG9ydGlvbkNoZWNrZWQgPSBjb250ZXh0UGx1Z2luLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wcm9wb3J0aW9uJykgIT09ICdmYWxzZSc7XG4gICAgXG4gICAgICAgICAgICBsZXQgeCA9IHBlcmNlbnRhZ2VSb3RhdGlvbiA/ICcnIDogdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVguY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luKTtcbiAgICAgICAgICAgIGlmICh4ID09PSBjb250ZXh0UGx1Z2luLl9kZWZhdWx0U2l6ZVgpIHggPSAnJztcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkgeCA9IHRoaXMudXRpbC5nZXROdW1iZXIoeCwgMik7XG4gICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZSA9IHg7XG4gICAgICAgICAgICBwbHVnaW5PYmouc2V0SW5wdXRTaXplLmNhbGwodGhpcywgJ3gnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCFjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkge1xuICAgICAgICAgICAgICAgIGxldCB5ID0gcGVyY2VudGFnZVJvdGF0aW9uID8gJycgOiB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHRQbHVnaW4pO1xuICAgICAgICAgICAgICAgIGlmICh5ID09PSBjb250ZXh0UGx1Z2luLl9kZWZhdWx0U2l6ZVkpIHkgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UpIHkgPSB0aGlzLnV0aWwuZ2V0TnVtYmVyKHksIDIpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlID0geTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFguZGlzYWJsZWQgPSBwZXJjZW50YWdlUm90YXRpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WS5kaXNhYmxlZCA9IHBlcmNlbnRhZ2VSb3RhdGlvbiA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4ucHJvcG9ydGlvbi5kaXNhYmxlZCA9IHBlcmNlbnRhZ2VSb3RhdGlvbiA/IHRydWUgOiBmYWxzZTtcbiAgICBcbiAgICAgICAgICAgIHBsdWdpbk9iai5zZXRSYXRpby5jYWxsKHRoaXMpO1xuICAgICAgICB9LFxuICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBpbiBcInNldElucHV0U2l6ZVwiIChpbnB1dCB0YWcga2V5dXBFdmVudCksIFxuICAgICAgICAgKiBjaGVja3MgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IHRhZywgXG4gICAgICAgICAqIGNhbGN1bGF0ZXMgdGhlIHJhdGlvLCBhbmQgc2V0cyB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBpbiB0aGUgaW5wdXQgdGFnIG9mIHRoZSBvcHBvc2l0ZSBzaXplLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFBsdWdpbiBjb250ZXh0IG9iamVjdCBvZiBwbHVnaW4gKGNvcmUuY29udGV4dFtwbHVnaW5dKVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30geHkgJ3gnOiB3aWR0aCwgJ3knOiBoZWlnaHRcbiAgICAgICAgICovXG4gICAgICAgIF9tb2R1bGVfc2V0SW5wdXRTaXplOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbiwgeHkpIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkge1xuICAgICAgICAgICAgICAgIGlmICh4eSA9PT0gJ3gnICYmIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID4gMTAwKSBjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZSA9IDEwMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAoY29udGV4dFBsdWdpbi5wcm9wb3J0aW9uLmNoZWNrZWQgJiYgY29udGV4dFBsdWdpbi5fcmF0aW8gJiYgL1xcZC8udGVzdChjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZSkgJiYgL1xcZC8udGVzdChjb250ZXh0UGx1Z2luLmlucHV0WS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4VW5pdCA9IGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlLnJlcGxhY2UoL1xcZCt8XFwuL2csICcnKSB8fCBjb250ZXh0UGx1Z2luLnNpemVVbml0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHlVbml0ID0gY29udGV4dFBsdWdpbi5pbnB1dFkudmFsdWUucmVwbGFjZSgvXFxkK3xcXC4vZywgJycpIHx8IGNvbnRleHRQbHVnaW4uc2l6ZVVuaXQ7XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKHhVbml0ICE9PSB5VW5pdCkgcmV0dXJuO1xuICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGRlYyA9IHhVbml0ID09PSAnJScgPyAyIDogMDtcbiAgICBcbiAgICAgICAgICAgICAgICBpZiAoeHkgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WS52YWx1ZSA9IHRoaXMudXRpbC5nZXROdW1iZXIoY29udGV4dFBsdWdpbi5fcmF0aW9ZICogdGhpcy51dGlsLmdldE51bWJlcihjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZSwgZGVjKSwgZGVjKSArIHlVbml0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0gdGhpcy51dGlsLmdldE51bWJlcihjb250ZXh0UGx1Z2luLl9yYXRpb1ggKiB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlLCBkZWMpLCBkZWMpICsgeFVuaXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBpbiBcInNldFJhdGlvXCIgKGlucHV0IGFuZCBwcm9wb3J0aW9uQ2hlY2sgdGFncyBjaGFuZ2VFdmVudCksIFxuICAgICAgICAgKiBjaGVja3MgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCB0YWcsIGNhbGN1bGF0ZXMgdGhlIHJhdGlvLCBhbmQgcmVzZXRzIGl0IGluIHRoZSBpbnB1dCB0YWcuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXG4gICAgICAgICAqL1xuICAgICAgICBfbW9kdWxlX3NldFJhdGlvOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbikge1xuICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWU7XG4gICAgICAgICAgICBjb25zdCB5VmFsdWUgPSBjb250ZXh0UGx1Z2luLmlucHV0WS52YWx1ZTtcbiAgICBcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLnByb3BvcnRpb24uY2hlY2tlZCAmJiAvXFxkKy8udGVzdCh4VmFsdWUpICYmIC9cXGQrLy50ZXN0KHlWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4VW5pdCA9IHhWYWx1ZS5yZXBsYWNlKC9cXGQrfFxcLi9nLCAnJykgfHwgY29udGV4dFBsdWdpbi5zaXplVW5pdDtcbiAgICAgICAgICAgICAgICBjb25zdCB5VW5pdCA9IHlWYWx1ZS5yZXBsYWNlKC9cXGQrfFxcLi9nLCAnJykgfHwgY29udGV4dFBsdWdpbi5zaXplVW5pdDtcbiAgICBcbiAgICAgICAgICAgICAgICBpZiAoeFVuaXQgIT09IHlVbml0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uX3JhdGlvID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY29udGV4dFBsdWdpbi5fcmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMudXRpbC5nZXROdW1iZXIoeFZhbHVlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHRoaXMudXRpbC5nZXROdW1iZXIoeVZhbHVlLCAwKTtcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW8gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpb1ggPSB4IC8geTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW9ZID0geSAvIHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpbyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldmVydCBzaXplIG9mIGVsZW1lbnQgdG8gb3JpZ2luIHNpemUgKHBsdWdpbi5fb3JpZ2luX3csIHBsdWdpbi5fb3JpZ2luX2gpXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXG4gICAgICAgICAqL1xuICAgICAgICBfbW9kdWxlX3NpemVSZXZlcnQ6IGZ1bmN0aW9uIChjb250ZXh0UGx1Z2luKSB7XG4gICAgICAgICAgICBpZiAoY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZSA9IGNvbnRleHRQbHVnaW4uX29yaWdpbl93ID4gMTAwID8gMTAwIDogY29udGV4dFBsdWdpbi5fb3JpZ2luX3c7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0gY29udGV4dFBsdWdpbi5fb3JpZ2luX3c7XG4gICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFkudmFsdWUgPSBjb250ZXh0UGx1Z2luLl9vcmlnaW5faDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTYXZlIHRoZSBzaXplIGRhdGEgKGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1zaXplXCIpKVxuICAgICAgICAgKiBVc2VkIGF0IHRoZSBcInNldFNpemVcIiBtZXRob2RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRQbHVnaW4gY29udGV4dCBvYmplY3Qgb2YgcGx1Z2luIChjb3JlLmNvbnRleHRbcGx1Z2luXSlcbiAgICAgICAgICovXG4gICAgICAgIF9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbikge1xuICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVYLmNhbGwodGhpcywgY29udGV4dFBsdWdpbik7XG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVkuY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luKTtcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNpemUnLCB4ICsgJywnICsgeSk7XG4gICAgICAgICAgICBpZiAoISFjb250ZXh0UGx1Z2luLl92aWRlb1JhdGlvKSBjb250ZXh0UGx1Z2luLl92aWRlb1JhdGlvID0geTtcbiAgICAgICAgfSxcbiAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsIHRoZSByZXNpemluZyBtb2R1bGVcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXRFbGVtZW50IFJlc2l6aW5nIHRhcmdldCBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW4gUGx1Z2luIG5hbWVcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gU2l6ZSBvZiByZXNpemluZyBkaXYge3csIGgsIHQsIGx9XG4gICAgICAgICAqL1xuICAgICAgICBjYWxsX2NvbnRyb2xsZXJfcmVzaXplOiBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCwgcGx1Z2luKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0UmVzaXppbmcgPSB0aGlzLmNvbnRleHQucmVzaXppbmc7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0UGx1Z2luID0gdGhpcy5jb250ZXh0W3BsdWdpbl07XG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gPSBwbHVnaW47XG4gICAgXG4gICAgICAgICAgICBjb25zdCByZXNpemVDb250YWluZXIgPSBjb250ZXh0UmVzaXppbmcucmVzaXplQ29udGFpbmVyO1xuICAgICAgICAgICAgY29uc3QgcmVzaXplRGl2ID0gY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpdjtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMudXRpbC5nZXRPZmZzZXQodGFyZ2V0RWxlbWVudCwgdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSBjb250ZXh0UmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID0gL14oOTB8MjcwKSQvLnRlc3QoTWF0aC5hYnModGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlJykpLnRvU3RyaW5nKCkpO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgdyA9IGlzVmVydGljYWwgPyB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCA6IHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoID0gaXNWZXJ0aWNhbCA/IHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGggOiB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBvZmZzZXQudG9wO1xuICAgICAgICAgICAgY29uc3QgbCA9IG9mZnNldC5sZWZ0IC0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnNjcm9sbExlZnQ7XG4gICAgXG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUudG9wID0gdCArICdweCc7XG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUubGVmdCA9IGwgKyAncHgnO1xuICAgICAgICAgICAgcmVzaXplQ29udGFpbmVyLnN0eWxlLndpZHRoID0gdyArICdweCc7XG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gaCArICdweCc7XG4gICAgXG4gICAgICAgICAgICByZXNpemVEaXYuc3R5bGUudG9wID0gJzBweCc7XG4gICAgICAgICAgICByZXNpemVEaXYuc3R5bGUubGVmdCA9ICcwcHgnO1xuICAgICAgICAgICAgcmVzaXplRGl2LnN0eWxlLndpZHRoID0gIHcgKyAncHgnO1xuICAgICAgICAgICAgcmVzaXplRGl2LnN0eWxlLmhlaWdodCA9ICBoICsgJ3B4JztcbiAgICBcbiAgICAgICAgICAgIGxldCBhbGlnbiA9IHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWFsaWduJykgfHwgJ2Jhc2ljJztcbiAgICAgICAgICAgIGFsaWduID0gYWxpZ24gPT09ICdub25lJyA/ICdiYXNpYycgOiBhbGlnbjtcbiAgICBcbiAgICAgICAgICAgIC8vIHRleHRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldEVsZW1lbnQsIHRoaXMudXRpbC5pc0NvbXBvbmVudCk7XG4gICAgICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldEVsZW1lbnQsICdGSUdVUkUnKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlYID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVguY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luLCB0YXJnZXRFbGVtZW50LCBjb3ZlciwgY29udGFpbmVyKSB8fCAnYXV0byc7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5WSA9IGNvbnRleHRQbHVnaW4uX29ubHlQZXJjZW50YWdlICYmIHBsdWdpbiA9PT0gJ2ltYWdlJyA/ICcnIDogJywgJyArICh0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHRQbHVnaW4sIHRhcmdldEVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpIHx8ICdhdXRvJyk7XG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KGNvbnRleHRSZXNpemluZy5yZXNpemVEaXNwbGF5LCB0aGlzLmxhbmcuZGlhbG9nQm94W2FsaWduXSArICcgKCcgKyBkaXNwbGF5WCArIGRpc3BsYXlZICsgJyknKTtcbiAgICBcbiAgICAgICAgICAgIC8vIHJlc2l6aW5nIGRpc3BsYXlcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVCdXR0b25Hcm91cC5zdHlsZS5kaXNwbGF5ID0gY29udGV4dFBsdWdpbi5fcmVzaXppbmcgPyAnJyA6ICdub25lJztcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZURvdFNob3cgPSBjb250ZXh0UGx1Z2luLl9yZXNpemluZyAmJiAhY29udGV4dFBsdWdpbi5fcmVzaXplRG90SGlkZSAmJiAhY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UgPyAnZmxleCcgOiAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCByZXNpemVIYW5kbGVzID0gY29udGV4dFJlc2l6aW5nLnJlc2l6ZUhhbmRsZXM7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVzaXplSGFuZGxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXNbaV0uc3R5bGUuZGlzcGxheSA9IHJlc2l6ZURvdFNob3c7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAoY29udGV4dFBsdWdpbi5fcmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGlvbnMgPSBjb250ZXh0UmVzaXppbmcucm90YXRpb25CdXR0b25zO1xuICAgICAgICAgICAgICAgIHJvdGF0aW9uc1swXS5zdHlsZS5kaXNwbGF5ID0gcm90YXRpb25zWzFdLnN0eWxlLmRpc3BsYXkgPSBjb250ZXh0UGx1Z2luLl9yb3RhdGlvbiA/ICcnIDogJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgLy8gYWxpZ24gaWNvblxuICAgICAgICAgICAgY29uc3QgYWxpZ25MaXN0ID0gY29udGV4dFJlc2l6aW5nLmFsaWduTWVudUxpc3Q7XG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlRWxlbWVudChjb250ZXh0UmVzaXppbmcuYWxpZ25CdXR0b24uZmlyc3RFbGVtZW50Q2hpbGQsIGNvbnRleHRSZXNpemluZy5hbGlnbkljb25zW2FsaWduXSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWxpZ25MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWduTGlzdFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSA9PT0gYWxpZ24pIHRoaXMudXRpbC5hZGRDbGFzcyhhbGlnbkxpc3RbaV0sICdvbicpO1xuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGFsaWduTGlzdFtpXSwgJ29uJyk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAvLyBwZXJjZW50YWdlIGFjdGl2ZVxuICAgICAgICAgICAgY29uc3QgcEJ1dHRvbnMgPSBjb250ZXh0UmVzaXppbmcucGVyY2VudGFnZUJ1dHRvbnM7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IC8lJC8udGVzdCh0YXJnZXRFbGVtZW50LnN0eWxlLndpZHRoKSAmJiAvJSQvLnRlc3QoY29udGFpbmVyLnN0eWxlLndpZHRoKSA/ICh0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRhaW5lci5zdHlsZS53aWR0aCwgMCkgLyAxMDApICsgJycgOiAnJyA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcEJ1dHRvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocEJ1dHRvbnNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhwQnV0dG9uc1tpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhwQnV0dG9uc1tpXSwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIC8vIGNhcHRpb24gZGlzcGxheSwgYWN0aXZlXG4gICAgICAgICAgICBpZiAoIWNvbnRleHRQbHVnaW4uX2NhcHRpb25TaG93KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLmNhcHRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLmNhcHRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KHRhcmdldEVsZW1lbnQucGFyZW50Tm9kZSwgJ2ZpZ2NhcHRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dFJlc2l6aW5nLmNhcHRpb25CdXR0b24sICdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fY2FwdGlvbkNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0UmVzaXppbmcuY2FwdGlvbkJ1dHRvbiwgJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9jYXB0aW9uQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzaXplQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgICAgICBjb25zdCBhZGRPZmZzZXQgPSB7bGVmdDogMCwgdG9wOiA1MH07XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlmcmFtZSkge1xuICAgICAgICAgICAgICAgIGFkZE9mZnNldC5sZWZ0IC09IHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgYWRkT2Zmc2V0LnRvcCAtPSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUucGFyZW50RWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbGxlclBvc2l0aW9uKGNvbnRleHRSZXNpemluZy5yZXNpemVCdXR0b24sIHJlc2l6ZUNvbnRhaW5lciwgJ2JvdHRvbScsIGFkZE9mZnNldCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT24ocmVzaXplQ29udGFpbmVyLCBjb250ZXh0UmVzaXppbmcucmVzaXplQnV0dG9uLCB0aGlzLnV0aWwuc2V0RGlzYWJsZWRCdXR0b25zLmJpbmQodGhpcywgZmFsc2UsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpLCB0YXJnZXRFbGVtZW50LCBwbHVnaW4pO1xuICAgICAgICAgICAgdGhpcy51dGlsLnNldERpc2FibGVkQnV0dG9ucyh0cnVlLCB0aGlzLnJlc2l6aW5nRGlzYWJsZWRCdXR0b25zKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplX3cgPSB3O1xuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yZXNpemVfaCA9IGg7XG4gICAgXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5TaXplID0gKHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScpIHx8ICcnKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9vcmlnaW5fdyA9IG9yaWdpblNpemVbMF0gfHwgdGFyZ2V0RWxlbWVudC5uYXR1cmFsV2lkdGg7XG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX29yaWdpbl9oID0gb3JpZ2luU2l6ZVsxXSB8fCB0YXJnZXRFbGVtZW50Lm5hdHVyYWxIZWlnaHQ7XG4gICAgXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHc6IHcsXG4gICAgICAgICAgICAgICAgaDogaCxcbiAgICAgICAgICAgICAgICB0OiB0LFxuICAgICAgICAgICAgICAgIGw6IGxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIF9jbG9zZUFsaWduTWVudTogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE9wZW4gYWxpZ24gc3VibWVudSBvZiBtb2R1bGVcbiAgICAgICAgICovXG4gICAgICAgIG9wZW5BbGlnbk1lbnU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsaWduQnV0dG9uID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLmFsaWduQnV0dG9uO1xuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGFsaWduQnV0dG9uLCAnb24nKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUuc3R5bGUudG9wID0gKGFsaWduQnV0dG9uLm9mZnNldFRvcCArIGFsaWduQnV0dG9uLm9mZnNldEhlaWdodCkgKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudS5zdHlsZS5sZWZ0ID0gKGFsaWduQnV0dG9uLm9mZnNldExlZnQgLSBhbGlnbkJ1dHRvbi5vZmZzZXRXaWR0aCAvIDIpICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25CdXR0b24sICdvbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdjbGljaycsIHRoaXMucGx1Z2lucy5yZXNpemluZy5fY2xvc2VBbGlnbk1lbnUpO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fY2xvc2VBbGlnbk1lbnUgPSBudWxsO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgnY2xpY2snLCB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51KTtcbiAgICAgICAgfSxcbiAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDbGljayBldmVudCBvZiByZXNpemluZyB0b29sYmFyXG4gICAgICAgICAqIFBlcmZvcm1zIHRoZSBhY3Rpb24gb2YgdGhlIGNsaWNrZWQgdG9vbGJhciBidXR0b24uXG4gICAgICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZSBFdmVudCBvYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIG9uQ2xpY2tfcmVzaXplQnV0dG9uOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpIHx8IHRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XG4gICAgXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8IHRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbjtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dEVsID0gY3VycmVudENvbnRleHQuX2VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgIFxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9jbG9zZUFsaWduTWVudSgpO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kID09PSAnb25hbGlnbicpIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBjb250ZXh0RWwpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3BlcmNlbnQnOlxuICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudFkgPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGN1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBjb250ZXh0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJjZW50YWdlKSBwZXJjZW50WSA9IHBlcmNlbnRhZ2Uuc3BsaXQoJywnKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzZXRUcmFuc2Zvcm0uY2FsbCh0aGlzLCBjb250ZXh0RWwpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgKHZhbHVlICogMTAwKSwgKHRoaXMudXRpbC5nZXROdW1iZXIocGVyY2VudFksIDApID09PSBudWxsIHx8ICEvJSQvLnRlc3QocGVyY2VudFkpKSA/ICcnIDogcGVyY2VudFkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtaXJyb3InOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnKSB8fCAnMCc7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4ID0gY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGVYJykgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGxldCB5ID0gY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGVZJykgfHwgJyc7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlID09PSAnaCcgJiYgIXRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwpIHx8ICh2YWx1ZSA9PT0gJ3YnICYmIHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0geSA/ICcnIDogJzE4MCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0geCA/ICcnIDogJzE4MCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWCcsIHgpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0RWwuc2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZVknLCB5KTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fc2V0VHJhbnNGb3JtKGNvbnRleHRFbCwgciwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JvdGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHRSZXNpemluZyA9IHRoaXMuY29udGV4dC5yZXNpemluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2xvcGUgPSAoY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnKSAqIDEpICsgKHZhbHVlICogMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZyA9IHRoaXMuX3cuTWF0aC5hYnMoc2xvcGUpID49IDM2MCA/IDAgOiBzbG9wZTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlJywgZGVnKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA9IC9eKDkwfDI3MCkkLy50ZXN0KHRoaXMuX3cuTWF0aC5hYnMoZGVnKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnNldFRyYW5zZm9ybVNpemUuY2FsbCh0aGlzLCBjb250ZXh0RWwsIG51bGwsIG51bGwpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoY29udGV4dEVsLCBwbHVnaW5OYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb25hbGlnbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5vcGVuQWxpZ25NZW51LmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdhbGlnbic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsaWduVmFsdWUgPSB2YWx1ZSA9PT0gJ2Jhc2ljJyA/ICdub25lJyA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldEFsaWduLmNhbGwodGhpcywgYWxpZ25WYWx1ZSwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gIWN1cnJlbnRDb250ZXh0Ll9jYXB0aW9uQ2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZHVsZS5vcGVuTW9kaWZ5LmNhbGwodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0Ll9jYXB0aW9uQ2hlY2tlZCA9IGN1cnJlbnRDb250ZXh0LmNhcHRpb25DaGVja0VsLmNoZWNrZWQgPSBjYXB0aW9uO1xuICAgIFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnVwZGF0ZV9pbWFnZS5jYWxsKHRoaXMsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FwdGlvblRleHQgPSB0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KGN1cnJlbnRDb250ZXh0Ll9jYXB0aW9uLCBmdW5jdGlvbiAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Lm5vZGVUeXBlID09PSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcHRpb25UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRleHQuX2NhcHRpb24uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShjYXB0aW9uVGV4dCwgMCwgY2FwdGlvblRleHQsIGNhcHRpb25UZXh0LnRleHRDb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZHVsZS5vcGVuTW9kaWZ5LmNhbGwodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncmV2ZXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vZHVsZS5zZXRPcmlnaW5TaXplLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUub3Blbk1vZGlmeS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplIHRoZSB0cmFuc2Zvcm0gc3R5bGUgKHJvdGF0aW9uKSBvZiB0aGUgZWxlbWVudC5cbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICByZXNldFRyYW5zZm9ybTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpIHx8ICcnKS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA9IGZhbHNlO1xuICAgIFxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJyc7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnLCAnJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGVYJywgJycpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWScsICcnKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldFNpemUuY2FsbCh0aGlzLCBzaXplWzBdID8gc2l6ZVswXSA6ICdhdXRvJywgc2l6ZVsxXSA/IHNpemVbMV0gOiAnJywgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHRoZSB0cmFuc2Zvcm0gc3R5bGUgKHJvdGF0aW9uKSBvZiB0aGUgZWxlbWVudC5cbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfG51bGx9IHdpZHRoIEVsZW1lbnQncyB3aWR0aCBzaXplXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfG51bGx9IGhlaWdodCBFbGVtZW50J3MgaGVpZ2h0IHNpemVcbiAgICAgICAgICovXG4gICAgICAgIHNldFRyYW5zZm9ybVNpemU6IGZ1bmN0aW9uIChlbGVtZW50LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsO1xuICAgICAgICAgICAgY29uc3QgZGVnID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlJykgKiAxO1xuICAgICAgICAgICAgbGV0IHRyYW5zT3JpZ2luID0gJyc7XG4gICAgXG4gICAgICAgICAgICBpZiAocGVyY2VudGFnZSAmJiAhaXNWZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2VbMF0gPT09ICdhdXRvJyAmJiBwZXJjZW50YWdlWzFdID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zW3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uc2V0QXV0b1NpemUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNbdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luXS5zZXRQZXJjZW50U2l6ZS5jYWxsKHRoaXMsIHBlcmNlbnRhZ2VbMF0sIHBlcmNlbnRhZ2VbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCAnRklHVVJFJyk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFcgPSB3aWR0aCB8fCBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEggPSBoZWlnaHQgfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdyA9IChpc1ZlcnRpY2FsID8gb2Zmc2V0SCA6IG9mZnNldFcpICsgJ3B4JztcbiAgICAgICAgICAgICAgICBjb25zdCBoID0gKGlzVmVydGljYWwgPyBvZmZzZXRXIDogb2Zmc2V0SCkgKyAncHgnO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNbdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luXS5jYW5jZWxQZXJjZW50QXR0ci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldFNpemUuY2FsbCh0aGlzLCBvZmZzZXRXICsgJ3B4Jywgb2Zmc2V0SCArICdweCcsIHRydWUpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICBjb3Zlci5zdHlsZS53aWR0aCA9IHc7XG4gICAgICAgICAgICAgICAgY292ZXIuc3R5bGUuaGVpZ2h0ID0gKCEhdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uX2NhcHRpb24gPyAnJyA6IGgpO1xuICAgIFxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc1cgPSAob2Zmc2V0Vy8yKSArICdweCAnICsgKG9mZnNldFcvMikgKyAncHggMCc7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc0ggPSAob2Zmc2V0SC8yKSArICdweCAnICsgKG9mZnNldEgvMikgKyAncHggMCc7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zT3JpZ2luID0gZGVnID09PSA5MCB8fCBkZWcgPT09IC0yNzAgPyB0cmFuc0ggOiB0cmFuc1c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSB0cmFuc09yaWdpbjtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fc2V0VHJhbnNGb3JtKGVsZW1lbnQsIGRlZy50b1N0cmluZygpLCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGVYJykgfHwgJycsIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZVknKSB8fCAnJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJ25vbmUnO1xuICAgICAgICAgICAgZWxzZSBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XG4gICAgXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuc2V0Q2FwdGlvblBvc2l0aW9uLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIF9zZXRUcmFuc0Zvcm06IGZ1bmN0aW9uIChlbGVtZW50LCByLCB4LCB5KSB7XG4gICAgICAgICAgICBsZXQgd2lkdGggPSAoZWxlbWVudC5vZmZzZXRXaWR0aCAtIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSAqICgvLS8udGVzdChyKSA/IDEgOiAtMSk7XG4gICAgICAgICAgICBsZXQgdHJhbnNsYXRlID0gJyc7XG4gICAgXG4gICAgICAgICAgICBpZiAoL1sxLTldLy50ZXN0KHIpICYmICh4IHx8IHkpKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlID0geCA/ICdZJyA6ICdYJztcbiAgICBcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlID0geCAmJiB5ID8gJ1gnIDogeSA/IHRyYW5zbGF0ZSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzI3MCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAqPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSA9IHggJiYgeSA/ICdZJyA6IHggPyB0cmFuc2xhdGUgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICctOTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlID0geCAmJiB5ID8gJ1knIDogeCA/IHRyYW5zbGF0ZSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy0yNzAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgPSB4ICYmIHkgPyAnWCcgOiB5ID8gdHJhbnNsYXRlIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGlmIChyICUgMTgwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICdyb3RhdGUoJyArIHIgKyAnZGVnKScgKyAoeCA/ICcgcm90YXRlWCgnICsgeCArICdkZWcpJyA6ICcnKSArICh5ID8gJyByb3RhdGVZKCcgKyB5ICsgJ2RlZyknIDogJycpICsgKHRyYW5zbGF0ZSA/ICcgdHJhbnNsYXRlJyArIHRyYW5zbGF0ZSArICcoJyArIHdpZHRoICsgJ3B4KScgOiAnJyk7XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHBvc2l0aW9uIG9mIHRoZSBjYXB0aW9uIGlzIHNldCBhdXRvbWF0aWNhbGx5LlxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnQgKG5vdCBjYXB0aW9uIGVsZW1lbnQpXG4gICAgICAgICAqL1xuICAgICAgICBzZXRDYXB0aW9uUG9zaXRpb246IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmaWdjYXB0aW9uID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudCh0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCAnRklHVVJFJyksICdGSUdDQVBUSU9OJyk7XG4gICAgICAgICAgICBpZiAoZmlnY2FwdGlvbikge1xuICAgICAgICAgICAgICAgIGZpZ2NhcHRpb24uc3R5bGUubWFyZ2luVG9wID0gKHRoaXMuY29udGV4dC5yZXNpemluZy5fcm90YXRlVmVydGljYWwgPyBlbGVtZW50Lm9mZnNldFdpZHRoIC0gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiAwKSArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTW91c2UgZG93biBldmVudCBvZiByZXNpemUgaGFuZGxlc1xuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0IFxuICAgICAgICAgKi9cbiAgICAgICAgb25Nb3VzZURvd25fcmVzaXplX2hhbmRsZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRSZXNpemluZyA9IHRoaXMuY29udGV4dC5yZXNpemluZztcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNvbnRleHRSZXNpemluZy5fcmVzaXplX2RpcmVjdGlvbiA9IGUudGFyZ2V0LmNsYXNzTGlzdFswXTtcbiAgICBcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WCA9IGUuY2xpZW50WDtcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WSA9IGUuY2xpZW50WTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbGVtZW50LnJlc2l6ZUJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcucmVzaXplQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLmZsb2F0ID0gL2wvLnRlc3QoZGlyZWN0aW9uKSA/ICdyaWdodCcgOiAvci8udGVzdChkaXJlY3Rpb24pID8gJ2xlZnQnIDogJ25vbmUnO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgY2xvc3VyZUZ1bmNfYmluZCA9IGZ1bmN0aW9uIGNsb3N1cmVGdW5jKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xuICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IGNvbnRleHRSZXNpemluZy5faXNDaGFuZ2U7XG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9pc0NoYW5nZSA9IGZhbHNlO1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ21vdXNlbW92ZScsIHJlc2l6aW5nX2VsZW1lbnRfYmluZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnbW91c2V1cCcsIGNsb3N1cmVGdW5jX2JpbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ2tleWRvd24nLCBjbG9zdXJlRnVuY19iaW5kKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZWxlbWVudC5yZXNpemVCYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLmluaXQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50IHJlc2l6ZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuY2FuY2VsX2NvbnRyb2xsZXJfcmVzaXplLmNhbGwodGhpcywgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlKSB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgcmVzaXppbmdfZWxlbWVudF9iaW5kID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2l6aW5nX2VsZW1lbnQuYmluZCh0aGlzLCBjb250ZXh0UmVzaXppbmcsIGRpcmVjdGlvbiwgdGhpcy5jb250ZXh0W2NvbnRleHRSZXNpemluZy5fcmVzaXplX3BsdWdpbl0pO1xuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgnbW91c2Vtb3ZlJywgcmVzaXppbmdfZWxlbWVudF9iaW5kKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ21vdXNldXAnLCBjbG9zdXJlRnVuY19iaW5kKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ2tleWRvd24nLCBjbG9zdXJlRnVuY19iaW5kKTtcbiAgICAgICAgfSxcbiAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBNb3VzZSBtb3ZlIGV2ZW50IGFmdGVyIGNhbGwgXCJvbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlXCIgb2YgcmVzaXplIGhhbmRsZXNcbiAgICAgICAgICogVGhlIHNpemUgb2YgdGhlIG1vZHVsZSdzIFwiZGl2XCIgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtb3VzZSBtb3ZlIGV2ZW50LlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFJlc2l6aW5nIFwiY29yZS5jb250ZXh0LnJlc2l6aW5nXCIgb2JqZWN0IChiaW5kaW5nIGFyZ3VtZW50KVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0aW9uIERpcmVjdGlvbiAoXCJ0bFwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcImx3XCIsIFwidGhcIiwgXCJyd1wiLCBcImJoXCIpIChiaW5kaW5nIGFyZ3VtZW50KVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luIFwiY29yZS5jb250ZXh0W2N1cnJlbnRQbHVnaW5dXCIgb2JqZWN0IChiaW5kaW5nIGFyZ3VtZW50KVxuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICByZXNpemluZ19lbGVtZW50OiBmdW5jdGlvbiAoY29udGV4dFJlc2l6aW5nLCBkaXJlY3Rpb24sIHBsdWdpbiwgZSkge1xuICAgICAgICAgICAgY29uc3QgY2xpZW50WCA9IGUuY2xpZW50WDtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudFkgPSBlLmNsaWVudFk7XG4gICAgXG4gICAgICAgICAgICBsZXQgcmVzdWx0VyA9IHBsdWdpbi5fZWxlbWVudF93O1xuICAgICAgICAgICAgbGV0IHJlc3VsdEggPSBwbHVnaW4uX2VsZW1lbnRfaDtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IHcgPSBwbHVnaW4uX2VsZW1lbnRfdyArICgvci8udGVzdChkaXJlY3Rpb24pID8gY2xpZW50WCAtIGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WCA6IGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WCAtIGNsaWVudFgpO1xuICAgICAgICAgICAgY29uc3QgaCA9IHBsdWdpbi5fZWxlbWVudF9oICsgKC9iLy50ZXN0KGRpcmVjdGlvbikgPyBjbGllbnRZIC0gY29udGV4dFJlc2l6aW5nLl9yZXNpemVDbGllbnRZIDogY29udGV4dFJlc2l6aW5nLl9yZXNpemVDbGllbnRZIC0gY2xpZW50WSk7XG4gICAgICAgICAgICBjb25zdCB3aCA9ICgocGx1Z2luLl9lbGVtZW50X2ggLyBwbHVnaW4uX2VsZW1lbnRfdykgKiB3KTtcbiAgICBcbiAgICAgICAgICAgIGlmICgvdC8udGVzdChkaXJlY3Rpb24pKSBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLnRvcCA9IChwbHVnaW4uX2VsZW1lbnRfaCAtICgvaC8udGVzdChkaXJlY3Rpb24pID8gaCA6IHdoKSkgKyAncHgnO1xuICAgICAgICAgICAgaWYgKC9sLy50ZXN0KGRpcmVjdGlvbikpIGNvbnRleHRSZXNpemluZy5yZXNpemVEaXYuc3R5bGUubGVmdCA9IChwbHVnaW4uX2VsZW1lbnRfdyAtIHcpICsgJ3B4JztcbiAgICBcbiAgICAgICAgICAgIGlmICgvcnxsLy50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLndpZHRoID0gdyArICdweCc7XG4gICAgICAgICAgICAgICAgcmVzdWx0VyA9IHc7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAoL14odHxiKVteaF0kLy50ZXN0KGRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLmhlaWdodCA9IHdoICsgJ3B4JztcbiAgICAgICAgICAgICAgICByZXN1bHRIID0gd2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgvXih0fGIpaCQvLnRlc3QoZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVEaXYuc3R5bGUuaGVpZ2h0ID0gaCArICdweCc7XG4gICAgICAgICAgICAgICAgcmVzdWx0SCA9IGg7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZV93ID0gcmVzdWx0VztcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplX2ggPSByZXN1bHRIO1xuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dChjb250ZXh0UmVzaXppbmcucmVzaXplRGlzcGxheSwgdGhpcy5fdy5NYXRoLnJvdW5kKHJlc3VsdFcpICsgJyB4ICcgKyB0aGlzLl93Lk1hdGgucm91bmQocmVzdWx0SCkpO1xuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9pc0NoYW5nZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVzaXplIHRoZSBlbGVtZW50IHRvIHRoZSBzaXplIG9mIHRoZSBcImRpdlwiIGFkanVzdGVkIGluIHRoZSBcInJlc2l6aW5nX2VsZW1lbnRcIiBtZXRob2QuXG4gICAgICAgICAqIENhbGxlZCBhdCB0aGUgbW91c2UtdXAgZXZlbnQgcmVnaXN0ZXJlZCBpbiBcIm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGVcIi5cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdGlvbiBEaXJlY3Rpb24gKFwidGxcIiwgXCJ0clwiLCBcImJsXCIsIFwiYnJcIiwgXCJsd1wiLCBcInRoXCIsIFwicndcIiwgXCJiaFwiKVxuICAgICAgICAgKi9cbiAgICAgICAgY2FuY2VsX2NvbnRyb2xsZXJfcmVzaXplOiBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbDtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbGVtZW50LnJlc2l6ZUJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5fdy5NYXRoLnJvdW5kKGlzVmVydGljYWwgPyB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9oIDogdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfdyk7XG4gICAgICAgICAgICBsZXQgaCA9IHRoaXMuX3cuTWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfdyA6IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX2gpO1xuICAgIFxuICAgICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsICYmICEvJSQvLnRlc3QodykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMTY7XG4gICAgICAgICAgICAgICAgY29uc3QgbGltaXQgPSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuY2xpZW50V2lkdGggLSAocGFkZGluZyAqIDIpIC0gMjtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51dGlsLmdldE51bWJlcih3LCAwKSA+IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGggPSB0aGlzLl93Lk1hdGgucm91bmQoKGggLyB3KSAqIGxpbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgdyA9IGxpbWl0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW47XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV0uc2V0U2l6ZS5jYWxsKHRoaXMsIHcsIGgsIGZhbHNlLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgaWYgKGlzVmVydGljYWwpIHRoaXMucGx1Z2lucy5yZXNpemluZy5zZXRUcmFuc2Zvcm1TaXplLmNhbGwodGhpcywgdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uX2VsZW1lbnQsIHcsIGgpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudCh0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uX2VsZW1lbnQsIHBsdWdpbk5hbWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2Ygbm9HbG9iYWwgPT09IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdTVU5FRElUT1JfTU9EVUxFUycsIHtcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAncmVzaXppbmcnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiByZXNpemluZ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzaXppbmc7XG59KSk7IiwiLypcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxuICpcbiAqIHN1bmVkaXRvci5qc1xuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cbiAqIE1JVCBsaWNlbnNlLlxuICovXG4ndXNlIHN0cmljdCc7XG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF3LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX01PRFVMRVMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KHcpO1xuICAgICAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmYWN0b3J5KGdsb2JhbCk7XG4gICAgfVxufSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uICh3aW5kb3csIG5vR2xvYmFsKSB7XG4gICAgY29uc3QgZmlsZU1hbmFnZXIgPSB7XG4gICAgICAgIG5hbWU6ICdmaWxlTWFuYWdlcicsXG4gICAgICAgIF94bWxIdHRwOiBudWxsLFxuXG4gICAgICAgIF9jaGVja01lZGlhQ29tcG9uZW50OiBmdW5jdGlvbiAodGFnKSB7XG4gICAgICAgICAgICBpZiAoL0lNRy9pLnRlc3QodGFnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhL0ZJR1VSRS9pLnRlc3QodGFnLnBhcmVudEVsZW1lbnQubm9kZU5hbWUpIHx8ICEvRklHVVJFL2kudGVzdCh0YWcucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm5vZGVOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL1ZJREVPL2kudGVzdCh0YWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEvRklHVVJFL2kudGVzdCh0YWcucGFyZW50RWxlbWVudC5ub2RlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFVwbG9hZCB0aGUgZmlsZSB0byB0aGUgc2VydmVyLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXBsb2FkVXJsIFVwbG9hZCBzZXJ2ZXIgdXJsXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IHVwbG9hZEhlYWRlciBSZXF1ZXN0IGhlYWRlclxuICAgICAgICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YSBGb3JtRGF0YSBpbiBib2R5XG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gY2FsbEJhY2sgU3VjY2VzcyBjYWxsIGJhY2sgZnVuY3Rpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBlcnJvckNhbGxCYWNrIEVycm9yIGNhbGwgYmFjayBmdW5jdGlvblxuICAgICAgICAgKiBAZXhhbXBsZSB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgaW1hZ2VVcGxvYWRVcmwsIHRoaXMub3B0aW9ucy5pbWFnZVVwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy5pbWFnZS5jYWxsQmFja19pbWdVcGxvYWQuYmluZCh0aGlzLCBpbmZvKSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yKTtcbiAgICAgICAgICovXG4gICAgICAgIHVwbG9hZDogZnVuY3Rpb24gKHVwbG9hZFVybCwgdXBsb2FkSGVhZGVyLCBmb3JtRGF0YSwgY2FsbEJhY2ssIGVycm9yQ2FsbEJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXI7XG4gICAgICAgICAgICBjb25zdCB4bWxIdHRwID0gZmlsZVBsdWdpbi5feG1sSHR0cCA9IHRoaXMudXRpbC5nZXRYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZpbGVQbHVnaW4uX2NhbGxCYWNrVXBsb2FkLmJpbmQodGhpcywgeG1sSHR0cCwgY2FsbEJhY2ssIGVycm9yQ2FsbEJhY2spO1xuICAgICAgICAgICAgeG1sSHR0cC5vcGVuKCdwb3N0JywgdXBsb2FkVXJsLCB0cnVlKTtcbiAgICAgICAgICAgIGlmKHVwbG9hZEhlYWRlciAhPT0gbnVsbCAmJiB0eXBlb2YgdXBsb2FkSGVhZGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLl93Lk9iamVjdC5rZXlzKHVwbG9hZEhlYWRlcikubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gdXBsb2FkSGVhZGVyKXtcbiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdXBsb2FkSGVhZGVyW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhtbEh0dHAuc2VuZChmb3JtRGF0YSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2NhbGxCYWNrVXBsb2FkOiBmdW5jdGlvbiAoeG1sSHR0cCwgY2FsbEJhY2ssIGVycm9yQ2FsbEJhY2spIHtcbiAgICAgICAgICAgIGlmICh4bWxIdHRwLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAoeG1sSHR0cC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEJhY2soeG1sSHR0cCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmZpbGVNYW5hZ2VyLnVwbG9hZC5jYWxsQmFjay5mYWlsXSBjYXVzZSA6IFwiJyArIGUubWVzc2FnZSArICdcIicpO1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGV4Y2VwdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSAheG1sSHR0cC5yZXNwb25zZVRleHQgPyB4bWxIdHRwIDogSlNPTi5wYXJzZSh4bWxIdHRwLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3JDYWxsQmFjayAhPT0gJ2Z1bmN0aW9uJyB8fCBlcnJvckNhbGxCYWNrKCcnLCByZXMsIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi5maWxlTWFuYWdlci51cGxvYWQuc2VydmVyRXhjZXB0aW9uXSBzdGF0dXM6ICcgKyB4bWxIdHRwLnN0YXR1cyArICcsIHJlc3BvbnNlOiAnICsgKHJlcy5lcnJvck1lc3NhZ2UgfHwgeG1sSHR0cC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tlIHRoZSBmaWxlJ3MgaW5mb3JtYXRpb24gYW5kIG1vZGlmeSB0aGUgdGFnIHRoYXQgZG9lcyBub3QgZml0IHRoZSBmb3JtYXQuXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFBsdWdpbiBuYW1lXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHRhZ05hbWVzIFRhZyBhcnJheSB0byBjaGVja1xuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHVwbG9hZEV2ZW50SGFuZGxlciBFdmVudCBoYW5kbGVyIHRvIHByb2Nlc3MgdXBkYXRlZCBmaWxlIGluZm8gYWZ0ZXIgY2hlY2tpbmcgKHVzZWQgaW4gXCJzZXRJbmZvXCIpXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1vZGlmeUhhbmRsZXIgQSBmdW5jdGlvbiB0byBtb2RpZnkgYSB0YWcgdGhhdCBkb2VzIG5vdCBmaXQgdGhlIGZvcm1hdCAoQXJndW1lbnQgdmFsdWU6IFRhZyBlbGVtZW50KVxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlc2l6aW5nIFRydWUgaWYgdGhlIHBsdWdpbiBpcyB1c2luZyBhIHJlc2l6aW5nIG1vZHVsZVxuICAgICAgICAgKiBAZXhhbXBsZSBcbiAgICAgICAgICogY29uc3QgbW9kaWZ5SGFuZGxlciA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgICogICAgICBpbWFnZVBsdWdpbi5vbk1vZGlmeU1vZGUuY2FsbCh0aGlzLCB0YWcsIG51bGwpO1xuICAgICAgICAgKiAgICAgIGltYWdlUGx1Z2luLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICogICAgICBpbWFnZVBsdWdpbi51cGRhdGVfaW1hZ2UuY2FsbCh0aGlzLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAqICB9LmJpbmQodGhpcyk7XG4gICAgICAgICAqICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgWydpbWcnXSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgbW9kaWZ5SGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgICAqL1xuICAgICAgICBjaGVja0luZm86IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCB0YWdOYW1lcywgdXBsb2FkRXZlbnRIYW5kbGVyLCBtb2RpZnlIYW5kbGVyLCByZXNpemluZykge1xuICAgICAgICAgICAgbGV0IHRhZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0YWdOYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRhZ3MgPSB0YWdzLmNvbmNhdChbXS5zbGljZS5jYWxsKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZXNbaV0pKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVNYW5hZ2VyUGx1Z2luID0gdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGluZm9MaXN0ID0gY29udGV4dC5faW5mb0xpc3Q7XG4gICAgICAgICAgICBjb25zdCBzZXRGaWxlSW5mbyA9IGZpbGVNYW5hZ2VyUGx1Z2luLnNldEluZm8uYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09PSBpbmZvTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyByZXNldFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRzSW5mb1Jlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0YWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWxlSW5mbyhwbHVnaW5OYW1lLCB0YWdzW2ldLCB1cGxvYWRFdmVudEhhbmRsZXIsIG51bGwsIHJlc2l6aW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbmZvTGlzdC5sZW5ndGgsIGluZm87IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGluZm9MaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ3MuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiBpbmZvLnNyYyA9PT0gdC5zcmMgJiYgaW5mby5pbmRleC50b1N0cmluZygpID09PSB0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpOyB9KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mb1VwZGF0ZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2tcbiAgICAgICAgICAgIGNvbnN0IF9yZXNpemVfcGx1Z2luID0gcmVzaXppbmcgPyB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gOiAnJztcbiAgICAgICAgICAgIGlmIChyZXNpemluZykgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gcGx1Z2luTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gW107XG4gICAgICAgICAgICBjb25zdCBpbmZvSW5kZXggPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbmZvTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGluZm9JbmRleFtpXSA9IGluZm9MaXN0W2ldLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFncy5sZW5ndGgsIHRhZzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGFnID0gdGFnc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhZywgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpIHx8ICFmaWxlTWFuYWdlclBsdWdpbi5fY2hlY2tNZWRpYUNvbXBvbmVudCh0YWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYWdzLnB1c2goY29udGV4dC5faW5mb0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZ5SGFuZGxlcih0YWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRhZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKSB8fCBpbmZvSW5kZXguaW5kZXhPZih0YWcuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhZ3MucHVzaChjb250ZXh0Ll9pbmZvSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0YWcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGVJbmZvKHBsdWdpbk5hbWUsIHRhZywgdXBsb2FkRXZlbnRIYW5kbGVyLCBudWxsLCByZXNpemluZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhZ3MucHVzaCh0YWcuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBkYXRhSW5kZXg7IGkgPCBpbmZvTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGRhdGFJbmRleCA9IGluZm9MaXN0W2ldLmluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGFncy5pbmRleE9mKGRhdGFJbmRleCkgPiAtMSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBpbmZvTGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRFdmVudEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHVwbG9hZEV2ZW50SGFuZGxlcihudWxsLCBkYXRhSW5kZXgsICdkZWxldGUnLCBudWxsLCAwLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXNpemluZykgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gX3Jlc2l6ZV9wbHVnaW47XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgaW5mbyBvYmplY3Qgb2YgZmlsZSBhbmQgYWRkIGl0IHRvIFwiX2luZm9MaXN0XCIgKHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXS5faW5mb0xpc3RbXSlcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWUgXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB1cGxvYWRFdmVudEhhbmRsZXIgRXZlbnQgaGFuZGxlciB0byBwcm9jZXNzIHVwZGF0ZWQgZmlsZSBpbmZvIChjcmVhdGVkIGluIHNldEluZm8pXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IGZpbGUgXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzaXppbmcgVHJ1ZSBpZiB0aGUgcGx1Z2luIGlzIHVzaW5nIGEgcmVzaXppbmcgbW9kdWxlXG4gICAgICAgICAqIEBleGFtcGxlIFxuICAgICAgICAgKiB1cGxvYWRDYWxsQmFjayB7Li4gZmlsZSA9IHsgbmFtZTogZmlsZUxpc3RbaV0ubmFtZSwgc2l6ZTogZmlsZUxpc3RbaV0uc2l6ZSB9O1xuICAgICAgICAgKiB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICdpbWFnZScsIG9JbWcsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQsIGZpbGUsIHRydWUpO1xuICAgICAgICAgKi9cbiAgICAgICAgc2V0SW5mbzogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGVsZW1lbnQsIHVwbG9hZEV2ZW50SGFuZGxlciwgZmlsZSwgcmVzaXppbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IF9yZXNpemVfcGx1Z2luID0gcmVzaXppbmcgPyB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gOiAnJztcbiAgICAgICAgICAgIGlmIChyZXNpemluZykgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gcGx1Z2luTmFtZTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IHBsZ3VpbiA9IHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV07XG4gICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IGNvbnRleHQuX2luZm9MaXN0O1xuICAgICAgICAgICAgbGV0IGRhdGFJbmRleCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XG4gICAgICAgICAgICBsZXQgaW5mbyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSAnJztcblxuICAgICAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1maWxlLW5hbWUnKSB8fCAodHlwZW9mIGVsZW1lbnQuc3JjID09PSAnc3RyaW5nJyA/IGVsZW1lbnQuc3JjLnNwbGl0KCcvJykucG9wKCkgOiAnJyksXG4gICAgICAgICAgICAgICAgICAgICdzaXplJzogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmlsZS1zaXplJykgfHwgMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAvLyBjcmVhdGVcbiAgICAgICAgICAgIGlmICghZGF0YUluZGV4IHx8IHRoaXMuX2NvbXBvbmVudHNJbmZvSW5pdCkge1xuICAgICAgICAgICAgICAgIHN0YXRlID0gJ2NyZWF0ZSc7XG4gICAgICAgICAgICAgICAgZGF0YUluZGV4ID0gY29udGV4dC5faW5mb0luZGV4Kys7XG4gICAgXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnLCBkYXRhSW5kZXgpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtbmFtZScsIGZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZmlsZS1zaXplJywgZmlsZS5zaXplKTtcbiAgICBcbiAgICAgICAgICAgICAgICBpbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICBzcmM6IGVsZW1lbnQuc3JjLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogZGF0YUluZGV4ICogMSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemVcbiAgICAgICAgICAgICAgICB9O1xuICAgIFxuICAgICAgICAgICAgICAgIGluZm9MaXN0LnB1c2goaW5mbyk7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyB1cGRhdGVcbiAgICAgICAgICAgICAgICBzdGF0ZSA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgICAgIGRhdGFJbmRleCAqPSAxO1xuICAgIFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbmZvTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUluZGV4ID09PSBpbmZvTGlzdFtpXS5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGluZm9MaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFJbmRleCA9IGNvbnRleHQuX2luZm9JbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBpbmZvID0geyBpbmRleDogZGF0YUluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgIGluZm9MaXN0LnB1c2goaW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgICAgIGluZm8uc3JjID0gZWxlbWVudC5zcmM7XG4gICAgICAgICAgICAgICAgaW5mby5uYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZpbGUtbmFtZVwiKTtcbiAgICAgICAgICAgICAgICBpbmZvLnNpemUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtZmlsZS1zaXplXCIpICogMTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIC8vIG1ldGhvZCBiaW5kXG4gICAgICAgICAgICBpbmZvLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgaW5mby5kZWxldGUgPSBwbGd1aW4uZGVzdHJveS5iaW5kKHRoaXMsIGVsZW1lbnQpO1xuICAgICAgICAgICAgaW5mby5zZWxlY3QgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdy5zZXRUaW1lb3V0KHBsZ3Vpbi5zZWxlY3QuYmluZCh0aGlzLCBlbGVtZW50KSk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcywgZWxlbWVudCk7XG4gICAgXG4gICAgICAgICAgICBpZiAocmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScpICYmIGVsZW1lbnQubmF0dXJhbFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScsIGVsZW1lbnQubmF0dXJhbFdpZHRoICsgJywnICsgZWxlbWVudC5uYXR1cmFsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB0aGlzLnV0aWwuaXNNZWRpYUNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgJ0ZJR1VSRScpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdyA9IHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVYLmNhbGwodGhpcywgY29udGV4dCwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGggPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHQsIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nLCB3ICsgJywnICsgaCk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNpemUnLCB3ICsgJywnICsgaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuc3R5bGUud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgIHBsZ3Vpbi5vbk1vZGlmeU1vZGUuY2FsbCh0aGlzLCBlbGVtZW50LCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcGxndWluLmFwcGx5U2l6ZS5jYWxsKHRoaXMsIHNpemVbMF0sIHNpemVbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gX3Jlc2l6ZV9wbHVnaW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB1cGxvYWRFdmVudEhhbmRsZXIoZWxlbWVudCwgZGF0YUluZGV4LCBzdGF0ZSwgaW5mbywgLS1jb250ZXh0Ll91cGxvYWRGaWxlTGVuZ3RoIDwgMCA/IDAgOiBjb250ZXh0Ll91cGxvYWRGaWxlTGVuZ3RoLCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBpbmZvIG9iamVjdCBhdCBcIl9pbmZvTGlzdFwiXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFBsdWdpbiBuYW1lIFxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaW5kZXggaW5kZXggb2YgaW5mbyBvYmplY3QgKHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXS5faW5mb0xpc3RbXS5pbmRleClcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB1cGxvYWRFdmVudEhhbmRsZXIgRXZlbnQgaGFuZGxlciB0byBwcm9jZXNzIHVwZGF0ZWQgZmlsZSBpbmZvIChjcmVhdGVkIGluIHNldEluZm8pXG4gICAgICAgICAqL1xuICAgICAgICBkZWxldGVJbmZvOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgaW5kZXgsIHVwbG9hZEV2ZW50SGFuZGxlcikge1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXS5faW5mb0xpc3Q7XG4gICAgXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGluZm9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gaW5mb0xpc3RbaV0uaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB1cGxvYWRFdmVudEhhbmRsZXIobnVsbCwgaW5kZXgsICdkZWxldGUnLCBudWxsLCAwLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlc2V0IGluZm8gb2JqZWN0IGFuZCBcIl9pbmZvTGlzdCA9IFtdXCIsIFwiX2luZm9JbmRleCA9IDBcIlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSBcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB1cGxvYWRFdmVudEhhbmRsZXIgRXZlbnQgaGFuZGxlciB0byBwcm9jZXNzIHVwZGF0ZWQgZmlsZSBpbmZvIChjcmVhdGVkIGluIHNldEluZm8pXG4gICAgICAgICAqL1xuICAgICAgICByZXNldEluZm86IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCB1cGxvYWRFdmVudEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5mb0xpc3QgPSBjb250ZXh0Ll9pbmZvTGlzdDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5mb0xpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkRXZlbnRIYW5kbGVyKG51bGwsIGluZm9MaXN0W2ldLmluZGV4LCAnZGVsZXRlJywgbnVsbCwgMCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0Ll9pbmZvTGlzdCA9IFtdO1xuICAgICAgICAgICAgY29udGV4dC5faW5mb0luZGV4ID0gMDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghd2luZG93LlNVTkVESVRPUl9NT0RVTEVTKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnU1VORURJVE9SX01PRFVMRVMnLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUywgJ2ZpbGVNYW5hZ2VyJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogZmlsZU1hbmFnZXJcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVNYW5hZ2VyO1xufSkpOyJdLCJzb3VyY2VSb290IjoiIn0=