ibp-max 1.1.20 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/onesearch.js +2 -2
  2. package/package.json +1 -1
package/onesearch.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var l=t();for(var a in l)("object"==typeof exports?exports:e)[a]=l[a]}}(self,(()=>(()=>{var e={803:()=>{var e;(e=jQuery).fn.extend({OneSearch:function(t){var l=e.extend({ServiceUrl:"",OneSearchName:"",OneSearchDS:null,MinCharLimit:3,EnableCurrentLocation:!1,EnablePreList:!1,AutoSelectFirstItem:!1,ResultLimit:10,EnableTouch:!1,DataSource:null,DataSourceControl:null,ContainerCss:"",ItemCss:"",HighlightItemCss:"",Region:"US",Locale:"NONE",HelpText:"",AnimatePlaceholderText:!1,MultiSelect:!1,MultiSelectBoxId:"",MultiSelectShowHelpText:!0,MultiKeywordDelimiter:"",LoadingImageUrl:"",ParentContainer:"",BeforeCall:null,AfterCall:null,OnSuccess:null,OnError:null,OnSelect:null,OnTextChange:null,OnSearch:null,OnIncrementalSearch:null,OnMultiSelectRemove:null,SearchMode:"Database",TestMode:!1,StickyMode:!1,EnableCategoryView:!1},t),a=null,n=null,r=null,o=null,s="",c="",d=null,u=null,h=[],p=0,m=!1,v=!1;return this.each((function(){!function(i){if(l.StickyMode&&!l.TestMode&&(l.TestMode=!0),a=i,l.AutoSelectFirstItem&&(n=e('input[id="'+e(a).attr("id")+'_AUTO_ITEM"]')),e(a).attr("autocomplete","nope"),e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},r=e("<div>").attr("id",e(a).attr("id")+"_OneSearch").css("position",l.EnableTouch?"relative":"absolute").css("top",b(e(a))).css("width",x(e(a))).css("display","none").addClass(l.ContainerCss).html(l.HelpText),""!=l.ParentContainer?e("#"+l.ParentContainer).append(r):r.insertAfter(e(a)),e(a).closest("div").click((function(t){"block"==e(a).css("display")&&""!=e(a).html()||"CloseArea"!=t.target.className&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),500))})),l.MultiSelect&&(""!=l.MultiSelectBoxId&&(o=e("#"+l.MultiSelectBoxId)),null!=o&&""!=l.MultiSelectBoxCss&&o.addClass(l.MultiSelectBoxCss),l.MultiSelect&&e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){if(""!=e(this).val()){var t={},l=e(this).attr("id").split("_");t.rt=l[l.length-2],t.n=l[l.length-1],"True"==e(this).attr("data-label-lookup")?S(t.rt+"|"+t.n+"::"+e(this).val(),(function(l){var n="";Array.isArray(l)&&(n=l.map((function(e){return e.l})).join(";")),T(t,$this.val(),!0,n),e(a).val("")})):T(t,e(this).val(),!0)}}))),l.EnableCurrentLocation){var d=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(),g=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(),O=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val();void 0!==d&&void 0!==g&&void 0!==O&&""!=d&&""!=g&&""!=O&&(v=!0)}e(a).keydown((function(t){switch(t.keyCode){case 9:case 13:l.AutoSelectFirstItem&&e(a).val().length>0?(p>0?C():y(0,!1,!0),m=!1):(C(),m=!1);break;case 38:_(-1);break;case 39:l.AutoSelectFirstItem&&(y(0,!1,!0),e(r).hide(),e(n).val(""));break;case 40:_(1);break;case 27:e(r).hide(),u=null,h=[],p=0}})),e(a).keypress((function(t){parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),13==t.keyCode&&t.preventDefault()})),e(a).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(a).val().length||(T(null,null),l.AutoSelectFirstItem&&n.val("")),13==t.keyCode&&e(a).val().length>0&&!m?l.OnSearch&&l.OnSearch():13==t.keyCode&&e(a).val().length>0&&l.AutoSelectFirstItem?p>0?C():y(0,!1,!0):l.OnIncrementalSearch&&l.OnIncrementalSearch(),e(a).val().length>=l.MinCharLimit||l.EnablePreList||l.EnableCurrentLocation?e(r).show():e(r).hide(),13==t.keyCode&&e(r).hide(),e(a).val().indexOf(s)<0&&e(r).html(""),8!=t.keyCode&&46!=t.keyCode||(s="",c=""),s!=e(a).val()&&(l.OnTextChange&&l.OnTextChange(e(a).val()),T(null,null),s=e(a).val(),"none"!=e(r).css("display")&&(""!=l.LoadingImageUrl&&e(a).val().length>=l.MinCharLimit&&e(r).html('<img src="'+l.LoadingImageUrl+'" />'),setTimeout((function(){S()}),500))))})),e(a).focus((function(){if(parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),l.MultiSelect)if(o.find("a.agora-onesearch-multi-sel-item-close").length>0){var n=e("<div>").html(e(o.html()));e(n).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),l.MultiSelectShowHelpText?l.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(l.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(a).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+n.html()+"</div>":l.EnableCurrentLocation&&e(n).append(f())}else l.HelpText="",l.EnableCurrentLocation&&(0==e(r).find("[data-location-search]").length&&e(r).append(f()),e(r).show());l.EnablePreList?(S(),e(r).show()):!l.MultiSelect&&l.EnableCurrentLocation?(0==e(r).find("[data-location-search]").length&&e(r).append(f()),console.log(f()),e(r).show()):""!=l.HelpText&&""==e(a).val()&&(e(r).html(l.HelpText),parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),e(r).show())})),e(a).blur((function(){l.AutoSelectFirstItem&&e(a).val().length>0&&!l.MultiSelect&&setTimeout((function(){var t=e(a).data("is-manual-select");void 0!==t&&0!=t||y(0,!0,!0),e(a).data("is-manual-select",!1)}),50),setTimeout((function(){l.TestMode?(e(r).find("[data-location-search]").length>0&&l.TestMode||l.StickyMode&&0==e(r).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(r).html(""),e(r).hide(),e(r).parent().removeClass("is-dirty")):(e(r).html(""),e(r).hide(),0==e(a).val().length&&e(r).parent().removeClass("is-dirty"))}),200)})),S(),1==l.AnimatePlaceholderText&&""==e(a).val()&&AnimatePlaceholderText(e(a),"",0)}(e(this))}));function f(){return l.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(a).attr("EnableCurrentLocationLabel")).css("display","block").css("width","100%").css("padding","3px").css("color","red").attr("idx",-1).addClass("get-my-direction").attr("data-location-search","").mouseover((function(){e(this).css("background-color:red"),e(this).addClass(l.HighlightItemCss)})).click((function(){g(e(this).attr("idx"))})).on("tap",(function(){g(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})):null}function g(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(null!=e(a).attr("DefaultSearchRadius")&&"0"!=e(a).attr("DefaultSearchRadius")?e(a).attr("DefaultSearchRadius"):"5"),v=!0,l.OnSelect&&l.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),l.OnSuccess&&l.OnSuccess()})),y(t)}function S(t,o){(c!=e(a).val()||l.EnablePreList||null!=t)&&(null!=d&&d.abort(),e(a).val().length<l.MinCharLimit?s="":c=e(a).val(),null==t&&!l.EnablePreList&&e(a).val().length<l.MinCharLimit||(l.AutoSelectFirstItem&&(e(n).val(""),e(a).data("is-manual-select",!1)),_searchParam=e(a).val().length<l.MinCharLimit?"":e(a).val(),_searchKeyword=(e(a).val().length<l.MinCharLimit?"":e(a).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),null!=t&&t.length>0&&(_searchParam=_searchKeyword="LOOKUP_LABEL::"+t),d=e.ajax({type:"POST",url:l.ServiceUrl+"?Keyword="+_searchKeyword,data:{Keyword:_searchParam,SearchMode:l.SearchMode,OneSearchName:l.OneSearchName,Region:l.Region,Locale:l.Locale,AdditionalWhere:e(a).attr("AdditionalWhere")},dataType:"json",success:function(n){if(null==t||null==o)if(u=n,p=0,e(r).html(""),null!=n&&0!=n.length){var s="",c="",d=null,h="",m="";for(i=0;i<n.length;i++){if(s=M(n[i].l,e(a).val()),null!=(c=L(l.OneSearchDS,n[i].rt,n[i].n))&&null!=c.ItemTemplate&&""!=c.ItemTemplate)s=(s=c.ItemTemplate.replace("{$l}",M(n[i].l,e(a).val()))).replace("{$d}",n[i].d);else if(null!=c&&c.ItemTemplates.length>0)for(j=0;j<c.ItemTemplates.length;j++)c.ItemTemplates[j].Locale==l.Locale&&(s=(s=c.ItemTemplates[j].Template.replace("{$l}",M(n[i].l,e(a).val()))).Template.replace("{$d}",n[i].d));d=e("<a>").html(s).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(l.HighlightItemCss)})).mousedown((function(){e(a).data("is-manual-select",!0)})).click((function(){y(e(this).attr("idx"))})).on("tap",(function(){e(a).data("is-manual-select",!0),y(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})),0==i&&l.AutoSelectFirstItem&&O(i),l.EnableCategoryView?(m!=n[i].g&&((h=e("<div>").addClass("OneSearchBox-category-"+n[i].g)).append(e("<span>").html(n[i].g)),m=n[i].g),h.append(d),e(r).append(h),0==i&&e(r)[i].className.includes("OneSearchBox-")&&(e(r)[i].className=e(r)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(r).addClass("OneSearchBox-"+n[i].g)):e(r).append(d)}}else e(r).hide();else o(n)},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function C(){if(!(null==u||u.length<p-1||p<=0)){var t,n="",i=L(l.OneSearchDS,u[p-1].rt,u[p-1].n);null!=i&&""!=i.ItemTemplate&&(n=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?u[p-1].k:u[p-1].l),t=u[p-1].l,l.MultiSelect?e(a).val(""):e(a).val(t),s=e(a).val(),T(u[p-1],n),l.AutoSelectFirstItem&&O(p-1),l.OnSelect&&l.OnSelect(u[p-1]),p=0,l.TestMode||e(r).html("")}}function y(t,i,o){var c="",d="";if(null!=i&&null!=i||(i=!1),null!=o&&null!=o||(o=!1),void 0!==u&&null!=u&&0!=u.length){var h=L(l.OneSearchDS,u[t].rt,u[t].n);null!=h&&""!=h.ItemTemplate&&(d=null!=h.Selector&&null!=h.Selector&&"k"==h.Selector?u[t].k:u[t].l),c=u[t].l,1!=o||c.toLowerCase().startsWith(e(a).val().toLowerCase())?(l.MultiSelect?(e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")):(null!=h&&1!=h.SkipSelect?e(a).val(c):e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")),s=e(a).val(),t>=0&&v&&(e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=h&&1!=h.SkipSelect&&T(u[t],d),l.OnSelect&&l.OnSelect(u[t]),l.TestMode||i||e(r).html(""),l.MultiSelect&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),200))):e(n).val("")}}function O(t){var i="";if(void 0!==u&&null!=u&&0!=u.length){var r=L(l.OneSearchDS,u[t].rt,u[t].n);if(null!=r&&""!=r.ItemTemplate&&(null!=r.Selector&&null!=r.Selector&&"k"==r.Selector?u[t].k:u[t].l),(i=u[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(a).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(a).val(),"ig");e(n).val(i.replace(o,e(a).val())),s=e(a).val()}else e(n).val("")}}function T(t,n,r,s){if(l.MultiSelect){if(null==t)return;var c=e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n),d=n.split(";");null!=s&&null!=s&&(d=s.split(";"));var u=L(l.OneSearchDS,t.rt,t.n);for(i=0;i<d.length&&null!=u;i++)if(!(d[i].length<2)&&(-1==(";"+c.val().toLowerCase()+";").indexOf(";"+d[i].toLowerCase()+";")||r)){r||c.val(c.val()+";"+d[i]);var h=e("<div>").addClass("agora-onesearch-multi-sel-item-cont").attr("id","multiitem"+e(a).attr("id")+"_"+t.rt+"_"+t.n+d[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).append(e("<a>").addClass("agora-onesearch-multi-sel-item-close").attr("title","Click here to hide this area filter.").attr("id","multiitem_close_"+e(a).attr("id")+"_"+t.rt+"_"+t.n+d[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).attr("val",d[i]).html('<i class="aga aga-close"></i>').click((function(){I(e(this),t,e(this).attr("val"))}))).append(e("<a>").html(u.MultiItemTemplate.replace("{$l}",null!=t&&null!=t.l?t.l:d[i]).replace("{$d}",null!=t&&null!=t.d?t.d:d[i])));o.append(h)}!r&&l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}else{if(e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n).val(n)}}function I(t,n,i){var o=e("#"+e(a).attr("id")+"_"+n.rt+"_"+n.n);0!=o.val().indexOf(";")&&o.val(";"+o.val()),o.val(o.val().replace(";"+i,"")),e(t).parent().remove(),""!=o.val()&&0!=e(r).find("div.agora-onesearch-multi-sel-item-cont").length||(e(r).html(""),e(r).hide()),l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}function _(t){m=!0,t>0?p<e(r).find("a").length&&p++:p>1&&p--,e(r).find("a").each((function(){e(this).removeClass(l.HighlightItemCss)})),e(r).find(l.EnableCategoryView?"a[idx="+p+"]":"a:nth-child("+p+")").addClass(l.HighlightItemCss)}function x(e){if(null==e||0==e.length)return 0;var t=e.width();return t+=parseInt(e.css("padding-left"),10)+parseInt(e.css("padding-right"),10),t+=parseInt(e.css("borderLeftWidth"),10)+parseInt(e.css("borderRightWidth"),10),""!=l.ParentContainer&&(t+=e.offset().left),t}function b(e){if(null==e||0==e.length)return 0;var t=e.height();return t+=parseInt(e.css("padding-top"),10)+parseInt(e.css("padding-bottom"),10),t+=parseInt(e.css("borderTopWidth"),10)+parseInt(e.css("borderBottomWidth"),10),t+=e.position().top,""!=l.ParentContainer&&(t+=e.offset().top),t}function L(e,t,l){if(null!=h[t+"_"+l])return h[t+"_"+l];for(k=0;k<e.RecordTypes.length;k++)for(j=0;e.RecordTypes[k].Name==t&&j<e.RecordTypes[k].Fields.length;j++)if(e.RecordTypes[k].Fields[j].Name==l)return h[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function M(e,t){return e.replace(new RegExp("("+function(e){return(e+"").replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1")}(t)+")","gi"),"<strong>$1</strong>")}}})}},t={};function l(a){var n=t[a];if(void 0!==n)return n.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,l),i.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";l.r(a);l(803)})(),a})()));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0N6dUJJRSxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJyRCxJQUFqQnNELEVBQ0gsT0FBT0EsRUFBYXROLFFBR3JCLElBQUlDLEVBQVNrTixFQUF5QkUsR0FBWSxDQUdqRHJOLFFBQVMsQ0FBQyxHQU9YLE9BSEF1TixFQUFvQkYsR0FBVXBOLEVBQVFBLEVBQU9ELFFBQVNvTixHQUcvQ25OLEVBQU9ELE9BQ2YsQ0NyQkFvTixFQUFvQnRILEVBQUs3RixJQUN4QixJQUFJdU4sRUFBU3ZOLEdBQVVBLEVBQU93TixXQUM3QixJQUFPeE4sRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREFtTixFQUFvQjVDLEVBQUVnRCxFQUFRLENBQUVwTixFQUFHb04sSUFDNUJBLENBQU0sRUNMZEosRUFBb0I1QyxFQUFJLENBQUN4SyxFQUFTME4sS0FDakMsSUFBSSxJQUFJQyxLQUFPRCxFQUNYTixFQUFvQlEsRUFBRUYsRUFBWUMsS0FBU1AsRUFBb0JRLEVBQUU1TixFQUFTMk4sSUFDNUVFLE9BQU9DLGVBQWU5TixFQUFTMk4sRUFBSyxDQUFFSSxZQUFZLEVBQU1DLElBQUtOLEVBQVdDLElBRTFFLEVDTkRQLEVBQW9CUSxFQUFJLENBQUMzSixFQUFLZ0ssSUFBVUosT0FBT0ssVUFBVUMsZUFBZUMsS0FBS25LLEVBQUtnSyxHQ0NsRmIsRUFBb0JpQixFQUFLck8sSUFDSCxvQkFBWHNPLFFBQTBCQSxPQUFPQyxhQUMxQ1YsT0FBT0MsZUFBZTlOLEVBQVNzTyxPQUFPQyxZQUFhLENBQUU1QyxNQUFPLFdBRTdEa0MsT0FBT0MsZUFBZTlOLEVBQVMsYUFBYyxDQUFFMkwsT0FBTyxHQUFPLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heE9uZVNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCLvu78oZnVuY3Rpb24gKCQpIHtcclxuXHJcbiAgICAvL0F0dGFjaCB0aGlzIG5ldyBtZXRob2QgdG8galF1ZXJ5XHJcbiAgICAkLmZuLmV4dGVuZCh7XHJcblxyXG4gICAgICAgIC8vVGhpcyBpcyB3aGVyZSB5b3Ugd3JpdGUgeW91ciBwbHVnaW4ncyBuYW1lXHJcbiAgICAgICAgT25lU2VhcmNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAgICAgLy9TZXQgdGhlIGRlZmF1bHQgdmFsdWVzLCB1c2UgY29tbWEgdG8gc2VwYXJhdGUgdGhlIHNldHRpbmdzLCBleGFtcGxlOlxyXG4gICAgICAgICAgICB2YXIgX2RlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIE9uZVNlYXJjaERTOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgTWluQ2hhckxpbWl0OiAzLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlQ3VycmVudExvY2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZVByZUxpc3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgQXV0b1NlbGVjdEZpcnN0SXRlbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBSZXN1bHRMaW1pdDogMTAsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVUb3VjaDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBEYXRhU291cmNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUNvbnRyb2w6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBDb250YWluZXJDc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBIaWdobGlnaHRJdGVtQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIFJlZ2lvbjogJ1VTJyxcclxuICAgICAgICAgICAgICAgIExvY2FsZTogJ05PTkUnLFxyXG4gICAgICAgICAgICAgICAgSGVscFRleHQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdEJveElkOiAnJyxcclxuICAgICAgICAgICAgICAgIE11bHRpU2VsZWN0U2hvd0hlbHBUZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlLZXl3b3JkRGVsaW1pdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIExvYWRpbmdJbWFnZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBQYXJlbnRDb250YWluZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgQmVmb3JlQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEFmdGVyQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU3VjY2VzczogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uRXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlbGVjdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uVGV4dENoYW5nZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU2VhcmNoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25JbmNyZW1lbnRhbFNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uTXVsdGlTZWxlY3RSZW1vdmU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBTZWFyY2hNb2RlOiAnRGF0YWJhc2UnLCAvLyBDYWNoZSwgRGF0YWJhc2UsIFNtYXJ0XHJcbiAgICAgICAgICAgICAgICBUZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBTdGlja3lNb2RlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUNhdGVnb3J5VmlldzogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9vcHRpb25zID0gJC5leHRlbmQoX2RlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRDb250cm9sID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRBdXRvQ29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfb25lU2VhcmNoQm94ID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9NdWx0aVNlbGVjdEJveCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2xhc3RLZXl3b3JkID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHZhciBfcmVxdWVzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgIHZhciBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIHZhciBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vSXRlcmF0ZSBvdmVyIHRoZSBjdXJyZW50IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgSW5pdCgkKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBJbml0KG9iaikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgIV9vcHRpb25zLlRlc3RNb2RlKSBfb3B0aW9ucy5UZXN0TW9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RhcmdldENvbnRyb2wgPSBvYmo7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0QXV0b0NvbnRyb2wgPSAkKCdpbnB1dFtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19BVVRPX0lURU1cIl0nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgYnJvd3NlciBhdXRvY29tcGxldGUgb24gaW5wdXRcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NlY3VyaW5nX3lvdXJfc2l0ZS9UdXJuaW5nX29mZl9mb3JtX2F1dG9jb21wbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdhdXRvY29tcGxldGUnLCAnbm9wZScpO1xyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignbmFtZScsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwkL2dpLCAnXycpICsgKG5ldyBEYXRlKCkpLnZhbHVlT2YoKSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3ggPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJylcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdwb3NpdGlvbicsIChfb3B0aW9ucy5FbmFibGVUb3VjaCA/ICdyZWxhdGl2ZScgOiAnYWJzb2x1dGUnKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhfb3B0aW9ucy5Db250YWluZXJDc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLlBhcmVudENvbnRhaW5lcikuYXBwZW5kKF9vbmVTZWFyY2hCb3gpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94Lmluc2VydEFmdGVyKCQoX3RhcmdldENvbnRyb2wpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5jbG9zZXN0KCdkaXYnKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS5jc3MoJ2Rpc3BsYXknKSA9PSAnYmxvY2snICYmICQoX3RhcmdldENvbnRyb2wpLmh0bWwoKSAhPSAnJykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT0gJ0Nsb3NlQXJlYScpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvL01kbFJlbG9hZENvbnRyb2xTdGF0ZSgkKHRoaXMpLCAkKHRoaXMpLmNsb3Nlc3QoJ1tkYXRhLXNlYXJjaF0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3ggPSAkKCcjJyArIF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3ggIT0gbnVsbCAmJiBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveENzcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYWRkQ2xhc3MoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkTXVsdGlTZWxlY3RPbkxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2NoZWNrIGlzIGxvY2F0aW9uIHNlYXJjaCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhdCA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG5nID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmRzID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobGF0KSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKGxuZykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChyZHMpICE9ICd1bmRlZmluZWQnICYmIGxhdCAhPSAnJyAmJiBsbmcgIT0gJycgJiYgcmRzICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOSAvKiB0YWIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTMgLyogZW50ZXIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYXNlIDM3IC8qIGxlZnQgKi86XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzggLyogdXAgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM5IC8qIHJpZ2h0ICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwIC8qIGRvd24gKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjcgLyogZXNjYXBlICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5cHJlc3MoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5dXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2IHx8IGUua2V5Q29kZSA9PSA4OCB8fCBlLmtleUNvZGUgPT0gODYpICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgX3RhcmdldEF1dG9Db250cm9sLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2lmIChlLmtleUNvZGUgPT0gMTMgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCAmJiAkKF9vbmVTZWFyY2hCb3gpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9pc09uQXJyb3dTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VhcmNoKSBfb3B0aW9ucy5PblNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDApIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpOyBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpb25zLk9uSW5jcmVtZW50YWxTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0IHx8IF9vcHRpb25zLkVuYWJsZVByZUxpc3QgfHwgX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTsgZWxzZSAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5pbmRleE9mKF9sYXN0S2V5d29yZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoYW5nZSB0aGUgbGFzdCBhbmQgY3VycmVudCB2YWx1ZSBpbiB0aGUga2V5d29yZCwgdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9sYXN0S2V5d29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25UZXh0Q2hhbmdlKSBfb3B0aW9ucy5PblRleHRDaGFuZ2UoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBhc3NvY2lhdGVkIGNvbnRyb2xzIHNpbmNlIHRoZSBrZXl3b3JkIGhhcyBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRleHQgYm9veCBhcyBsYXN0IHZhbHVlL2tleXdvcmRcclxuICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN1Z2dlc3Rpb24gYm94IGlzIGhpZGRlbiB0aGVuIG5vIG5lZWQgdG8gY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnPGltZyBzcmM9XCInICsgX29wdGlvbnMuTG9hZGluZ0ltYWdlVXJsICsgJ1wiIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5mb2N1cyhmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RlbXBDb250TXVsdCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgkKF9NdWx0aVNlbGVjdEJveC5odG1sKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ29uY2xpY2snLCAnamF2YXNjcmlwdDokKFxcJyMnICsgb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkICsgJyAjJyArICQodGhpcykuYXR0cignaWQnKSArICdcXCcpLnRyaWdnZXIoXFwnY2xpY2tcXCcpJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0KSBfb3B0aW9ucy5IZWxwVGV4dCA9ICc8ZGl2IHN0eWxlPVwicGFkZGluZzo3cHhcIj48Zm9udCBzdHlsZT1cImNvbG9yOnJlZFwiPllvdSBoYXZlIGFscmVhZHkgc2VsZWN0ZWQ8L2ZvbnQ+JyArICgoX29wdGlvbnMuU3RpY2t5TW9kZSkgPyAnPGEgY2xhc3M9XCJDbG9zZUFyZWFcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRpdGxlPVwiQ2xpY2sgaGVyZSB0byBoaWRlIHNlbGVjdGVkIGZpbHRlcnMuXCIgb25jbGljaz1cIiQoXFwnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19PbmVTZWFyY2gnICsgJ1xcJykuaGlkZSgpO1wiPkNsb3NlPC9hPicgOiAnJykgKyAnPGhyIHN0eWxlPVwibWFyZ2luOjBweCAwcHggN3B4IDBweFwiIC8+JyArIF90ZW1wQ29udE11bHQuaHRtbCgpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IZWxwVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5IZWxwVGV4dCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmJsdXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTWFudWFsU2VsZWN0ID0gJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXNNYW51YWxTZWxlY3QpID09ICd1bmRlZmluZWQnIHx8IGlzTWFudWFsU2VsZWN0ID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFuaW1hdGVQbGFjZWhvbGRlclRleHQgPT0gdHJ1ZSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQoJChfdGFyZ2V0Q29udHJvbCksICcnLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbiAmJiAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdodHRwcycpID4gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZignbG9jYWxob3N0JykgPiAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1sb2NhdGlvblwiPjwvaT4nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRW5hYmxlQ3VycmVudExvY2F0aW9uTGFiZWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywgJzNweCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2NvbG9yJywgJ3JlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCAtMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdnZXQtbXktZGlyZWN0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtbG9jYXRpb24tc2VhcmNoJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcjpyZWQnKTsgJCh0aGlzKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdXQoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhck5lYXJieSgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjZHJhd19zZWFyY2gnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hOZWFyYnkoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCgkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gbnVsbCAmJiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gJzAnKSA/ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0RlZmF1bHRTZWFyY2hSYWRpdXMnKSA6ICc1Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoeyBcImtcIjogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlICsgJ3wnICsgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgXCJuXCI6IFwiSURDTEFUSVRVREV8SURDTE9OR0lUVURFXCIsIFwicnRcIjogXCJMT0NBVElPTlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TdWNjZXNzKSBfb3B0aW9ucy5PblN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbShpZHgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hLZXl3b3JkKGxvb2t1cExhYmVsLCBhZnRlclNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9sYXN0U2VhcmNod29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSAmJiAhX29wdGlvbnMuRW5hYmxlUHJlTGlzdCAmJiBsb29rdXBMYWJlbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYWxyZWFkeSBhIHJlcXVlc3Qgbm90IHlldCBjb21wbGV0ZWQgdGhlbiB0aGF0IG5lZWQgdG8gc3RvcC9hYm9ydCBiZWZvcmUgc3RhYXJ0aW5nIG5ldyBvbmVcclxuICAgICAgICAgICAgICAgIGlmIChfcmVxdWVzdCAhPSBudWxsKSBfcmVxdWVzdC5hYm9ydCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPCBfb3B0aW9ucy5NaW5DaGFyTGltaXQpIF9sYXN0S2V5d29yZCA9ICcnOyBlbHNlIF9sYXN0U2VhcmNod29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsb29rdXBMYWJlbCA9PSBudWxsICYmICFfb3B0aW9ucy5FbmFibGVQcmVMaXN0ICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW0gPSAoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgPyAnJyA6ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKVxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaEtleXdvcmQgPSAoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgPyAnJyA6ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnJlcGxhY2UoLyMvZywgJyUyMycpKSArICcmdD0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcclxuICAgICAgICAgICAgICAgIGlmIChsb29rdXBMYWJlbCAhPSBudWxsICYmIGxvb2t1cExhYmVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW0gPSBfc2VhcmNoS2V5d29yZCA9ICdMT09LVVBfTEFCRUw6OicgKyBsb29rdXBMYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfcmVxdWVzdCA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogX29wdGlvbnMuU2VydmljZVVybCArIFwiP0tleXdvcmQ9XCIgKyBfc2VhcmNoS2V5d29yZCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiAoeyBcIktleXdvcmRcIjogX3NlYXJjaFBhcmFtLCBcIlNlYXJjaE1vZGVcIjogX29wdGlvbnMuU2VhcmNoTW9kZSwgXCJPbmVTZWFyY2hOYW1lXCI6IF9vcHRpb25zLk9uZVNlYXJjaE5hbWUsIFwiUmVnaW9uXCI6IF9vcHRpb25zLlJlZ2lvbiwgXCJMb2NhbGVcIjogX29wdGlvbnMuTG9jYWxlLCBcIkFkZGl0aW9uYWxXaGVyZVwiOiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdBZGRpdGlvbmFsV2hlcmUnKSB9KSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29rdXBMYWJlbCAhPSBudWxsICYmIGFmdGVyU2VhcmNoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyU2VhcmNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNwb3NlQ2FjaGUgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkIHx8IGRhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW1EYXRhID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZmllbGQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jYXRlZ29yeWl0ZW0gPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jYXRlb2dvcnluYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gaGlnaGxpZ2h0S2V5d29yZChkYXRhW2ldLmwsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgZGF0YVtpXS5ydCwgZGF0YVtpXS5uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfZmllbGQuSXRlbVRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfaXRlbURhdGEucmVwbGFjZSgneyRkfScsIGRhdGFbaV0uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maWVsZC5JdGVtVGVtcGxhdGVzW2pdLkxvY2FsZSA9PSBfb3B0aW9ucy5Mb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGVzW2pdLlRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5UZW1wbGF0ZS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbSA9ICQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoX2l0ZW1EYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3BhZGRpbmcnLCAnM3B4JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd0ZXh0LWRlY29yYXRpb24nLCAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnY29sb3InLCAnYmxhY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmFkZENsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZWRvd24oZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VsZWN0SXRlbSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIHRydWUpOyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW91dChmdW5jdGlvbiAoKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9TZWxlY3RJdGVtKGksIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDYXRlZ29yeVZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NhdGVvZ29yeW5hbWUgIT0gZGF0YVtpXS5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0gPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdPbmVTZWFyY2hCb3gtY2F0ZWdvcnktJysgZGF0YVtpXS5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbS5hcHBlbmQgKCQoJzxzcGFuPicpLmh0bWwoZGF0YVtpXS5nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlb2dvcnluYW1lID0gZGF0YVtpXS5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZChfaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2NhdGVnb3J5aXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZS5pbmNsdWRlcygnT25lU2VhcmNoQm94LScpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZSA9ICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLnJlcGxhY2UoL1xcYk9uZVNlYXJjaEJveC1bQS1aYS16XSpcXGIvZywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC0nICsgZGF0YVtpXS5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2VydmljZSAoYWdvcmFPbmVTZWFyY2gpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpIHtcclxuICAgICAgICBpZiAoX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoIDwgKF9oaWdobGlnaHRJZHggLSAxKSB8fCBfaGlnaGxpZ2h0SWR4IDw9IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLnJ0LCBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLmw7XHJcblxyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKF9sYWJlbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXSwgX3NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSBhdXRvU2VsZWN0SXRlbSgoX2hpZ2hsaWdodElkeCAtIDEpKTtcclxuICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdKTtcclxuICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNlbGVjdEl0ZW0oaWR4LCBub2NsZWFyLCBhdXRvU2VsZWN0KSB7XHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChub2NsZWFyID09IHVuZGVmaW5lZCB8fCBub2NsZWFyID09IG51bGwpIG5vY2xlYXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB1bmRlZmluZWQgfHwgYXV0b1NlbGVjdCA9PSBudWxsKSBhdXRvU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbaWR4XS5ydCwgX3Jlc3Bvc2VDYWNoZVtpZHhdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbGFiZWwgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9TZWxlY3QgPT0gdHJ1ZSAmJiAhX2xhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgkKF90YXJnZXRDb250cm9sKS52YWwoKS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiZfZmllbGQuU2tpcFNlbGVjdCAhPSB0cnVlKSAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTsgZWxzZSAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSBjbGVhck5lYXJieSgpO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbaWR4XSwgX3NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtpZHhdKTtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlICYmICFub2NsZWFyKSAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTsgfSwgMjAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhdXRvU2VsZWN0SXRlbShpZHgpIHtcclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBfcmVzcG9zZUNhY2hlW2lkeF0ucnQsIF9yZXNwb3NlQ2FjaGVbaWR4XS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0uaztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcblxyXG4gICAgICAgIGlmICghX2xhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKSkpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLCBcImlnXCIpO1xyXG4gICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoX2xhYmVsLnJlcGxhY2UocmVnRXgsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKSk7XHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCkge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHJldHVybjtcclxuXHJcbiAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfaXRlbSA9IHt9OyAvL1t7IFwia1wiOiBcIkNoYXJsb3R0ZVwiLCBcImxcIjogXCJDaGFybG90dGUsIE5DXCIsIFwiblwiOiBcIkNJVFlcIiwgXCJydFwiOiBcIkNNTkNNTlwiIH1dXHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW1WYWx1ZSA9ICQodGhpcykuYXR0cignaWQnKS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ucnQgPSBfaXRlbVZhbHVlW19pdGVtVmFsdWUubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICBfaXRlbS5uID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtbGFiZWwtbG9va3VwJykgPT0gJ1RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZChfaXRlbS5ydCArICd8JyArIF9pdGVtLm4gKyAnOjonICsgJCh0aGlzKS52YWwoKSwgZnVuY3Rpb24gKHJlc3VsdEpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sYWJlbHMgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0SnNvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sYWJlbHMgPSByZXN1bHRKc29uLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCc7Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9pdGVtLCAkdGhpcy52YWwoKSwgdHJ1ZSwgX2xhYmVscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgJCh0aGlzKS52YWwoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBiaW5kQXNzb2NpYXRlQ29udHJvbChpdGVtLCB2YWx1ZSwgaW5pdGlhbExvYWQsIGxhYmVscykge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVJdGVtcyA9IHZhbHVlLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgaWYgKGxhYmVscyAhPSBudWxsICYmIGxhYmVscyAhPSB1bmRlZmluZWQpIHZhciBfdmFsdWVJdGVtcyA9IGxhYmVscy5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIGl0ZW0ucnQsIGl0ZW0ubik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3ZhbHVlSXRlbXMubGVuZ3RoICYmIF9maWVsZCAhPSBudWxsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChfdmFsdWVJdGVtc1tpXS5sZW5ndGggPCAyKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGlmICgoJzsnICsgX2N0cmxNdWx0aUZpZWxkLnZhbCgpLnRvTG93ZXJDYXNlKCkgKyAnOycpLmluZGV4T2YoJzsnICsgX3ZhbHVlSXRlbXNbaV0udG9Mb3dlckNhc2UoKSArICc7JykgPT0gLTEgfHwgaW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxMb2FkKSBfY3RybE11bHRpRmllbGQudmFsKF9jdHJsTXVsdGlGaWVsZC52YWwoKSArICc7JyArIF92YWx1ZUl0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9tdWx0aVNlbGVjdEl0ZW0gPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnbXVsdGlpdGVtJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgX3ZhbHVlSXRlbXNbaV0ucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvW15BLXowLTldL2csICdfJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsICdDbGljayBoZXJlIHRvIGhpZGUgdGhpcyBhcmVhIGZpbHRlci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJ211bHRpaXRlbV9jbG9zZV8nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyBfdmFsdWVJdGVtc1tpXS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9bXkEtejAtOV0vZywgJ18nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd2YWwnLCBfdmFsdWVJdGVtc1tpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtY2xvc2VcIj48L2k+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbU11bHRpU2VsZWN0KCQodGhpcyksIGl0ZW0sICQodGhpcykuYXR0cigndmFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfZmllbGQuTXVsdGlJdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIChpdGVtICE9IG51bGwgJiYgaXRlbS5sICE9IG51bGwpID8gaXRlbS5sIDogX3ZhbHVlSXRlbXNbaV0pLnJlcGxhY2UoJ3skZH0nLCAoaXRlbSAhPSBudWxsICYmIGl0ZW0uZCAhPSBudWxsKSA/IGl0ZW0uZCA6IF92YWx1ZUl0ZW1zW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYXBwZW5kKF9tdWx0aVNlbGVjdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWluaXRpYWxMb2FkICYmIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUpIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGFzTXVsdGlTZWxlY3RlZEl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiAoX29wdGlvbnMuTXVsdGlTZWxlY3QgJiYgX011bHRpU2VsZWN0Qm94LmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlRnJvbU11bHRpU2VsZWN0KG1lLCBpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuICAgICAgICBpZiAoX2N0cmxNdWx0aUZpZWxkLnZhbCgpLmluZGV4T2YoJzsnKSAhPSAwKSBfY3RybE11bHRpRmllbGQudmFsKCc7JyArIF9jdHJsTXVsdGlGaWVsZC52YWwoKSk7XHJcbiAgICAgICAgX2N0cmxNdWx0aUZpZWxkLnZhbChfY3RybE11bHRpRmllbGQudmFsKCkucmVwbGFjZSgnOycgKyB2YWx1ZSwgJycpKTtcclxuXHJcbiAgICAgICAgLy8kKCcjbXVsdGlpdGVtJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgdmFsdWUucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykpLnJlbW92ZSgpO1xyXG4gICAgICAgICQobWUpLnBhcmVudCgpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICBpZiAoX2N0cmxNdWx0aUZpZWxkLnZhbCgpID09IFwiXCIgfHwgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKSBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZ2hsaWdodEl0ZW0oZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgX2lzT25BcnJvd1NlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPiAwKSAvKmRvd24qLyB7XHJcbiAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4IDwgJChfb25lU2VhcmNoQm94KS5maW5kKCdhJykubGVuZ3RoKSBfaGlnaGxpZ2h0SWR4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgLyp1cCovIHtcclxuICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAxKSBfaGlnaGxpZ2h0SWR4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoX29uZVNlYXJjaEJveCkuZmluZCgnYScpLmVhY2goZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5VmlldykgPyAnYVtpZHg9JyArIF9oaWdobGlnaHRJZHggKyAnXScgOiAnYTpudGgtY2hpbGQoJyArIF9oaWdobGlnaHRJZHggKyAnKScpLmFkZENsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFRvdGFsV2lkdGhPZkNvbnRyb2wob2JqZWN0KSB7XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Qud2lkdGgoKTtcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1sZWZ0XCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1yaWdodFwiKSwgMTApOyAvL1RvdGFsIFBhZGRpbmcgV2lkdGhcclxuICAgICAgICAvL3ZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tbGVmdFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1yaWdodFwiKSwgMTApOyAvL1RvdGFsIE1hcmdpbiBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLCAxMCk7IC8vVG90YWwgQm9yZGVyIFdpZHRoXHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gb2JqZWN0Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2wob2JqZWN0KSB7XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QuaGVpZ2h0KCk7XHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctdG9wXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTsgLy9Ub3RhbCBQYWRkaW5nIFdpZHRoXHJcbiAgICAgICAgLy92YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLXRvcFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1ib3R0b21cIiksIDEwKTsgLy9Ub3RhbCBNYXJnaW4gV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSwgMTApOyAvL1RvdGFsIEJvcmRlciBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IG9iamVjdC5wb3NpdGlvbigpLnRvcDtcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBvYmplY3Qub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldEZpZWxkSnNvbihvYmosIHJ0LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBpZiAoX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdICE9IG51bGwpIHJldHVybiBfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV07XHJcblxyXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBvYmouUmVjb3JkVHlwZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgb2JqLlJlY29yZFR5cGVzW2tdLk5hbWUgPT0gcnQgJiYgaiA8IG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdLk5hbWUgPT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdID0gb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcmVnX3F1b3RlKHN0cikge1xyXG4gICAgICAgIHJldHVybiAoc3RyICsgJycpLnJlcGxhY2UoLyhbXFxcXFxcLlxcK1xcKlxcP1xcW1xcXlxcXVxcJFxcKFxcKVxce1xcfVxcPVxcIVxcPFxcPlxcfFxcOl0pL2csIFwiXFxcXCQxXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZ2hsaWdodEtleXdvcmQoc3RyLCBrZXl3b3JkKSB7XHJcbiAgICAgICAgLy9yZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChwcmVnX3F1b3RlKHRvKSwgJ2dpJyksIGJ5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXCIgKyBwcmVnX3F1b3RlKGtleXdvcmQpICsgXCIpXCIsICdnaScpLCBcIjxzdHJvbmc+JDE8L3N0cm9uZz5cIik7XHJcbiAgICB9XHJcbn1cclxufSk7XHJcbn0pKGpRdWVyeSk7XHJcblxyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07Il0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwic2VsZiIsIiQiLCJqUXVlcnkiLCJmbiIsImV4dGVuZCIsIk9uZVNlYXJjaCIsIm9wdGlvbnMiLCJfb3B0aW9ucyIsIlNlcnZpY2VVcmwiLCJPbmVTZWFyY2hOYW1lIiwiT25lU2VhcmNoRFMiLCJNaW5DaGFyTGltaXQiLCJFbmFibGVDdXJyZW50TG9jYXRpb24iLCJFbmFibGVQcmVMaXN0IiwiQXV0b1NlbGVjdEZpcnN0SXRlbSIsIlJlc3VsdExpbWl0IiwiRW5hYmxlVG91Y2giLCJEYXRhU291cmNlIiwiRGF0YVNvdXJjZUNvbnRyb2wiLCJDb250YWluZXJDc3MiLCJJdGVtQ3NzIiwiSGlnaGxpZ2h0SXRlbUNzcyIsIlJlZ2lvbiIsIkxvY2FsZSIsIkhlbHBUZXh0IiwiQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dCIsIk11bHRpU2VsZWN0IiwiTXVsdGlTZWxlY3RCb3hJZCIsIk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0IiwiTXVsdGlLZXl3b3JkRGVsaW1pdGVyIiwiTG9hZGluZ0ltYWdlVXJsIiwiUGFyZW50Q29udGFpbmVyIiwiQmVmb3JlQ2FsbCIsIkFmdGVyQ2FsbCIsIk9uU3VjY2VzcyIsIk9uRXJyb3IiLCJPblNlbGVjdCIsIk9uVGV4dENoYW5nZSIsIk9uU2VhcmNoIiwiT25JbmNyZW1lbnRhbFNlYXJjaCIsIk9uTXVsdGlTZWxlY3RSZW1vdmUiLCJTZWFyY2hNb2RlIiwiVGVzdE1vZGUiLCJTdGlja3lNb2RlIiwiRW5hYmxlQ2F0ZWdvcnlWaWV3IiwiX3RhcmdldENvbnRyb2wiLCJfdGFyZ2V0QXV0b0NvbnRyb2wiLCJfb25lU2VhcmNoQm94IiwiX011bHRpU2VsZWN0Qm94IiwiX2xhc3RLZXl3b3JkIiwiX2xhc3RTZWFyY2h3b3JkIiwiX3JlcXVlc3QiLCJfcmVzcG9zZUNhY2hlIiwiX2l0ZW1UZXBsYXRlQ2FjaGUiLCJfaGlnaGxpZ2h0SWR4IiwiX2lzT25BcnJvd1NlbGVjdGlvbiIsIl9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCIsInRoaXMiLCJlYWNoIiwib2JqIiwiYXR0ciIsInJlcGxhY2UiLCJEYXRlIiwidmFsdWVPZiIsIndpbmRvdyIsIm9ucG9wc3RhdGUiLCJldmVudCIsImNzcyIsImdldFRvdGFsSGVpZ2h0T2ZDb250cm9sIiwiZ2V0VG90YWxXaWR0aE9mQ29udHJvbCIsImFkZENsYXNzIiwiaHRtbCIsImFwcGVuZCIsImluc2VydEFmdGVyIiwiY2xvc2VzdCIsImNsaWNrIiwiZSIsInRhcmdldCIsImNsYXNzTmFtZSIsInNldFRpbWVvdXQiLCJmb2N1cyIsIk11bHRpU2VsZWN0Qm94Q3NzIiwidmFsIiwiX2l0ZW0iLCJfaXRlbVZhbHVlIiwic3BsaXQiLCJydCIsImxlbmd0aCIsIm4iLCJzZWFyY2hLZXl3b3JkIiwicmVzdWx0SnNvbiIsIl9sYWJlbHMiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibCIsImpvaW4iLCJiaW5kQXNzb2NpYXRlQ29udHJvbCIsIiR0aGlzIiwibGF0IiwibG5nIiwicmRzIiwia2V5ZG93biIsImtleUNvZGUiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzZWxlY3RJdGVtIiwiaGlnaGxpZ2h0SXRlbSIsImhpZGUiLCJrZXlwcmVzcyIsInBhcnNlSW50IiwicHJldmVudERlZmF1bHQiLCJrZXl1cCIsInNob3ciLCJpbmRleE9mIiwiZmluZCIsIl90ZW1wQ29udE11bHQiLCJnZXRDdXJyZW50TG9jYXRpb25PYmplY3QiLCJjb25zb2xlIiwibG9nIiwiYmx1ciIsImlzTWFudWFsU2VsZWN0IiwiZGF0YSIsInBhcmVudCIsInJlbW92ZUNsYXNzIiwiSW5pdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJwcm90b2NvbCIsInRvTG93ZXJDYXNlIiwiaG9zdG5hbWUiLCJtb3VzZW92ZXIiLCJzZWFyY2hOZWFyYnkiLCJvbiIsIm1vdXNlb3V0IiwiaWR4IiwibmF2aWdhdG9yIiwiZ2VvbG9jYXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJwb3NpdGlvbiIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwibG9va3VwTGFiZWwiLCJhZnRlclNlYXJjaCIsImFib3J0IiwiX3NlYXJjaFBhcmFtIiwiX3NlYXJjaEtleXdvcmQiLCJnZXRUaW1lIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ1bmRlZmluZWQiLCJfaXRlbURhdGEiLCJfZmllbGQiLCJfY2F0ZWdvcnlpdGVtIiwiX2NhdGVvZ29yeW5hbWUiLCJoaWdobGlnaHRLZXl3b3JkIiwiZ2V0RmllbGRKc29uIiwiSXRlbVRlbXBsYXRlIiwiZCIsIkl0ZW1UZW1wbGF0ZXMiLCJqIiwiVGVtcGxhdGUiLCJtb3VzZWRvd24iLCJhdXRvU2VsZWN0SXRlbSIsImciLCJpbmNsdWRlcyIsInN0YXR1c0NvZGUiLCJfbGFiZWwiLCJfc2VsZWN0ZWRWYWx1ZSIsIlNlbGVjdG9yIiwiayIsIm5vY2xlYXIiLCJhdXRvU2VsZWN0Iiwic3RhcnRzV2l0aCIsIlNraXBTZWxlY3QiLCJyZWdFeCIsIlJlZ0V4cCIsInZhbHVlIiwiaW5pdGlhbExvYWQiLCJsYWJlbHMiLCJfY3RybE11bHRpRmllbGQiLCJfdmFsdWVJdGVtcyIsIl9tdWx0aVNlbGVjdEl0ZW0iLCJyZW1vdmVGcm9tTXVsdGlTZWxlY3QiLCJNdWx0aUl0ZW1UZW1wbGF0ZSIsIm1lIiwicmVtb3ZlIiwiZGlyZWN0aW9uIiwib2JqZWN0Iiwid2lkdGgiLCJvZmZzZXQiLCJsZWZ0IiwiaGVpZ2h0IiwidG9wIiwiZmllbGROYW1lIiwiUmVjb3JkVHlwZXMiLCJOYW1lIiwiRmllbGRzIiwic3RyIiwia2V5d29yZCIsInByZWdfcXVvdGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJzb3VyY2VSb290IjoiIn0=
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var l=t();for(var a in l)("object"==typeof exports?exports:e)[a]=l[a]}}(self,(()=>(()=>{var e={803:()=>{var e;(e=jQuery).fn.extend({OneSearch:function(t){var l=e.extend({ServiceUrl:"",OneSearchName:"",OneSearchDS:null,MinCharLimit:3,EnableCurrentLocation:!1,EnablePreList:!1,AutoSelectFirstItem:!1,ResultLimit:10,EnableTouch:!1,DataSource:null,DataSourceControl:null,ContainerCss:"",ItemCss:"",HighlightItemCss:"",Region:"US",Locale:"NONE",HelpText:"",AnimatePlaceholderText:!1,MultiSelect:!1,MultiSelectBoxId:"",MultiSelectShowHelpText:!0,MultiKeywordDelimiter:"",LoadingImageUrl:"",ParentContainer:"",BeforeCall:null,AfterCall:null,OnSuccess:null,OnError:null,OnSelect:null,OnTextChange:null,OnSearch:null,OnIncrementalSearch:null,OnMultiSelectRemove:null,SearchMode:"Database",TestMode:!1,StickyMode:!1,EnableCategoryView:!1},t),a=null,n=null,r=null,o=null,s="",c="",d=null,u=null,h=[],p=0,m=!1,v=!1;return this.each((function(){!function(i){if(l.StickyMode&&!l.TestMode&&(l.TestMode=!0),a=i,l.AutoSelectFirstItem&&(n=e('input[id="'+e(a).attr("id")+'_AUTO_ITEM"]')),e(a).attr("autocomplete","nope"),e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},r=e("<div>").attr("id",e(a).attr("id")+"_OneSearch").css("position",l.EnableTouch?"relative":"absolute").css("top",b(e(a))).css("width",x(e(a))).css("display","none").addClass(l.ContainerCss).html(l.HelpText),""!=l.ParentContainer?e("#"+l.ParentContainer).append(r):r.insertAfter(e(a)),e(a).closest("div").click((function(t){"block"==e(a).css("display")&&""!=e(a).html()||"CloseArea"!=t.target.className&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),500))})),l.MultiSelect&&(""!=l.MultiSelectBoxId&&(o=e("#"+l.MultiSelectBoxId)),null!=o&&""!=l.MultiSelectBoxCss&&o.addClass(l.MultiSelectBoxCss),l.MultiSelect&&e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){if(""!=e(this).val()){var t={},l=e(this).attr("id").split("_");t.rt=l[l.length-2],t.n=l[l.length-1],"True"==e(this).attr("data-label-lookup")?S(t.rt+"|"+t.n+"::"+e(this).val(),(function(l){var n="",i="";Array.isArray(l)&&(n=l.map((function(e){return e.l})).join(";"),i=l.map((function(e){return e.k})).join(";")),T(t,i,!0,n),e(a).val("")})):T(t,e(this).val(),!0)}}))),l.EnableCurrentLocation){var d=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(),g=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(),O=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val();void 0!==d&&void 0!==g&&void 0!==O&&""!=d&&""!=g&&""!=O&&(v=!0)}e(a).keydown((function(t){switch(t.keyCode){case 9:case 13:l.AutoSelectFirstItem&&e(a).val().length>0?(p>0?C():y(0,!1,!0),m=!1):(C(),m=!1);break;case 38:_(-1);break;case 39:l.AutoSelectFirstItem&&(y(0,!1,!0),e(r).hide(),e(n).val(""));break;case 40:_(1);break;case 27:e(r).hide(),u=null,h=[],p=0}})),e(a).keypress((function(t){parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),13==t.keyCode&&t.preventDefault()})),e(a).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(a).val().length||(T(null,null),l.AutoSelectFirstItem&&n.val("")),13==t.keyCode&&e(a).val().length>0&&!m?l.OnSearch&&l.OnSearch():13==t.keyCode&&e(a).val().length>0&&l.AutoSelectFirstItem?p>0?C():y(0,!1,!0):l.OnIncrementalSearch&&l.OnIncrementalSearch(),e(a).val().length>=l.MinCharLimit||l.EnablePreList||l.EnableCurrentLocation?e(r).show():e(r).hide(),13==t.keyCode&&e(r).hide(),e(a).val().indexOf(s)<0&&e(r).html(""),8!=t.keyCode&&46!=t.keyCode||(s="",c=""),s!=e(a).val()&&(l.OnTextChange&&l.OnTextChange(e(a).val()),T(null,null),s=e(a).val(),"none"!=e(r).css("display")&&(""!=l.LoadingImageUrl&&e(a).val().length>=l.MinCharLimit&&e(r).html('<img src="'+l.LoadingImageUrl+'" />'),setTimeout((function(){S()}),500))))})),e(a).focus((function(){if(parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),l.MultiSelect)if(o.find("a.agora-onesearch-multi-sel-item-close").length>0){var n=e("<div>").html(e(o.html()));e(n).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),l.MultiSelectShowHelpText?l.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(l.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(a).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+n.html()+"</div>":l.EnableCurrentLocation&&e(n).append(f())}else l.HelpText="",l.EnableCurrentLocation&&(0==e(r).find("[data-location-search]").length&&e(r).append(f()),e(r).show());l.EnablePreList?(S(),e(r).show()):!l.MultiSelect&&l.EnableCurrentLocation?(0==e(r).find("[data-location-search]").length&&e(r).append(f()),console.log(f()),e(r).show()):""!=l.HelpText&&""==e(a).val()&&(e(r).html(l.HelpText),parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),e(r).show())})),e(a).blur((function(){l.AutoSelectFirstItem&&e(a).val().length>0&&!l.MultiSelect&&setTimeout((function(){var t=e(a).data("is-manual-select");void 0!==t&&0!=t||y(0,!0,!0),e(a).data("is-manual-select",!1)}),50),setTimeout((function(){l.TestMode?(e(r).find("[data-location-search]").length>0&&l.TestMode||l.StickyMode&&0==e(r).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(r).html(""),e(r).hide(),e(r).parent().removeClass("is-dirty")):(e(r).html(""),e(r).hide(),0==e(a).val().length&&e(r).parent().removeClass("is-dirty"))}),200)})),S(),1==l.AnimatePlaceholderText&&""==e(a).val()&&AnimatePlaceholderText(e(a),"",0)}(e(this))}));function f(){return l.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(a).attr("EnableCurrentLocationLabel")).css("display","block").css("width","100%").css("padding","3px").css("color","red").attr("idx",-1).addClass("get-my-direction").attr("data-location-search","").mouseover((function(){e(this).css("background-color:red"),e(this).addClass(l.HighlightItemCss)})).click((function(){g(e(this).attr("idx"))})).on("tap",(function(){g(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})):null}function g(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(null!=e(a).attr("DefaultSearchRadius")&&"0"!=e(a).attr("DefaultSearchRadius")?e(a).attr("DefaultSearchRadius"):"5"),v=!0,l.OnSelect&&l.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),l.OnSuccess&&l.OnSuccess()})),y(t)}function S(t,o){(c!=e(a).val()||l.EnablePreList||null!=t)&&(null!=d&&d.abort(),e(a).val().length<l.MinCharLimit?s="":c=e(a).val(),null==t&&!l.EnablePreList&&e(a).val().length<l.MinCharLimit||(l.AutoSelectFirstItem&&(e(n).val(""),e(a).data("is-manual-select",!1)),_searchParam=e(a).val().length<l.MinCharLimit?"":e(a).val(),_searchKeyword=(e(a).val().length<l.MinCharLimit?"":e(a).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),null!=t&&t.length>0&&(_searchParam=_searchKeyword="LOOKUP_LABEL::"+t),d=e.ajax({type:"POST",url:l.ServiceUrl+"?Keyword="+_searchKeyword,data:{Keyword:_searchParam,SearchMode:l.SearchMode,OneSearchName:l.OneSearchName,Region:l.Region,Locale:l.Locale,AdditionalWhere:e(a).attr("AdditionalWhere")},dataType:"json",success:function(n){if(null==t||null==o)if(u=n,p=0,e(r).html(""),null!=n&&0!=n.length){var s="",c="",d=null,h="",m="";for(i=0;i<n.length;i++){if(s=M(n[i].l,e(a).val()),null!=(c=L(l.OneSearchDS,n[i].rt,n[i].n))&&null!=c.ItemTemplate&&""!=c.ItemTemplate)s=(s=c.ItemTemplate.replace("{$l}",M(n[i].l,e(a).val()))).replace("{$d}",n[i].d);else if(null!=c&&c.ItemTemplates.length>0)for(j=0;j<c.ItemTemplates.length;j++)c.ItemTemplates[j].Locale==l.Locale&&(s=(s=c.ItemTemplates[j].Template.replace("{$l}",M(n[i].l,e(a).val()))).Template.replace("{$d}",n[i].d));d=e("<a>").html(s).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(l.HighlightItemCss)})).mousedown((function(){e(a).data("is-manual-select",!0)})).click((function(){y(e(this).attr("idx"))})).on("tap",(function(){e(a).data("is-manual-select",!0),y(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})),0==i&&l.AutoSelectFirstItem&&O(i),l.EnableCategoryView?(m!=n[i].g&&((h=e("<div>").addClass("OneSearchBox-category-"+n[i].g)).append(e("<span>").html(n[i].g)),m=n[i].g),h.append(d),e(r).append(h),0==i&&e(r)[i].className.includes("OneSearchBox-")&&(e(r)[i].className=e(r)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(r).addClass("OneSearchBox-"+n[i].g)):e(r).append(d)}}else e(r).hide();else o(n)},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function C(){if(!(null==u||u.length<p-1||p<=0)){var t,n="",i=L(l.OneSearchDS,u[p-1].rt,u[p-1].n);null!=i&&""!=i.ItemTemplate&&(n=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?u[p-1].k:u[p-1].l),t=u[p-1].l,l.MultiSelect?e(a).val(""):e(a).val(t),s=e(a).val(),T(u[p-1],n),l.AutoSelectFirstItem&&O(p-1),l.OnSelect&&l.OnSelect(u[p-1]),p=0,l.TestMode||e(r).html("")}}function y(t,i,o){var c="",d="";if(null!=i&&null!=i||(i=!1),null!=o&&null!=o||(o=!1),void 0!==u&&null!=u&&0!=u.length){var h=L(l.OneSearchDS,u[t].rt,u[t].n);null!=h&&""!=h.ItemTemplate&&(d=null!=h.Selector&&null!=h.Selector&&"k"==h.Selector?u[t].k:u[t].l),c=u[t].l,1!=o||c.toLowerCase().startsWith(e(a).val().toLowerCase())?(l.MultiSelect?(e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")):(null!=h&&1!=h.SkipSelect?e(a).val(c):e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")),s=e(a).val(),t>=0&&v&&(e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=h&&1!=h.SkipSelect&&T(u[t],d),l.OnSelect&&l.OnSelect(u[t]),l.TestMode||i||e(r).html(""),l.MultiSelect&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),200))):e(n).val("")}}function O(t){var i="";if(void 0!==u&&null!=u&&0!=u.length){var r=L(l.OneSearchDS,u[t].rt,u[t].n);if(null!=r&&""!=r.ItemTemplate&&(null!=r.Selector&&null!=r.Selector&&"k"==r.Selector?u[t].k:u[t].l),(i=u[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(a).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(a).val(),"ig");e(n).val(i.replace(o,e(a).val())),s=e(a).val()}else e(n).val("")}}function T(t,n,r,s){if(l.MultiSelect){if(null==t)return;var c=e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n),d=u=n.split(";");if(null!=s&&null!=s)var u=s.split(";");var h=L(l.OneSearchDS,t.rt,t.n);for(i=0;i<u.length&&null!=h;i++)if(!(u[i].length<2)&&(-1==(";"+c.val().toLowerCase()+";").indexOf(";"+u[i].toLowerCase()+";")||r)){r||c.val(c.val()+";"+u[i]);var p=e("<div>").addClass("agora-onesearch-multi-sel-item-cont").attr("id","multiitem"+e(a).attr("id")+"_"+t.rt+"_"+t.n+u[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).append(e("<a>").addClass("agora-onesearch-multi-sel-item-close").attr("title","Click here to hide this area filter.").attr("id","multiitem_close_"+e(a).attr("id")+"_"+t.rt+"_"+t.n+u[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).attr("val",d[i]).html('<i class="aga aga-close"></i>').click((function(){I(e(this),t,e(this).attr("val"))}))).append(e("<a>").html(h.MultiItemTemplate.replace("{$l}",null!=t&&null!=t.l?t.l:u[i]).replace("{$d}",null!=t&&null!=t.d?t.d:u[i])));o.append(p)}!r&&l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}else{if(e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n).val(n)}}function I(t,n,i){var o=e("#"+e(a).attr("id")+"_"+n.rt+"_"+n.n);0!=o.val().indexOf(";")&&o.val(";"+o.val()),o.val(o.val().replace(";"+i,"")),e(t).parent().remove(),""!=o.val()&&0!=e(r).find("div.agora-onesearch-multi-sel-item-cont").length||(e(r).html(""),e(r).hide()),l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}function _(t){m=!0,t>0?p<e(r).find("a").length&&p++:p>1&&p--,e(r).find("a").each((function(){e(this).removeClass(l.HighlightItemCss)})),e(r).find(l.EnableCategoryView?"a[idx="+p+"]":"a:nth-child("+p+")").addClass(l.HighlightItemCss)}function x(e){if(null==e||0==e.length)return 0;var t=e.width();return t+=parseInt(e.css("padding-left"),10)+parseInt(e.css("padding-right"),10),t+=parseInt(e.css("borderLeftWidth"),10)+parseInt(e.css("borderRightWidth"),10),""!=l.ParentContainer&&(t+=e.offset().left),t}function b(e){if(null==e||0==e.length)return 0;var t=e.height();return t+=parseInt(e.css("padding-top"),10)+parseInt(e.css("padding-bottom"),10),t+=parseInt(e.css("borderTopWidth"),10)+parseInt(e.css("borderBottomWidth"),10),t+=e.position().top,""!=l.ParentContainer&&(t+=e.offset().top),t}function L(e,t,l){if(null!=h[t+"_"+l])return h[t+"_"+l];for(k=0;k<e.RecordTypes.length;k++)for(j=0;e.RecordTypes[k].Name==t&&j<e.RecordTypes[k].Fields.length;j++)if(e.RecordTypes[k].Fields[j].Name==l)return h[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function M(e,t){return e.replace(new RegExp("("+function(e){return(e+"").replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1")}(t)+")","gi"),"<strong>$1</strong>")}}})}},t={};function l(a){var n=t[a];if(void 0!==n)return n.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,l),i.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";l.r(a);l(803)})(),a})()));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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d2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heE9uZVNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCLvu78oZnVuY3Rpb24gKCQpIHtcclxuXHJcbiAgICAvL0F0dGFjaCB0aGlzIG5ldyBtZXRob2QgdG8galF1ZXJ5XHJcbiAgICAkLmZuLmV4dGVuZCh7XHJcblxyXG4gICAgICAgIC8vVGhpcyBpcyB3aGVyZSB5b3Ugd3JpdGUgeW91ciBwbHVnaW4ncyBuYW1lXHJcbiAgICAgICAgT25lU2VhcmNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAgICAgLy9TZXQgdGhlIGRlZmF1bHQgdmFsdWVzLCB1c2UgY29tbWEgdG8gc2VwYXJhdGUgdGhlIHNldHRpbmdzLCBleGFtcGxlOlxyXG4gICAgICAgICAgICB2YXIgX2RlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIE9uZVNlYXJjaERTOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgTWluQ2hhckxpbWl0OiAzLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlQ3VycmVudExvY2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZVByZUxpc3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgQXV0b1NlbGVjdEZpcnN0SXRlbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBSZXN1bHRMaW1pdDogMTAsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVUb3VjaDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBEYXRhU291cmNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUNvbnRyb2w6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBDb250YWluZXJDc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBIaWdobGlnaHRJdGVtQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIFJlZ2lvbjogJ1VTJyxcclxuICAgICAgICAgICAgICAgIExvY2FsZTogJ05PTkUnLFxyXG4gICAgICAgICAgICAgICAgSGVscFRleHQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdEJveElkOiAnJyxcclxuICAgICAgICAgICAgICAgIE11bHRpU2VsZWN0U2hvd0hlbHBUZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlLZXl3b3JkRGVsaW1pdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIExvYWRpbmdJbWFnZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBQYXJlbnRDb250YWluZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgQmVmb3JlQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEFmdGVyQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU3VjY2VzczogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uRXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlbGVjdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uVGV4dENoYW5nZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU2VhcmNoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25JbmNyZW1lbnRhbFNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uTXVsdGlTZWxlY3RSZW1vdmU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBTZWFyY2hNb2RlOiAnRGF0YWJhc2UnLCAvLyBDYWNoZSwgRGF0YWJhc2UsIFNtYXJ0XHJcbiAgICAgICAgICAgICAgICBUZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBTdGlja3lNb2RlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUNhdGVnb3J5VmlldzogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9vcHRpb25zID0gJC5leHRlbmQoX2RlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRDb250cm9sID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRBdXRvQ29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfb25lU2VhcmNoQm94ID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9NdWx0aVNlbGVjdEJveCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2xhc3RLZXl3b3JkID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHZhciBfcmVxdWVzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgIHZhciBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIHZhciBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vSXRlcmF0ZSBvdmVyIHRoZSBjdXJyZW50IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgSW5pdCgkKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBJbml0KG9iaikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgIV9vcHRpb25zLlRlc3RNb2RlKSBfb3B0aW9ucy5UZXN0TW9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RhcmdldENvbnRyb2wgPSBvYmo7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0QXV0b0NvbnRyb2wgPSAkKCdpbnB1dFtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19BVVRPX0lURU1cIl0nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgYnJvd3NlciBhdXRvY29tcGxldGUgb24gaW5wdXRcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NlY3VyaW5nX3lvdXJfc2l0ZS9UdXJuaW5nX29mZl9mb3JtX2F1dG9jb21wbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdhdXRvY29tcGxldGUnLCAnbm9wZScpO1xyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignbmFtZScsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwkL2dpLCAnXycpICsgKG5ldyBEYXRlKCkpLnZhbHVlT2YoKSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3ggPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJylcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdwb3NpdGlvbicsIChfb3B0aW9ucy5FbmFibGVUb3VjaCA/ICdyZWxhdGl2ZScgOiAnYWJzb2x1dGUnKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhfb3B0aW9ucy5Db250YWluZXJDc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLlBhcmVudENvbnRhaW5lcikuYXBwZW5kKF9vbmVTZWFyY2hCb3gpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94Lmluc2VydEFmdGVyKCQoX3RhcmdldENvbnRyb2wpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5jbG9zZXN0KCdkaXYnKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS5jc3MoJ2Rpc3BsYXknKSA9PSAnYmxvY2snICYmICQoX3RhcmdldENvbnRyb2wpLmh0bWwoKSAhPSAnJykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT0gJ0Nsb3NlQXJlYScpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvL01kbFJlbG9hZENvbnRyb2xTdGF0ZSgkKHRoaXMpLCAkKHRoaXMpLmNsb3Nlc3QoJ1tkYXRhLXNlYXJjaF0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3ggPSAkKCcjJyArIF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3ggIT0gbnVsbCAmJiBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveENzcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYWRkQ2xhc3MoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkTXVsdGlTZWxlY3RPbkxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2NoZWNrIGlzIGxvY2F0aW9uIHNlYXJjaCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhdCA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG5nID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmRzID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobGF0KSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKGxuZykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChyZHMpICE9ICd1bmRlZmluZWQnICYmIGxhdCAhPSAnJyAmJiBsbmcgIT0gJycgJiYgcmRzICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOSAvKiB0YWIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTMgLyogZW50ZXIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYXNlIDM3IC8qIGxlZnQgKi86XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzggLyogdXAgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM5IC8qIHJpZ2h0ICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwIC8qIGRvd24gKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjcgLyogZXNjYXBlICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5cHJlc3MoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5dXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2IHx8IGUua2V5Q29kZSA9PSA4OCB8fCBlLmtleUNvZGUgPT0gODYpICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgX3RhcmdldEF1dG9Db250cm9sLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2lmIChlLmtleUNvZGUgPT0gMTMgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCAmJiAkKF9vbmVTZWFyY2hCb3gpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9pc09uQXJyb3dTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VhcmNoKSBfb3B0aW9ucy5PblNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDApIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpOyBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpb25zLk9uSW5jcmVtZW50YWxTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0IHx8IF9vcHRpb25zLkVuYWJsZVByZUxpc3QgfHwgX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTsgZWxzZSAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5pbmRleE9mKF9sYXN0S2V5d29yZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoYW5nZSB0aGUgbGFzdCBhbmQgY3VycmVudCB2YWx1ZSBpbiB0aGUga2V5d29yZCwgdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9sYXN0S2V5d29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25UZXh0Q2hhbmdlKSBfb3B0aW9ucy5PblRleHRDaGFuZ2UoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBhc3NvY2lhdGVkIGNvbnRyb2xzIHNpbmNlIHRoZSBrZXl3b3JkIGhhcyBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRleHQgYm9veCBhcyBsYXN0IHZhbHVlL2tleXdvcmRcclxuICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN1Z2dlc3Rpb24gYm94IGlzIGhpZGRlbiB0aGVuIG5vIG5lZWQgdG8gY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnPGltZyBzcmM9XCInICsgX29wdGlvbnMuTG9hZGluZ0ltYWdlVXJsICsgJ1wiIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5mb2N1cyhmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RlbXBDb250TXVsdCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgkKF9NdWx0aVNlbGVjdEJveC5odG1sKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ29uY2xpY2snLCAnamF2YXNjcmlwdDokKFxcJyMnICsgb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkICsgJyAjJyArICQodGhpcykuYXR0cignaWQnKSArICdcXCcpLnRyaWdnZXIoXFwnY2xpY2tcXCcpJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0KSBfb3B0aW9ucy5IZWxwVGV4dCA9ICc8ZGl2IHN0eWxlPVwicGFkZGluZzo3cHhcIj48Zm9udCBzdHlsZT1cImNvbG9yOnJlZFwiPllvdSBoYXZlIGFscmVhZHkgc2VsZWN0ZWQ8L2ZvbnQ+JyArICgoX29wdGlvbnMuU3RpY2t5TW9kZSkgPyAnPGEgY2xhc3M9XCJDbG9zZUFyZWFcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRpdGxlPVwiQ2xpY2sgaGVyZSB0byBoaWRlIHNlbGVjdGVkIGZpbHRlcnMuXCIgb25jbGljaz1cIiQoXFwnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19PbmVTZWFyY2gnICsgJ1xcJykuaGlkZSgpO1wiPkNsb3NlPC9hPicgOiAnJykgKyAnPGhyIHN0eWxlPVwibWFyZ2luOjBweCAwcHggN3B4IDBweFwiIC8+JyArIF90ZW1wQ29udE11bHQuaHRtbCgpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IZWxwVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5IZWxwVGV4dCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmJsdXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTWFudWFsU2VsZWN0ID0gJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXNNYW51YWxTZWxlY3QpID09ICd1bmRlZmluZWQnIHx8IGlzTWFudWFsU2VsZWN0ID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFuaW1hdGVQbGFjZWhvbGRlclRleHQgPT0gdHJ1ZSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQoJChfdGFyZ2V0Q29udHJvbCksICcnLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbiAmJiAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdodHRwcycpID4gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZignbG9jYWxob3N0JykgPiAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1sb2NhdGlvblwiPjwvaT4nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRW5hYmxlQ3VycmVudExvY2F0aW9uTGFiZWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywgJzNweCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2NvbG9yJywgJ3JlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCAtMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdnZXQtbXktZGlyZWN0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtbG9jYXRpb24tc2VhcmNoJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcjpyZWQnKTsgJCh0aGlzKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdXQoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhck5lYXJieSgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjZHJhd19zZWFyY2gnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hOZWFyYnkoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCgkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gbnVsbCAmJiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gJzAnKSA/ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0RlZmF1bHRTZWFyY2hSYWRpdXMnKSA6ICc1Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoeyBcImtcIjogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlICsgJ3wnICsgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgXCJuXCI6IFwiSURDTEFUSVRVREV8SURDTE9OR0lUVURFXCIsIFwicnRcIjogXCJMT0NBVElPTlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TdWNjZXNzKSBfb3B0aW9ucy5PblN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbShpZHgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hLZXl3b3JkKGxvb2t1cExhYmVsLCBhZnRlclNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9sYXN0U2VhcmNod29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSAmJiAhX29wdGlvbnMuRW5hYmxlUHJlTGlzdCAmJiBsb29rdXBMYWJlbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYWxyZWFkeSBhIHJlcXVlc3Qgbm90IHlldCBjb21wbGV0ZWQgdGhlbiB0aGF0IG5lZWQgdG8gc3RvcC9hYm9ydCBiZWZvcmUgc3RhYXJ0aW5nIG5ldyBvbmVcclxuICAgICAgICAgICAgICAgIGlmIChfcmVxdWVzdCAhPSBudWxsKSBfcmVxdWVzdC5hYm9ydCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPCBfb3B0aW9ucy5NaW5DaGFyTGltaXQpIF9sYXN0S2V5d29yZCA9ICcnOyBlbHNlIF9sYXN0U2VhcmNod29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsb29rdXBMYWJlbCA9PSBudWxsICYmICFfb3B0aW9ucy5FbmFibGVQcmVMaXN0ICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW0gPSAoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgPyAnJyA6ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKVxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaEtleXdvcmQgPSAoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgPyAnJyA6ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnJlcGxhY2UoLyMvZywgJyUyMycpKSArICcmdD0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcclxuICAgICAgICAgICAgICAgIGlmIChsb29rdXBMYWJlbCAhPSBudWxsICYmIGxvb2t1cExhYmVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW0gPSBfc2VhcmNoS2V5d29yZCA9ICdMT09LVVBfTEFCRUw6OicgKyBsb29rdXBMYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfcmVxdWVzdCA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogX29wdGlvbnMuU2VydmljZVVybCArIFwiP0tleXdvcmQ9XCIgKyBfc2VhcmNoS2V5d29yZCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiAoeyBcIktleXdvcmRcIjogX3NlYXJjaFBhcmFtLCBcIlNlYXJjaE1vZGVcIjogX29wdGlvbnMuU2VhcmNoTW9kZSwgXCJPbmVTZWFyY2hOYW1lXCI6IF9vcHRpb25zLk9uZVNlYXJjaE5hbWUsIFwiUmVnaW9uXCI6IF9vcHRpb25zLlJlZ2lvbiwgXCJMb2NhbGVcIjogX29wdGlvbnMuTG9jYWxlLCBcIkFkZGl0aW9uYWxXaGVyZVwiOiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdBZGRpdGlvbmFsV2hlcmUnKSB9KSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb29rdXBMYWJlbCAhPSBudWxsICYmIGFmdGVyU2VhcmNoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyU2VhcmNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNwb3NlQ2FjaGUgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkIHx8IGRhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW1EYXRhID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZmllbGQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jYXRlZ29yeWl0ZW0gPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jYXRlb2dvcnluYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gaGlnaGxpZ2h0S2V5d29yZChkYXRhW2ldLmwsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgZGF0YVtpXS5ydCwgZGF0YVtpXS5uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfZmllbGQuSXRlbVRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfaXRlbURhdGEucmVwbGFjZSgneyRkfScsIGRhdGFbaV0uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maWVsZC5JdGVtVGVtcGxhdGVzW2pdLkxvY2FsZSA9PSBfb3B0aW9ucy5Mb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGVzW2pdLlRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5UZW1wbGF0ZS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbSA9ICQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoX2l0ZW1EYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3BhZGRpbmcnLCAnM3B4JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd0ZXh0LWRlY29yYXRpb24nLCAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnY29sb3InLCAnYmxhY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmFkZENsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZWRvd24oZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VsZWN0SXRlbSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIHRydWUpOyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW91dChmdW5jdGlvbiAoKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9TZWxlY3RJdGVtKGksIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDYXRlZ29yeVZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NhdGVvZ29yeW5hbWUgIT0gZGF0YVtpXS5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0gPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdPbmVTZWFyY2hCb3gtY2F0ZWdvcnktJysgZGF0YVtpXS5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbS5hcHBlbmQgKCQoJzxzcGFuPicpLmh0bWwoZGF0YVtpXS5nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlb2dvcnluYW1lID0gZGF0YVtpXS5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZChfaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2NhdGVnb3J5aXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZS5pbmNsdWRlcygnT25lU2VhcmNoQm94LScpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZSA9ICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLnJlcGxhY2UoL1xcYk9uZVNlYXJjaEJveC1bQS1aYS16XSpcXGIvZywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC0nICsgZGF0YVtpXS5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2VydmljZSAoYWdvcmFPbmVTZWFyY2gpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpIHtcclxuICAgICAgICBpZiAoX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoIDwgKF9oaWdobGlnaHRJZHggLSAxKSB8fCBfaGlnaGxpZ2h0SWR4IDw9IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLnJ0LCBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLmw7XHJcblxyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKF9sYWJlbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXSwgX3NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSBhdXRvU2VsZWN0SXRlbSgoX2hpZ2hsaWdodElkeCAtIDEpKTtcclxuICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdKTtcclxuICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNlbGVjdEl0ZW0oaWR4LCBub2NsZWFyLCBhdXRvU2VsZWN0KSB7XHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChub2NsZWFyID09IHVuZGVmaW5lZCB8fCBub2NsZWFyID09IG51bGwpIG5vY2xlYXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB1bmRlZmluZWQgfHwgYXV0b1NlbGVjdCA9PSBudWxsKSBhdXRvU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbaWR4XS5ydCwgX3Jlc3Bvc2VDYWNoZVtpZHhdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbGFiZWwgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9TZWxlY3QgPT0gdHJ1ZSAmJiAhX2xhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgkKF90YXJnZXRDb250cm9sKS52YWwoKS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiZfZmllbGQuU2tpcFNlbGVjdCAhPSB0cnVlKSAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTsgZWxzZSAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSBjbGVhck5lYXJieSgpO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbaWR4XSwgX3NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtpZHhdKTtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlICYmICFub2NsZWFyKSAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTsgfSwgMjAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhdXRvU2VsZWN0SXRlbShpZHgpIHtcclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBfcmVzcG9zZUNhY2hlW2lkeF0ucnQsIF9yZXNwb3NlQ2FjaGVbaWR4XS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0uaztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcblxyXG4gICAgICAgIGlmICghX2xhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKSkpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLCBcImlnXCIpO1xyXG4gICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoX2xhYmVsLnJlcGxhY2UocmVnRXgsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKSk7XHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCkge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHJldHVybjtcclxuXHJcbiAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfaXRlbSA9IHt9OyAvL1t7IFwia1wiOiBcIkNoYXJsb3R0ZVwiLCBcImxcIjogXCJDaGFybG90dGUsIE5DXCIsIFwiblwiOiBcIkNJVFlcIiwgXCJydFwiOiBcIkNNTkNNTlwiIH1dXHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW1WYWx1ZSA9ICQodGhpcykuYXR0cignaWQnKS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ucnQgPSBfaXRlbVZhbHVlW19pdGVtVmFsdWUubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICBfaXRlbS5uID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtbGFiZWwtbG9va3VwJykgPT0gJ1RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZChfaXRlbS5ydCArICd8JyArIF9pdGVtLm4gKyAnOjonICsgJCh0aGlzKS52YWwoKSwgZnVuY3Rpb24gKHJlc3VsdEpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sYWJlbHMgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXlzID0gJyc7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRKc29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xhYmVscyA9IHJlc3VsdEpzb24ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJzsnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfa2V5cyA9IHJlc3VsdEpzb24ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJzsnKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9pdGVtLCBfa2V5cywgdHJ1ZSwgX2xhYmVscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgJCh0aGlzKS52YWwoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBiaW5kQXNzb2NpYXRlQ29udHJvbChpdGVtLCB2YWx1ZSwgaW5pdGlhbExvYWQsIGxhYmVscykge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVJdGVtcyA9IHZhbHVlLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZUl0ZW1zQ2FycmllciA9IF92YWx1ZUl0ZW1zO1xyXG4gICAgICAgICAgICBpZiAobGFiZWxzICE9IG51bGwgJiYgbGFiZWxzICE9IHVuZGVmaW5lZCkgdmFyIF92YWx1ZUl0ZW1zID0gbGFiZWxzLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgaXRlbS5ydCwgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfdmFsdWVJdGVtcy5sZW5ndGggJiYgX2ZpZWxkICE9IG51bGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKF92YWx1ZUl0ZW1zW2ldLmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCgnOycgKyBfY3RybE11bHRpRmllbGQudmFsKCkudG9Mb3dlckNhc2UoKSArICc7JykuaW5kZXhPZignOycgKyBfdmFsdWVJdGVtc1tpXS50b0xvd2VyQ2FzZSgpICsgJzsnKSA9PSAtMSB8fCBpbml0aWFsTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5pdGlhbExvYWQpIF9jdHJsTXVsdGlGaWVsZC52YWwoX2N0cmxNdWx0aUZpZWxkLnZhbCgpICsgJzsnICsgX3ZhbHVlSXRlbXNbaV0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgX211bHRpU2VsZWN0SXRlbSA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdhZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdtdWx0aWl0ZW0nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyBfdmFsdWVJdGVtc1tpXS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9bXkEtejAtOV0vZywgJ18nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8YT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdhZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgJ0NsaWNrIGhlcmUgdG8gaGlkZSB0aGlzIGFyZWEgZmlsdGVyLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnbXVsdGlpdGVtX2Nsb3NlXycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIF92YWx1ZUl0ZW1zW2ldLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1teQS16MC05XS9nLCAnXycpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3ZhbCcsIF92YWx1ZUl0ZW1zQ2FycmllcltpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtY2xvc2VcIj48L2k+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbU11bHRpU2VsZWN0KCQodGhpcyksIGl0ZW0sICQodGhpcykuYXR0cigndmFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfZmllbGQuTXVsdGlJdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIChpdGVtICE9IG51bGwgJiYgaXRlbS5sICE9IG51bGwpID8gaXRlbS5sIDogX3ZhbHVlSXRlbXNbaV0pLnJlcGxhY2UoJ3skZH0nLCAoaXRlbSAhPSBudWxsICYmIGl0ZW0uZCAhPSBudWxsKSA/IGl0ZW0uZCA6IF92YWx1ZUl0ZW1zW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYXBwZW5kKF9tdWx0aVNlbGVjdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWluaXRpYWxMb2FkICYmIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUpIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGFzTXVsdGlTZWxlY3RlZEl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiAoX29wdGlvbnMuTXVsdGlTZWxlY3QgJiYgX011bHRpU2VsZWN0Qm94LmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlRnJvbU11bHRpU2VsZWN0KG1lLCBpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuICAgICAgICBpZiAoX2N0cmxNdWx0aUZpZWxkLnZhbCgpLmluZGV4T2YoJzsnKSAhPSAwKSBfY3RybE11bHRpRmllbGQudmFsKCc7JyArIF9jdHJsTXVsdGlGaWVsZC52YWwoKSk7XHJcbiAgICAgICAgX2N0cmxNdWx0aUZpZWxkLnZhbChfY3RybE11bHRpRmllbGQudmFsKCkucmVwbGFjZSgnOycgKyB2YWx1ZSwgJycpKTtcclxuXHJcbiAgICAgICAgLy8kKCcjbXVsdGlpdGVtJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgdmFsdWUucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykpLnJlbW92ZSgpO1xyXG4gICAgICAgICQobWUpLnBhcmVudCgpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICBpZiAoX2N0cmxNdWx0aUZpZWxkLnZhbCgpID09IFwiXCIgfHwgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKSBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZ2hsaWdodEl0ZW0oZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgX2lzT25BcnJvd1NlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPiAwKSAvKmRvd24qLyB7XHJcbiAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4IDwgJChfb25lU2VhcmNoQm94KS5maW5kKCdhJykubGVuZ3RoKSBfaGlnaGxpZ2h0SWR4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgLyp1cCovIHtcclxuICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAxKSBfaGlnaGxpZ2h0SWR4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoX29uZVNlYXJjaEJveCkuZmluZCgnYScpLmVhY2goZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5VmlldykgPyAnYVtpZHg9JyArIF9oaWdobGlnaHRJZHggKyAnXScgOiAnYTpudGgtY2hpbGQoJyArIF9oaWdobGlnaHRJZHggKyAnKScpLmFkZENsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFRvdGFsV2lkdGhPZkNvbnRyb2wob2JqZWN0KSB7XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Qud2lkdGgoKTtcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1sZWZ0XCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1yaWdodFwiKSwgMTApOyAvL1RvdGFsIFBhZGRpbmcgV2lkdGhcclxuICAgICAgICAvL3ZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tbGVmdFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1yaWdodFwiKSwgMTApOyAvL1RvdGFsIE1hcmdpbiBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLCAxMCk7IC8vVG90YWwgQm9yZGVyIFdpZHRoXHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gb2JqZWN0Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2wob2JqZWN0KSB7XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QuaGVpZ2h0KCk7XHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctdG9wXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTsgLy9Ub3RhbCBQYWRkaW5nIFdpZHRoXHJcbiAgICAgICAgLy92YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLXRvcFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1ib3R0b21cIiksIDEwKTsgLy9Ub3RhbCBNYXJnaW4gV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSwgMTApOyAvL1RvdGFsIEJvcmRlciBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IG9iamVjdC5wb3NpdGlvbigpLnRvcDtcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBvYmplY3Qub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldEZpZWxkSnNvbihvYmosIHJ0LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBpZiAoX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdICE9IG51bGwpIHJldHVybiBfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV07XHJcblxyXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBvYmouUmVjb3JkVHlwZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgb2JqLlJlY29yZFR5cGVzW2tdLk5hbWUgPT0gcnQgJiYgaiA8IG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdLk5hbWUgPT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdID0gb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcmVnX3F1b3RlKHN0cikge1xyXG4gICAgICAgIHJldHVybiAoc3RyICsgJycpLnJlcGxhY2UoLyhbXFxcXFxcLlxcK1xcKlxcP1xcW1xcXlxcXVxcJFxcKFxcKVxce1xcfVxcPVxcIVxcPFxcPlxcfFxcOl0pL2csIFwiXFxcXCQxXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZ2hsaWdodEtleXdvcmQoc3RyLCBrZXl3b3JkKSB7XHJcbiAgICAgICAgLy9yZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChwcmVnX3F1b3RlKHRvKSwgJ2dpJyksIGJ5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXCIgKyBwcmVnX3F1b3RlKGtleXdvcmQpICsgXCIpXCIsICdnaScpLCBcIjxzdHJvbmc+JDE8L3N0cm9uZz5cIik7XHJcbiAgICB9XHJcbn1cclxufSk7XHJcbn0pKGpRdWVyeSk7XHJcblxyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07Il0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwic2VsZiIsIiQiLCJqUXVlcnkiLCJmbiIsImV4dGVuZCIsIk9uZVNlYXJjaCIsIm9wdGlvbnMiLCJfb3B0aW9ucyIsIlNlcnZpY2VVcmwiLCJPbmVTZWFyY2hOYW1lIiwiT25lU2VhcmNoRFMiLCJNaW5DaGFyTGltaXQiLCJFbmFibGVDdXJyZW50TG9jYXRpb24iLCJFbmFibGVQcmVMaXN0IiwiQXV0b1NlbGVjdEZpcnN0SXRlbSIsIlJlc3VsdExpbWl0IiwiRW5hYmxlVG91Y2giLCJEYXRhU291cmNlIiwiRGF0YVNvdXJjZUNvbnRyb2wiLCJDb250YWluZXJDc3MiLCJJdGVtQ3NzIiwiSGlnaGxpZ2h0SXRlbUNzcyIsIlJlZ2lvbiIsIkxvY2FsZSIsIkhlbHBUZXh0IiwiQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dCIsIk11bHRpU2VsZWN0IiwiTXVsdGlTZWxlY3RCb3hJZCIsIk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0IiwiTXVsdGlLZXl3b3JkRGVsaW1pdGVyIiwiTG9hZGluZ0ltYWdlVXJsIiwiUGFyZW50Q29udGFpbmVyIiwiQmVmb3JlQ2FsbCIsIkFmdGVyQ2FsbCIsIk9uU3VjY2VzcyIsIk9uRXJyb3IiLCJPblNlbGVjdCIsIk9uVGV4dENoYW5nZSIsIk9uU2VhcmNoIiwiT25JbmNyZW1lbnRhbFNlYXJjaCIsIk9uTXVsdGlTZWxlY3RSZW1vdmUiLCJTZWFyY2hNb2RlIiwiVGVzdE1vZGUiLCJTdGlja3lNb2RlIiwiRW5hYmxlQ2F0ZWdvcnlWaWV3IiwiX3RhcmdldENvbnRyb2wiLCJfdGFyZ2V0QXV0b0NvbnRyb2wiLCJfb25lU2VhcmNoQm94IiwiX011bHRpU2VsZWN0Qm94IiwiX2xhc3RLZXl3b3JkIiwiX2xhc3RTZWFyY2h3b3JkIiwiX3JlcXVlc3QiLCJfcmVzcG9zZUNhY2hlIiwiX2l0ZW1UZXBsYXRlQ2FjaGUiLCJfaGlnaGxpZ2h0SWR4IiwiX2lzT25BcnJvd1NlbGVjdGlvbiIsIl9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCIsInRoaXMiLCJlYWNoIiwib2JqIiwiYXR0ciIsInJlcGxhY2UiLCJEYXRlIiwidmFsdWVPZiIsIndpbmRvdyIsIm9ucG9wc3RhdGUiLCJldmVudCIsImNzcyIsImdldFRvdGFsSGVpZ2h0T2ZDb250cm9sIiwiZ2V0VG90YWxXaWR0aE9mQ29udHJvbCIsImFkZENsYXNzIiwiaHRtbCIsImFwcGVuZCIsImluc2VydEFmdGVyIiwiY2xvc2VzdCIsImNsaWNrIiwiZSIsInRhcmdldCIsImNsYXNzTmFtZSIsInNldFRpbWVvdXQiLCJmb2N1cyIsIk11bHRpU2VsZWN0Qm94Q3NzIiwidmFsIiwiX2l0ZW0iLCJfaXRlbVZhbHVlIiwic3BsaXQiLCJydCIsImxlbmd0aCIsIm4iLCJzZWFyY2hLZXl3b3JkIiwicmVzdWx0SnNvbiIsIl9sYWJlbHMiLCJfa2V5cyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJsIiwiam9pbiIsImsiLCJiaW5kQXNzb2NpYXRlQ29udHJvbCIsImxhdCIsImxuZyIsInJkcyIsImtleWRvd24iLCJrZXlDb2RlIiwic2VsZWN0SGlnaGxpZ2h0ZWRJdGVtIiwic2VsZWN0SXRlbSIsImhpZ2hsaWdodEl0ZW0iLCJoaWRlIiwia2V5cHJlc3MiLCJwYXJzZUludCIsInByZXZlbnREZWZhdWx0Iiwia2V5dXAiLCJzaG93IiwiaW5kZXhPZiIsImZpbmQiLCJfdGVtcENvbnRNdWx0IiwiZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0IiwiY29uc29sZSIsImxvZyIsImJsdXIiLCJpc01hbnVhbFNlbGVjdCIsImRhdGEiLCJwYXJlbnQiLCJyZW1vdmVDbGFzcyIsIkluaXQiLCJkb2N1bWVudCIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJ0b0xvd2VyQ2FzZSIsImhvc3RuYW1lIiwibW91c2VvdmVyIiwic2VhcmNoTmVhcmJ5Iiwib24iLCJtb3VzZW91dCIsImlkeCIsIm5hdmlnYXRvciIsImdlb2xvY2F0aW9uIiwiZ2V0Q3VycmVudFBvc2l0aW9uIiwicG9zaXRpb24iLCJjb29yZHMiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImxvb2t1cExhYmVsIiwiYWZ0ZXJTZWFyY2giLCJhYm9ydCIsIl9zZWFyY2hQYXJhbSIsIl9zZWFyY2hLZXl3b3JkIiwiZ2V0VGltZSIsImFqYXgiLCJ0eXBlIiwidXJsIiwiZGF0YVR5cGUiLCJzdWNjZXNzIiwidW5kZWZpbmVkIiwiX2l0ZW1EYXRhIiwiX2ZpZWxkIiwiX2NhdGVnb3J5aXRlbSIsIl9jYXRlb2dvcnluYW1lIiwiaGlnaGxpZ2h0S2V5d29yZCIsImdldEZpZWxkSnNvbiIsIkl0ZW1UZW1wbGF0ZSIsImQiLCJJdGVtVGVtcGxhdGVzIiwiaiIsIlRlbXBsYXRlIiwibW91c2Vkb3duIiwiYXV0b1NlbGVjdEl0ZW0iLCJnIiwiaW5jbHVkZXMiLCJzdGF0dXNDb2RlIiwiX2xhYmVsIiwiX3NlbGVjdGVkVmFsdWUiLCJTZWxlY3RvciIsIm5vY2xlYXIiLCJhdXRvU2VsZWN0Iiwic3RhcnRzV2l0aCIsIlNraXBTZWxlY3QiLCJyZWdFeCIsIlJlZ0V4cCIsInZhbHVlIiwiaW5pdGlhbExvYWQiLCJsYWJlbHMiLCJfY3RybE11bHRpRmllbGQiLCJfdmFsdWVJdGVtc0NhcnJpZXIiLCJfdmFsdWVJdGVtcyIsIl9tdWx0aVNlbGVjdEl0ZW0iLCJyZW1vdmVGcm9tTXVsdGlTZWxlY3QiLCJNdWx0aUl0ZW1UZW1wbGF0ZSIsIm1lIiwicmVtb3ZlIiwiZGlyZWN0aW9uIiwib2JqZWN0Iiwid2lkdGgiLCJvZmZzZXQiLCJsZWZ0IiwiaGVpZ2h0IiwidG9wIiwiZmllbGROYW1lIiwiUmVjb3JkVHlwZXMiLCJOYW1lIiwiRmllbGRzIiwic3RyIiwia2V5d29yZCIsInByZWdfcXVvdGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJzb3VyY2VSb290IjoiIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ibp-max",
3
- "version": "1.1.20",
3
+ "version": "1.1.21",
4
4
  "description": "Style & JS optimized",
5
5
  "main": "index.js",
6
6
  "scripts": {