ibp-max 3.0.13 → 3.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/onesearch.js +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,a=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),n=null,r=null,o=null,s=null,c="",d="",u=null,h=null,p=[],m=0,v=!1,f=!1;return this.each((function(){!function(l){if(a.StickyMode&&!a.TestMode&&(a.TestMode=!0),n=l,a.AutoSelectFirstItem&&(r=e('input[id="'+e(n).attr("id")+'_AUTO_ITEM"]')),e(n).attr("autocomplete","nope"),e(n).attr("name",e(n).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(n).attr("name",e(n).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},o=e("<div>").attr("id",e(n).attr("id")+"_OneSearch").css("position",a.EnableTouch?"relative":"absolute").css("top",L(e(n))).css("width",b(e(n))).css("display","none").addClass(a.ContainerCss).html(a.HelpText),""!=a.ParentContainer?e("#"+a.ParentContainer).append(o):o.insertAfter(e(n)),e(n).closest("div").click((function(t){"block"==e(n).css("display")&&""!=e(n).html()||"CloseArea"!=t.target.className&&(a.EnablePreList||setTimeout((function(){e(n).focus()}),500))})),a.MultiSelect?(""!=a.MultiSelectBoxId&&(s=e("#"+a.MultiSelectBoxId)),null!=s&&""!=a.MultiSelectBoxCss&&s.addClass(a.MultiSelectBoxCss),a.MultiSelect&&e('input[type="hidden"][id^="'+e(n).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")?C(t.rt+"|"+t.n+"::"+e(this).val(),(function(l){var a="",i="";Array.isArray(l)&&(a=l.map((function(e){return e.l})).join(";"),i=l.map((function(e){return e.k})).join(";")),I(t,i,!0,a),e(n).val("")})):I(t,e(this).val(),!0)}}))):a.MultiSelect||e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').each((function(){const t=e(this),l=t.val();if(l&&""!==l.trim()&&"True"===t.attr("data-label-lookup")){const e={},a=t.attr("id").split("_");e.rt=a[a.length-2],e.n=a[a.length-1],C(e.rt+"|"+e.n+"::"+l,(function(t){if(Array.isArray(t)&&t.length>0){const l=t[0].l,a=t[0].k;I(e,a,!0,l)}}))}})),a.EnableCurrentLocation){var i=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(),u=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(),S=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val();void 0!==i&&void 0!==u&&void 0!==S&&""!=i&&""!=u&&""!=S&&(f=!0)}e(n).keydown((function(t){switch(t.keyCode){case 9:case 13:a.AutoSelectFirstItem&&e(n).val().length>0?(m>0?y():O(0,!1,!0),v=!1):(y(),v=!1);break;case 38:x(-1);break;case 39:a.AutoSelectFirstItem&&(O(0,!1,!0),e(o).hide(),e(r).val(""));break;case 40:x(1);break;case 27:e(o).hide(),h=null,p=[],m=0}})),e(n).keypress((function(t){parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),13==t.keyCode&&t.preventDefault()})),e(n).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(n).val().length||(I(null,null),a.AutoSelectFirstItem&&r.val("")),13==t.keyCode&&e(n).val().length>0&&!v?a.OnSearch&&a.OnSearch():13==t.keyCode&&e(n).val().length>0&&a.AutoSelectFirstItem?m>0?y():O(0,!1,!0):a.OnIncrementalSearch&&a.OnIncrementalSearch(),e(n).val().length>=a.MinCharLimit||a.EnablePreList||a.EnableCurrentLocation?e(o).show():e(o).hide(),13==t.keyCode&&e(o).hide(),e(n).val().indexOf(c)<0&&e(o).html(""),8!=t.keyCode&&46!=t.keyCode||(c="",d=""),c!=e(n).val()&&(a.OnTextChange&&a.OnTextChange(e(n).val()),I(null,null),c=e(n).val(),"none"!=e(o).css("display")&&(""!=a.LoadingImageUrl&&e(n).val().length>=a.MinCharLimit&&e(o).html('<img src="'+a.LoadingImageUrl+'" />'),setTimeout((function(){C()}),500))))})),e(n).focus((function(){if(parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),a.MultiSelect)if(s.find("a.agora-onesearch-multi-sel-item-close").length>0){var l=e("<div>").html(e(s.html()));e(l).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),a.MultiSelectShowHelpText?a.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(a.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(n).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+l.html()+"</div>":a.EnableCurrentLocation&&e(l).append(g())}else a.HelpText="",a.EnableCurrentLocation&&(0==e(o).find("[data-location-search]").length&&e(o).append(g()),e(o).show());a.EnablePreList?(C(),e(o).show()):!a.MultiSelect&&a.EnableCurrentLocation?(0==e(o).find("[data-location-search]").length&&e(o).append(g()),console.log(g()),e(o).show()):""!=a.HelpText&&""==e(n).val()&&(e(o).html(a.HelpText),parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),e(o).show())})),e(n).blur((function(){a.AutoSelectFirstItem&&e(n).val().length>0&&!a.MultiSelect&&setTimeout((function(){var t=e(n).data("is-manual-select");void 0!==t&&0!=t||O(0,!0,!0),e(n).data("is-manual-select",!1)}),50),setTimeout((function(){a.TestMode?(e(o).find("[data-location-search]").length>0&&a.TestMode||a.StickyMode&&0==e(o).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(o).html(""),e(o).hide(),e(o).parent().removeClass("is-dirty")):(e(o).html(""),e(o).hide(),0==e(n).val().length&&e(o).parent().removeClass("is-dirty"))}),300)})),C(),1==a.AnimatePlaceholderText&&""==e(n).val()&&AnimatePlaceholderText(e(n),"",0)}(e(this))}));function g(){return a.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(n).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(a.HighlightItemCss)})).click((function(){S(e(this).attr("idx"))})).on("tap",(function(){S(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(a.HighlightItemCss)})):null}function S(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val(null!=e(n).attr("DefaultSearchRadius")&&"0"!=e(n).attr("DefaultSearchRadius")?e(n).attr("DefaultSearchRadius"):"5"),f=!0,a.OnSelect&&a.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),a.OnSuccess&&a.OnSuccess()})),O(t)}function C(t,s){(d!=e(n).val()||a.EnablePreList||null!=t)&&(null!=u&&null==l&&u.abort(),l=null!=t?t:null,e(n).val().length<a.MinCharLimit?c="":d=e(n).val(),null==t&&!a.EnablePreList&&e(n).val().length<a.MinCharLimit||(a.AutoSelectFirstItem&&(e(r).val(""),e(n).data("is-manual-select",!1)),_searchParam=e(n).val().length<a.MinCharLimit?"":e(n).val(),_searchKeyword=(e(n).val().length<a.MinCharLimit?"":e(n).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),null!=t&&t.length>0&&(_searchParam=_searchKeyword="LOOKUP_LABEL::"+t),u=e.ajax({type:"POST",url:a.ServiceUrl+"?Keyword="+_searchKeyword,data:{Keyword:_searchParam,SearchMode:a.SearchMode,OneSearchName:a.OneSearchName,Region:a.Region,Locale:a.Locale,AdditionalWhere:e(n).attr("AdditionalWhere")},dataType:"json",success:function(l){if(null==t||null==s)if(h=l,m=0,e(o).html(""),null!=l&&0!=l.length){var r="",c="",d=null,u="",p="";for(i=0;i<l.length;i++){if(r=w(l[i].l,e(n).val()),null!=(c=M(a.OneSearchDS,l[i].rt,l[i].n))&&null!=c.ItemTemplate&&""!=c.ItemTemplate)r=(r=c.ItemTemplate.replace("{$l}",w(l[i].l,e(n).val()))).replace("{$d}",l[i].d);else if(null!=c&&c.ItemTemplates.length>0)for(j=0;j<c.ItemTemplates.length;j++)c.ItemTemplates[j].Locale==a.Locale&&(r=(r=c.ItemTemplates[j].Template.replace("{$l}",w(l[i].l,e(n).val()))).Template.replace("{$d}",l[i].d));d=e("<a>").html(r).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(a.HighlightItemCss)})).mousedown((function(){e(n).data("is-manual-select",!0)})).click((function(){O(e(this).attr("idx"))})).on("tap",(function(){e(n).data("is-manual-select",!0),O(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(a.HighlightItemCss)})),0==i&&a.AutoSelectFirstItem&&T(i),a.EnableCategoryView?(p!=l[i].g&&((u=e("<div>").addClass("OneSearchBox-category-"+l[i].g)).append(e("<span>").html(l[i].g)),p=l[i].g),u.append(d),e(o).append(u),0==i&&e(o)[i].className.includes("OneSearchBox-")&&(e(o)[i].className=e(o)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(o).addClass("OneSearchBox-"+l[i].g)):e(o).append(d)}}else e(o).hide();else s(l)},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function y(){if(!(null==h||h.length<m-1||m<=0)){var t,l="",i=M(a.OneSearchDS,h[m-1].rt,h[m-1].n);null!=i&&""!=i.ItemTemplate&&(l=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?h[m-1].k:h[m-1].l),t=h[m-1].l,a.MultiSelect?e(n).val(""):e(n).val(t),c=e(n).val(),I(h[m-1],l),a.AutoSelectFirstItem&&T(m-1),a.OnSelect&&a.OnSelect(h[m-1]),m=0,a.TestMode||e(o).html("")}}function O(t,l,i){var s="",d="";if(null!=l&&null!=l||(l=!1),null!=i&&null!=i||(i=!1),void 0!==h&&null!=h&&0!=h.length){var u=M(a.OneSearchDS,h[t].rt,h[t].n);null!=u&&""!=u.ItemTemplate&&(d=null!=u.Selector&&null!=u.Selector&&"k"==u.Selector?h[t].k:h[t].l),s=h[t].l,1!=i||s.toLowerCase().startsWith(e(n).val().toLowerCase())?(a.MultiSelect?(e(n).val(""),a.AutoSelectFirstItem&&e(r).val("")):(null!=u&&1!=u.SkipSelect?e(n).val(s):e(n).val(""),a.AutoSelectFirstItem&&e(r).val("")),c=e(n).val(),t>=0&&f&&(e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=u&&1!=u.SkipSelect&&I(h[t],d),a.OnSelect&&a.OnSelect(h[t]),a.TestMode||l||e(o).html(""),a.MultiSelect&&(a.EnablePreList||setTimeout((function(){e(n).focus()}),200))):e(r).val("")}}function T(t){var l="";if(null!=e(n).val()&&""!=e(n).val()&&void 0!==h&&null!=h&&0!=h.length){var i=M(a.OneSearchDS,h[t].rt,h[t].n);if(null!=i&&""!=i.ItemTemplate&&(null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?h[t].k:h[t].l),(l=h[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(n).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(n).val(),"ig");e(r).val(l.replace(o,e(n).val())),c=e(n).val()}else e(r).val("")}}function I(t,l,r,o){if(a.MultiSelect){if(null==t)return;var c=e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n),d=u=l.split(";");if(null!=o&&null!=o)var u=o.split(";");var h=M(a.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(n).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(n).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(){_(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])));s.append(p)}!r&&a.OnMultiSelectRemove&&a.OnMultiSelectRemove()}else{const a=e('input[type="hidden"][id^="'+e(n).attr("id")+'"]'),i=a.is('[data-label-lookup="True"]');if(a.each((function(){e(this).val("")})),null==t)return;if(i&&o)e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n).val(o);else{if(e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n).val(l)}}}function _(t,l,i){var r=e("#"+e(n).attr("id")+"_"+l.rt+"_"+l.n);0!=r.val().indexOf(";")&&r.val(";"+r.val()),r.val(r.val().replace(";"+i,"")),e(t).parent().remove(),""!=r.val()&&0!=e(o).find("div.agora-onesearch-multi-sel-item-cont").length||(e(o).html(""),e(o).hide()),a.OnMultiSelectRemove&&a.OnMultiSelectRemove()}function x(t){v=!0,t>0?m<e(o).find("a").length&&m++:m>1&&m--,e(o).find("a").each((function(){e(this).removeClass(a.HighlightItemCss)})),e(o).find(a.EnableCategoryView?"a[idx="+m+"]":"a:nth-child("+m+")").addClass(a.HighlightItemCss)}function b(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),""!=a.ParentContainer&&(t+=e.offset().left),t}function L(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,""!=a.ParentContainer&&(t+=e.offset().top),t}function M(e,t,l){if(null!=p[t+"_"+l])return p[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 p[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function w(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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YWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heE9uZVNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCLvu78oZnVuY3Rpb24gKCQpIHtcclxuXHJcbiAgICAvL0F0dGFjaCB0aGlzIG5ldyBtZXRob2QgdG8galF1ZXJ5XHJcbiAgICAkLmZuLmV4dGVuZCh7XHJcblxyXG4gICAgICAgIC8vVGhpcyBpcyB3aGVyZSB5b3Ugd3JpdGUgeW91ciBwbHVnaW4ncyBuYW1lXHJcbiAgICAgICAgT25lU2VhcmNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAgICAgLy9TZXQgdGhlIGRlZmF1bHQgdmFsdWVzLCB1c2UgY29tbWEgdG8gc2VwYXJhdGUgdGhlIHNldHRpbmdzLCBleGFtcGxlOlxyXG4gICAgICAgICAgICB2YXIgX2RlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIE9uZVNlYXJjaERTOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgTWluQ2hhckxpbWl0OiAzLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlQ3VycmVudExvY2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZVByZUxpc3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgQXV0b1NlbGVjdEZpcnN0SXRlbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBSZXN1bHRMaW1pdDogMTAsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVUb3VjaDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBEYXRhU291cmNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUNvbnRyb2w6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBDb250YWluZXJDc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBIaWdobGlnaHRJdGVtQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIFJlZ2lvbjogJ1VTJyxcclxuICAgICAgICAgICAgICAgIExvY2FsZTogJ05PTkUnLFxyXG4gICAgICAgICAgICAgICAgSGVscFRleHQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdEJveElkOiAnJyxcclxuICAgICAgICAgICAgICAgIE11bHRpU2VsZWN0U2hvd0hlbHBUZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlLZXl3b3JkRGVsaW1pdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIExvYWRpbmdJbWFnZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBQYXJlbnRDb250YWluZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgQmVmb3JlQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEFmdGVyQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU3VjY2VzczogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uRXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlbGVjdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uVGV4dENoYW5nZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU2VhcmNoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25JbmNyZW1lbnRhbFNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uTXVsdGlTZWxlY3RSZW1vdmU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBTZWFyY2hNb2RlOiAnRGF0YWJhc2UnLCAvLyBDYWNoZSwgRGF0YWJhc2UsIFNtYXJ0XHJcbiAgICAgICAgICAgICAgICBUZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBTdGlja3lNb2RlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUNhdGVnb3J5VmlldzogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9vcHRpb25zID0gJC5leHRlbmQoX2RlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRDb250cm9sID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRBdXRvQ29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfb25lU2VhcmNoQm94ID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9NdWx0aVNlbGVjdEJveCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2xhc3RLZXl3b3JkID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHZhciBfcmVxdWVzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgIHZhciBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIHZhciBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vSXRlcmF0ZSBvdmVyIHRoZSBjdXJyZW50IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgSW5pdCgkKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBJbml0KG9iaikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgIV9vcHRpb25zLlRlc3RNb2RlKSBfb3B0aW9ucy5UZXN0TW9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RhcmdldENvbnRyb2wgPSBvYmo7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0QXV0b0NvbnRyb2wgPSAkKCdpbnB1dFtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19BVVRPX0lURU1cIl0nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgYnJvd3NlciBhdXRvY29tcGxldGUgb24gaW5wdXRcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NlY3VyaW5nX3lvdXJfc2l0ZS9UdXJuaW5nX29mZl9mb3JtX2F1dG9jb21wbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdhdXRvY29tcGxldGUnLCAnbm9wZScpO1xyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignbmFtZScsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwkL2dpLCAnXycpICsgKG5ldyBEYXRlKCkpLnZhbHVlT2YoKSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3ggPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJylcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdwb3NpdGlvbicsIChfb3B0aW9ucy5FbmFibGVUb3VjaCA/ICdyZWxhdGl2ZScgOiAnYWJzb2x1dGUnKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhfb3B0aW9ucy5Db250YWluZXJDc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLlBhcmVudENvbnRhaW5lcikuYXBwZW5kKF9vbmVTZWFyY2hCb3gpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94Lmluc2VydEFmdGVyKCQoX3RhcmdldENvbnRyb2wpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5jbG9zZXN0KCdkaXYnKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS5jc3MoJ2Rpc3BsYXknKSA9PSAnYmxvY2snICYmICQoX3RhcmdldENvbnRyb2wpLmh0bWwoKSAhPSAnJykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT0gJ0Nsb3NlQXJlYScpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvL01kbFJlbG9hZENvbnRyb2xTdGF0ZSgkKHRoaXMpLCAkKHRoaXMpLmNsb3Nlc3QoJ1tkYXRhLXNlYXJjaF0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3ggPSAkKCcjJyArIF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3ggIT0gbnVsbCAmJiBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveENzcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYWRkQ2xhc3MoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkTXVsdGlTZWxlY3RPbkxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZFNpbmdsZVNlbGVjdE9uTG9hZEZvckRhdGFsb29rdXAoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2NoZWNrIGlzIGxvY2F0aW9uIHNlYXJjaCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhdCA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG5nID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmRzID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobGF0KSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKGxuZykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChyZHMpICE9ICd1bmRlZmluZWQnICYmIGxhdCAhPSAnJyAmJiBsbmcgIT0gJycgJiYgcmRzICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOSAvKiB0YWIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTMgLyogZW50ZXIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYXNlIDM3IC8qIGxlZnQgKi86XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzggLyogdXAgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM5IC8qIHJpZ2h0ICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwIC8qIGRvd24gKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjcgLyogZXNjYXBlICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5cHJlc3MoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5dXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2IHx8IGUua2V5Q29kZSA9PSA4OCB8fCBlLmtleUNvZGUgPT0gODYpICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgX3RhcmdldEF1dG9Db250cm9sLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2lmIChlLmtleUNvZGUgPT0gMTMgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCAmJiAkKF9vbmVTZWFyY2hCb3gpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9pc09uQXJyb3dTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VhcmNoKSBfb3B0aW9ucy5PblNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDApIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpOyBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpb25zLk9uSW5jcmVtZW50YWxTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0IHx8IF9vcHRpb25zLkVuYWJsZVByZUxpc3QgfHwgX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTsgZWxzZSAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5pbmRleE9mKF9sYXN0S2V5d29yZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoYW5nZSB0aGUgbGFzdCBhbmQgY3VycmVudCB2YWx1ZSBpbiB0aGUga2V5d29yZCwgdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9sYXN0S2V5d29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25UZXh0Q2hhbmdlKSBfb3B0aW9ucy5PblRleHRDaGFuZ2UoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBhc3NvY2lhdGVkIGNvbnRyb2xzIHNpbmNlIHRoZSBrZXl3b3JkIGhhcyBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRleHQgYm9veCBhcyBsYXN0IHZhbHVlL2tleXdvcmRcclxuICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN1Z2dlc3Rpb24gYm94IGlzIGhpZGRlbiB0aGVuIG5vIG5lZWQgdG8gY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnPGltZyBzcmM9XCInICsgX29wdGlvbnMuTG9hZGluZ0ltYWdlVXJsICsgJ1wiIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5mb2N1cyhmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RlbXBDb250TXVsdCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgkKF9NdWx0aVNlbGVjdEJveC5odG1sKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ29uY2xpY2snLCAnamF2YXNjcmlwdDokKFxcJyMnICsgb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkICsgJyAjJyArICQodGhpcykuYXR0cignaWQnKSArICdcXCcpLnRyaWdnZXIoXFwnY2xpY2tcXCcpJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0KSBfb3B0aW9ucy5IZWxwVGV4dCA9ICc8ZGl2IHN0eWxlPVwicGFkZGluZzo3cHhcIj48Zm9udCBzdHlsZT1cImNvbG9yOnJlZFwiPllvdSBoYXZlIGFscmVhZHkgc2VsZWN0ZWQ8L2ZvbnQ+JyArICgoX29wdGlvbnMuU3RpY2t5TW9kZSkgPyAnPGEgY2xhc3M9XCJDbG9zZUFyZWFcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRpdGxlPVwiQ2xpY2sgaGVyZSB0byBoaWRlIHNlbGVjdGVkIGZpbHRlcnMuXCIgb25jbGljaz1cIiQoXFwnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19PbmVTZWFyY2gnICsgJ1xcJykuaGlkZSgpO1wiPkNsb3NlPC9hPicgOiAnJykgKyAnPGhyIHN0eWxlPVwibWFyZ2luOjBweCAwcHggN3B4IDBweFwiIC8+JyArIF90ZW1wQ29udE11bHQuaHRtbCgpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IZWxwVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5IZWxwVGV4dCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmJsdXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTWFudWFsU2VsZWN0ID0gJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXNNYW51YWxTZWxlY3QpID09ICd1bmRlZmluZWQnIHx8IGlzTWFudWFsU2VsZWN0ID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFuaW1hdGVQbGFjZWhvbGRlclRleHQgPT0gdHJ1ZSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQoJChfdGFyZ2V0Q29udHJvbCksICcnLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbiAmJiAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdodHRwcycpID4gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZignbG9jYWxob3N0JykgPiAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1sb2NhdGlvblwiPjwvaT4nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRW5hYmxlQ3VycmVudExvY2F0aW9uTGFiZWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywgJzNweCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2NvbG9yJywgJ3JlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCAtMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdnZXQtbXktZGlyZWN0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtbG9jYXRpb24tc2VhcmNoJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcjpyZWQnKTsgJCh0aGlzKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdXQoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhck5lYXJieSgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjZHJhd19zZWFyY2gnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hOZWFyYnkoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCgkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gbnVsbCAmJiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gJzAnKSA/ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0RlZmF1bHRTZWFyY2hSYWRpdXMnKSA6ICc1Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoeyBcImtcIjogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlICsgJ3wnICsgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgXCJuXCI6IFwiSURDTEFUSVRVREV8SURDTE9OR0lUVURFXCIsIFwicnRcIjogXCJMT0NBVElPTlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TdWNjZXNzKSBfb3B0aW9ucy5PblN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbShpZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwcmV2aW91c2xvb2t1cGxhYmVsPW51bGw7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNlYXJjaEtleXdvcmQobG9va3VwTGFiZWwsIGFmdGVyU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2xhc3RTZWFyY2h3b3JkID09ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpICYmICFfb3B0aW9ucy5FbmFibGVQcmVMaXN0ICYmIGxvb2t1cExhYmVsID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhbHJlYWR5IGEgcmVxdWVzdCBub3QgeWV0IGNvbXBsZXRlZCB0aGVuIHRoYXQgbmVlZCB0byBzdG9wL2Fib3J0IGJlZm9yZSBzdGFhcnRpbmcgbmV3IG9uZVxyXG4gICAgICAgICAgICAgICAgaWYgKF9yZXF1ZXN0ICE9IG51bGwgJiYgcHJldmlvdXNsb29rdXBsYWJlbCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIF9yZXF1ZXN0LmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9va3VwTGFiZWwgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2xvb2t1cGxhYmVsID0gbG9va3VwTGFiZWw7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNsb29rdXBsYWJlbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgX2xhc3RLZXl3b3JkID0gJyc7IGVsc2UgX2xhc3RTZWFyY2h3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsID09IG51bGwgJiYgIV9vcHRpb25zLkVuYWJsZVByZUxpc3QgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbSA9ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoS2V5d29yZCA9ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkucmVwbGFjZSgvIy9nLCAnJTIzJykpICsgJyZ0PScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsICE9IG51bGwgJiYgbG9va3VwTGFiZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbSA9IF9zZWFyY2hLZXl3b3JkID0gJ0xPT0tVUF9MQUJFTDo6JyArIGxvb2t1cExhYmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9yZXF1ZXN0ID0gJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfb3B0aW9ucy5TZXJ2aWNlVXJsICsgXCI/S2V5d29yZD1cIiArIF9zZWFyY2hLZXl3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6ICh7IFwiS2V5d29yZFwiOiBfc2VhcmNoUGFyYW0sIFwiU2VhcmNoTW9kZVwiOiBfb3B0aW9ucy5TZWFyY2hNb2RlLCBcIk9uZVNlYXJjaE5hbWVcIjogX29wdGlvbnMuT25lU2VhcmNoTmFtZSwgXCJSZWdpb25cIjogX29wdGlvbnMuUmVnaW9uLCBcIkxvY2FsZVwiOiBfb3B0aW9ucy5Mb2NhbGUsIFwiQWRkaXRpb25hbFdoZXJlXCI6ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0FkZGl0aW9uYWxXaGVyZScpIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsICE9IG51bGwgJiYgYWZ0ZXJTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJTZWFyY2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQgfHwgZGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlbURhdGEgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9maWVsZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVnb3J5aXRlbSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVvZ29yeW5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBkYXRhW2ldLnJ0LCBkYXRhW2ldLm4pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBfZmllbGQuSXRlbVRlbXBsYXRlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uTG9jYWxlID09IF9vcHRpb25zLkxvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2l0ZW1EYXRhLlRlbXBsYXRlLnJlcGxhY2UoJ3skZH0nLCBkYXRhW2ldLmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtID0gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfaXRlbURhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3RleHQtZGVjb3JhdGlvbicsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdibGFjaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkeCcsIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlZG93bihmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnLCB0cnVlKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soZnVuY3Rpb24gKCkgeyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbigndGFwJywgZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IHNlbGVjdEl0ZW0oJCh0aGlzKS5hdHRyKCdpZHgnKSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NlbGVjdEl0ZW0oaSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5Vmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY2F0ZW9nb3J5bmFtZSAhPSBkYXRhW2ldLmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbSA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC1jYXRlZ29yeS0nKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZCAoJCgnPHNwYW4+JykuaHRtbChkYXRhW2ldLmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVvZ29yeW5hbWUgPSBkYXRhW2ldLmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0uYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChfY2F0ZWdvcnlpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLmluY2x1ZGVzKCdPbmVTZWFyY2hCb3gtJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lID0gJChfb25lU2VhcmNoQm94KVtpXS5jbGFzc05hbWUucmVwbGFjZSgvXFxiT25lU2VhcmNoQm94LVtBLVphLXpdKlxcYi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hZGRDbGFzcygnT25lU2VhcmNoQm94LScgKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZXJ2aWNlIChhZ29yYU9uZVNlYXJjaCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCkge1xyXG4gICAgICAgIGlmIChfcmVzcG9zZUNhY2hlID09IG51bGwgfHwgX3Jlc3Bvc2VDYWNoZS5sZW5ndGggPCAoX2hpZ2hsaWdodElkeCAtIDEpIHx8IF9oaWdobGlnaHRJZHggPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ucnQsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIGF1dG9TZWxlY3RJdGVtKChfaGlnaGxpZ2h0SWR4IC0gMSkpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0pO1xyXG4gICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SXRlbShpZHgsIG5vY2xlYXIsIGF1dG9TZWxlY3QpIHtcclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKG5vY2xlYXIgPT0gdW5kZWZpbmVkIHx8IG5vY2xlYXIgPT0gbnVsbCkgbm9jbGVhciA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChhdXRvU2VsZWN0ID09IHVuZGVmaW5lZCB8fCBhdXRvU2VsZWN0ID09IG51bGwpIGF1dG9TZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB0cnVlICYmICFfbGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpICQoX3RhcmdldENvbnRyb2wpLnZhbChfbGFiZWwpOyBlbHNlICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIGNsZWFyTmVhcmJ5KCk7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmX2ZpZWxkLlNraXBTZWxlY3QgIT0gdHJ1ZSkgYmluZEFzc29jaWF0ZUNvbnRyb2woX3Jlc3Bvc2VDYWNoZVtpZHhdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VsZWN0KSBfb3B0aW9ucy5PblNlbGVjdChfcmVzcG9zZUNhY2hlW2lkeF0pO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUgJiYgIW5vY2xlYXIpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAoIV9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5mb2N1cygpOyB9LCAyMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGF1dG9TZWxlY3RJdGVtKGlkeCkge1xyXG4gICAgICAgIHZhciBfbGFiZWwgPSAnJztcclxuICAgICAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gbnVsbCB8fCAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoIV9sYWJlbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLC9nLCAnJykuc3RhcnRzV2l0aCgkKF90YXJnZXRDb250cm9sKS52YWwoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLC9nLCAnJykpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cCgkKF90YXJnZXRDb250cm9sKS52YWwoKSwgXCJpZ1wiKTtcclxuICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKF9sYWJlbC5yZXBsYWNlKHJlZ0V4LCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZWxvYWRNdWx0aVNlbGVjdE9uTG9hZCgpIHtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSByZXR1cm47XHJcblxyXG4gICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSB7fTsgLy9beyBcImtcIjogXCJDaGFybG90dGVcIiwgXCJsXCI6IFwiQ2hhcmxvdHRlLCBOQ1wiLCBcIm5cIjogXCJDSVRZXCIsIFwicnRcIjogXCJDTU5DTU5cIiB9XVxyXG4gICAgICAgICAgICAgICAgdmFyIF9pdGVtVmFsdWUgPSAkKHRoaXMpLmF0dHIoJ2lkJykuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgICAgIF9pdGVtLnJ0ID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ubiA9IF9pdGVtVmFsdWVbX2l0ZW1WYWx1ZS5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdkYXRhLWxhYmVsLWxvb2t1cCcpID09ICdUcnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmQoX2l0ZW0ucnQgKyAnfCcgKyBfaXRlbS5uICsgJzo6JyArICQodGhpcykudmFsKCksIGZ1bmN0aW9uIChyZXN1bHRKc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGFiZWxzID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfa2V5cyA9ICcnOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0SnNvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sYWJlbHMgPSByZXN1bHRKc29uLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCc7Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2tleXMgPSByZXN1bHRKc29uLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCc7Jyk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgX2tleXMsIHRydWUsIF9sYWJlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2woX2l0ZW0sICQodGhpcykudmFsKCksIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZWxvYWRTaW5nbGVTZWxlY3RPbkxvYWRGb3JEYXRhbG9va3VwKCkge1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCAkaGlkZGVuSW5wdXRzID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKTtcclxuXHJcbiAgICAgICAgJGhpZGRlbklucHV0cy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgJGlucHV0ID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAkaW5wdXQudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQcm9jZWVkIG9ubHkgaWYgdmFsdWUgaXMgbm9uLWVtcHR5IGFuZCBkYXRhLWxhYmVsLWxvb2t1cCBpcyBUcnVlXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50cmltKCkgIT09ICcnICYmICRpbnB1dC5hdHRyKCdkYXRhLWxhYmVsLWxvb2t1cCcpID09PSAnVHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0ge307XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfaXRlbVZhbHVlID0gJGlucHV0LmF0dHIoJ2lkJykuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgICAgIF9pdGVtLnJ0ID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ubiA9IF9pdGVtVmFsdWVbX2l0ZW1WYWx1ZS5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKF9pdGVtLnJ0ICsgJ3wnICsgX2l0ZW0ubiArICc6OicgKyB2YWx1ZSwgZnVuY3Rpb24gKHJlc3VsdEpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRKc29uKSAmJiByZXN1bHRKc29uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXN1bHRKc29uWzBdLmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHJlc3VsdEpzb25bMF0uaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2woX2l0ZW0sIGtleSwgdHJ1ZSwgbGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBiaW5kQXNzb2NpYXRlQ29udHJvbChpdGVtLCB2YWx1ZSwgaW5pdGlhbExvYWQsIGxhYmVscykge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgJGhpZGRlbklucHV0cyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhYmVsTG9va3VwID0gJGhpZGRlbklucHV0cy5pcygnW2RhdGEtbGFiZWwtbG9va3VwPVwiVHJ1ZVwiXScpO1xyXG5cclxuICAgICAgICAgICAgJGhpZGRlbklucHV0cy5lYWNoKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS52YWwoJycpO30pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhhc0xhYmVsTG9va3VwICYmIGxhYmVscykge1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKGxhYmVscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkXj1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ1wiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIF9jdHJsTXVsdGlGaWVsZCA9ICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pO1xyXG5cclxuICAgICAgICAgICAgdmFyIF92YWx1ZUl0ZW1zID0gdmFsdWUuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlSXRlbXNDYXJyaWVyID0gX3ZhbHVlSXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChsYWJlbHMgIT0gbnVsbCAmJiBsYWJlbHMgIT0gdW5kZWZpbmVkKSB2YXIgX3ZhbHVlSXRlbXMgPSBsYWJlbHMuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBpdGVtLnJ0LCBpdGVtLm4pO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF92YWx1ZUl0ZW1zLmxlbmd0aCAmJiBfZmllbGQgIT0gbnVsbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3ZhbHVlSXRlbXNbaV0ubGVuZ3RoIDwgMikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoKCc7JyArIF9jdHJsTXVsdGlGaWVsZC52YWwoKS50b0xvd2VyQ2FzZSgpICsgJzsnKS5pbmRleE9mKCc7JyArIF92YWx1ZUl0ZW1zW2ldLnRvTG93ZXJDYXNlKCkgKyAnOycpID09IC0xIHx8IGluaXRpYWxMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsTG9hZCkgX2N0cmxNdWx0aUZpZWxkLnZhbChfY3RybE11bHRpRmllbGQudmFsKCkgKyAnOycgKyBfdmFsdWVJdGVtc1tpXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbXVsdGlTZWxlY3RJdGVtID0gJCgnPGRpdj4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2Fnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJ211bHRpaXRlbScgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIF92YWx1ZUl0ZW1zW2ldLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1teQS16MC05XS9nLCAnXycpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2Fnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jbG9zZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndGl0bGUnLCAnQ2xpY2sgaGVyZSB0byBoaWRlIHRoaXMgYXJlYSBmaWx0ZXIuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdtdWx0aWl0ZW1fY2xvc2VfJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgX3ZhbHVlSXRlbXNbaV0ucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvW15BLXowLTldL2csICdfJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndmFsJywgX3ZhbHVlSXRlbXNDYXJyaWVyW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1jbG9zZVwiPjwvaT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVGcm9tTXVsdGlTZWxlY3QoJCh0aGlzKSwgaXRlbSwgJCh0aGlzKS5hdHRyKCd2YWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKF9maWVsZC5NdWx0aUl0ZW1UZW1wbGF0ZS5yZXBsYWNlKCd7JGx9JywgKGl0ZW0gIT0gbnVsbCAmJiBpdGVtLmwgIT0gbnVsbCkgPyBpdGVtLmwgOiBfdmFsdWVJdGVtc1tpXSkucmVwbGFjZSgneyRkfScsIChpdGVtICE9IG51bGwgJiYgaXRlbS5kICE9IG51bGwpID8gaXRlbS5kIDogX3ZhbHVlSXRlbXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF9NdWx0aVNlbGVjdEJveC5hcHBlbmQoX211bHRpU2VsZWN0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5pdGlhbExvYWQgJiYgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSkgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYXNNdWx0aVNlbGVjdGVkSXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIChfb3B0aW9ucy5NdWx0aVNlbGVjdCAmJiBfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW1vdmVGcm9tTXVsdGlTZWxlY3QobWUsIGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9jdHJsTXVsdGlGaWVsZCA9ICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pO1xyXG4gICAgICAgIGlmIChfY3RybE11bHRpRmllbGQudmFsKCkuaW5kZXhPZignOycpICE9IDApIF9jdHJsTXVsdGlGaWVsZC52YWwoJzsnICsgX2N0cmxNdWx0aUZpZWxkLnZhbCgpKTtcclxuICAgICAgICBfY3RybE11bHRpRmllbGQudmFsKF9jdHJsTXVsdGlGaWVsZC52YWwoKS5yZXBsYWNlKCc7JyArIHZhbHVlLCAnJykpO1xyXG5cclxuICAgICAgICAvLyQoJyNtdWx0aWl0ZW0nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyB2YWx1ZS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKSkucmVtb3ZlKCk7XHJcbiAgICAgICAgJChtZSkucGFyZW50KCkucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgIGlmIChfY3RybE11bHRpRmllbGQudmFsKCkgPT0gXCJcIiB8fCAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2Rpdi5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUpIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gaGlnaGxpZ2h0SXRlbShkaXJlY3Rpb24pIHtcclxuICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIC8qZG93biovIHtcclxuICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPCAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2EnKS5sZW5ndGgpIF9oaWdobGlnaHRJZHgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSAvKnVwKi8ge1xyXG4gICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDEpIF9oaWdobGlnaHRJZHgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChfb25lU2VhcmNoQm94KS5maW5kKCdhJykuZWFjaChmdW5jdGlvbiAoKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pO1xyXG4gICAgICAgICQoX29uZVNlYXJjaEJveCkuZmluZCgoX29wdGlvbnMuRW5hYmxlQ2F0ZWdvcnlWaWV3KSA/ICdhW2lkeD0nICsgX2hpZ2hsaWdodElkeCArICddJyA6ICdhOm50aC1jaGlsZCgnICsgX2hpZ2hsaWdodElkeCArICcpJykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VG90YWxXaWR0aE9mQ29udHJvbChvYmplY3QpIHtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdC53aWR0aCgpO1xyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLWxlZnRcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIpLCAxMCk7IC8vVG90YWwgUGFkZGluZyBXaWR0aFxyXG4gICAgICAgIC8vdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1sZWZ0XCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLXJpZ2h0XCIpLCAxMCk7IC8vVG90YWwgTWFyZ2luIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIiksIDEwKTsgLy9Ub3RhbCBCb3JkZXIgV2lkdGhcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBvYmplY3Qub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUb3RhbEhlaWdodE9mQ29udHJvbChvYmplY3QpIHtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdC5oZWlnaHQoKTtcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy10b3BcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwgMTApOyAvL1RvdGFsIFBhZGRpbmcgV2lkdGhcclxuICAgICAgICAvL3ZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tdG9wXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApOyAvL1RvdGFsIE1hcmdpbiBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLCAxMCk7IC8vVG90YWwgQm9yZGVyIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gb2JqZWN0LnBvc2l0aW9uKCkudG9wO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IG9iamVjdC5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmllbGRKc29uKG9iaiwgcnQsIGZpZWxkTmFtZSkge1xyXG4gICAgICAgIGlmIChfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV0gIT0gbnVsbCkgcmV0dXJuIF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXTtcclxuXHJcbiAgICAgICAgZm9yIChrID0gMDsgayA8IG9iai5SZWNvcmRUeXBlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBvYmouUmVjb3JkVHlwZXNba10uTmFtZSA9PSBydCAmJiBqIDwgb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal0uTmFtZSA9PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV0gPSBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHByZWdfcXVvdGUoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIChzdHIgKyAnJykucmVwbGFjZSgvKFtcXFxcXFwuXFwrXFwqXFw/XFxbXFxeXFxdXFwkXFwoXFwpXFx7XFx9XFw9XFwhXFw8XFw+XFx8XFw6XSkvZywgXCJcXFxcJDFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGlnaGxpZ2h0S2V5d29yZChzdHIsIGtleXdvcmQpIHtcclxuICAgICAgICAvL3JldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKHByZWdfcXVvdGUodG8pLCAnZ2knKSwgYnkpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcIiArIHByZWdfcXVvdGUoa2V5d29yZCkgKyBcIilcIiwgJ2dpJyksIFwiPHN0cm9uZz4kMTwvc3Ryb25nPlwiKTtcclxuICAgIH1cclxufVxyXG59KTtcclxufSkoalF1ZXJ5KTtcclxuXHJcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwiYSIsImkiLCJzZWxmIiwiJCIsImpRdWVyeSIsImZuIiwiZXh0ZW5kIiwiT25lU2VhcmNoIiwib3B0aW9ucyIsInByZXZpb3VzbG9va3VwbGFiZWwiLCJfb3B0aW9ucyIsIlNlcnZpY2VVcmwiLCJPbmVTZWFyY2hOYW1lIiwiT25lU2VhcmNoRFMiLCJNaW5DaGFyTGltaXQiLCJFbmFibGVDdXJyZW50TG9jYXRpb24iLCJFbmFibGVQcmVMaXN0IiwiQXV0b1NlbGVjdEZpcnN0SXRlbSIsIlJlc3VsdExpbWl0IiwiRW5hYmxlVG91Y2giLCJEYXRhU291cmNlIiwiRGF0YVNvdXJjZUNvbnRyb2wiLCJDb250YWluZXJDc3MiLCJJdGVtQ3NzIiwiSGlnaGxpZ2h0SXRlbUNzcyIsIlJlZ2lvbiIsIkxvY2FsZSIsIkhlbHBUZXh0IiwiQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dCIsIk11bHRpU2VsZWN0IiwiTXVsdGlTZWxlY3RCb3hJZCIsIk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0IiwiTXVsdGlLZXl3b3JkRGVsaW1pdGVyIiwiTG9hZGluZ0ltYWdlVXJsIiwiUGFyZW50Q29udGFpbmVyIiwiQmVmb3JlQ2FsbCIsIkFmdGVyQ2FsbCIsIk9uU3VjY2VzcyIsIk9uRXJyb3IiLCJPblNlbGVjdCIsIk9uVGV4dENoYW5nZSIsIk9uU2VhcmNoIiwiT25JbmNyZW1lbnRhbFNlYXJjaCIsIk9uTXVsdGlTZWxlY3RSZW1vdmUiLCJTZWFyY2hNb2RlIiwiVGVzdE1vZGUiLCJTdGlja3lNb2RlIiwiRW5hYmxlQ2F0ZWdvcnlWaWV3IiwiX3RhcmdldENvbnRyb2wiLCJfdGFyZ2V0QXV0b0NvbnRyb2wiLCJfb25lU2VhcmNoQm94IiwiX011bHRpU2VsZWN0Qm94IiwiX2xhc3RLZXl3b3JkIiwiX2xhc3RTZWFyY2h3b3JkIiwiX3JlcXVlc3QiLCJfcmVzcG9zZUNhY2hlIiwiX2l0ZW1UZXBsYXRlQ2FjaGUiLCJfaGlnaGxpZ2h0SWR4IiwiX2lzT25BcnJvd1NlbGVjdGlvbiIsIl9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCIsInRoaXMiLCJlYWNoIiwib2JqIiwiYXR0ciIsInJlcGxhY2UiLCJEYXRlIiwidmFsdWVPZiIsIndpbmRvdyIsIm9ucG9wc3RhdGUiLCJldmVudCIsImNzcyIsImdldFRvdGFsSGVpZ2h0T2ZDb250cm9sIiwiZ2V0VG90YWxXaWR0aE9mQ29udHJvbCIsImFkZENsYXNzIiwiaHRtbCIsImFwcGVuZCIsImluc2VydEFmdGVyIiwiY2xvc2VzdCIsImNsaWNrIiwiZSIsInRhcmdldCIsImNsYXNzTmFtZSIsInNldFRpbWVvdXQiLCJmb2N1cyIsIk11bHRpU2VsZWN0Qm94Q3NzIiwidmFsIiwiX2l0ZW0iLCJfaXRlbVZhbHVlIiwic3BsaXQiLCJydCIsImxlbmd0aCIsIm4iLCJzZWFyY2hLZXl3b3JkIiwicmVzdWx0SnNvbiIsIl9sYWJlbHMiLCJfa2V5cyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJsIiwiam9pbiIsImsiLCJiaW5kQXNzb2NpYXRlQ29udHJvbCIsIiRpbnB1dCIsInZhbHVlIiwidHJpbSIsImxhYmVsIiwia2V5IiwibGF0IiwibG5nIiwicmRzIiwia2V5ZG93biIsImtleUNvZGUiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzZWxlY3RJdGVtIiwiaGlnaGxpZ2h0SXRlbSIsImhpZGUiLCJrZXlwcmVzcyIsInBhcnNlSW50IiwicHJldmVudERlZmF1bHQiLCJrZXl1cCIsInNob3ciLCJpbmRleE9mIiwiZmluZCIsIl90ZW1wQ29udE11bHQiLCJnZXRDdXJyZW50TG9jYXRpb25PYmplY3QiLCJjb25zb2xlIiwibG9nIiwiYmx1ciIsImlzTWFudWFsU2VsZWN0IiwiZGF0YSIsInBhcmVudCIsInJlbW92ZUNsYXNzIiwiSW5pdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJwcm90b2NvbCIsInRvTG93ZXJDYXNlIiwiaG9zdG5hbWUiLCJtb3VzZW92ZXIiLCJzZWFyY2hOZWFyYnkiLCJvbiIsIm1vdXNlb3V0IiwiaWR4IiwibmF2aWdhdG9yIiwiZ2VvbG9jYXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJwb3NpdGlvbiIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwibG9va3VwTGFiZWwiLCJhZnRlclNlYXJjaCIsImFib3J0IiwiX3NlYXJjaFBhcmFtIiwiX3NlYXJjaEtleXdvcmQiLCJnZXRUaW1lIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ1bmRlZmluZWQiLCJfaXRlbURhdGEiLCJfZmllbGQiLCJfY2F0ZWdvcnlpdGVtIiwiX2NhdGVvZ29yeW5hbWUiLCJoaWdobGlnaHRLZXl3b3JkIiwiZ2V0RmllbGRKc29uIiwiSXRlbVRlbXBsYXRlIiwiZCIsIkl0ZW1UZW1wbGF0ZXMiLCJqIiwiVGVtcGxhdGUiLCJtb3VzZWRvd24iLCJhdXRvU2VsZWN0SXRlbSIsImciLCJpbmNsdWRlcyIsInN0YXR1c0NvZGUiLCJfbGFiZWwiLCJfc2VsZWN0ZWRWYWx1ZSIsIlNlbGVjdG9yIiwibm9jbGVhciIsImF1dG9TZWxlY3QiLCJzdGFydHNXaXRoIiwiU2tpcFNlbGVjdCIsInJlZ0V4IiwiUmVnRXhwIiwiaW5pdGlhbExvYWQiLCJsYWJlbHMiLCJfY3RybE11bHRpRmllbGQiLCJfdmFsdWVJdGVtc0NhcnJpZXIiLCJfdmFsdWVJdGVtcyIsIl9tdWx0aVNlbGVjdEl0ZW0iLCJyZW1vdmVGcm9tTXVsdGlTZWxlY3QiLCJNdWx0aUl0ZW1UZW1wbGF0ZSIsIiRoaWRkZW5JbnB1dHMiLCJoYXNMYWJlbExvb2t1cCIsImlzIiwibWUiLCJyZW1vdmUiLCJkaXJlY3Rpb24iLCJvYmplY3QiLCJ3aWR0aCIsIm9mZnNldCIsImxlZnQiLCJoZWlnaHQiLCJ0b3AiLCJmaWVsZE5hbWUiLCJSZWNvcmRUeXBlcyIsIk5hbWUiLCJGaWVsZHMiLCJzdHIiLCJrZXl3b3JkIiwicHJlZ19xdW90ZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
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,a=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),n=null,r=null,o=null,s=null,c="",d="",u=null,h=null,p=[],m=0,v=!1,f=!1;return this.each((function(){!function(l){if(a.StickyMode&&!a.TestMode&&(a.TestMode=!0),n=l,a.AutoSelectFirstItem&&(r=e('input[id="'+e(n).attr("id")+'_AUTO_ITEM"]')),e(n).attr("autocomplete","nope"),e(n).attr("name",e(n).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(n).attr("name",e(n).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},o=e("<div>").attr("id",e(n).attr("id")+"_OneSearch").css("position",a.EnableTouch?"relative":"absolute").css("top",L(e(n))).css("width",b(e(n))).css("display","none").addClass(a.ContainerCss).html(a.HelpText),""!=a.ParentContainer?e("#"+a.ParentContainer).append(o):o.insertAfter(e(n)),e(n).closest("div").click((function(t){"block"==e(n).css("display")&&""!=e(n).html()||"CloseArea"!=t.target.className&&(a.EnablePreList||setTimeout((function(){e(n).focus()}),500))})),a.MultiSelect?(""!=a.MultiSelectBoxId&&(s=e("#"+a.MultiSelectBoxId)),null!=s&&""!=a.MultiSelectBoxCss&&s.addClass(a.MultiSelectBoxCss),a.MultiSelect&&e('input[type="hidden"][id^="'+e(n).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")?C(t.rt+"|"+t.n+"::"+e(this).val(),(function(l){var a="",i="";Array.isArray(l)&&(a=l.map((function(e){return e.l})).join(";"),i=l.map((function(e){return e.k})).join(";")),I(t,i,!0,a),e(n).val("")})):I(t,e(this).val(),!0)}}))):a.MultiSelect||e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').each((function(){const t=e(this),l=t.val();if(l&&""!==l.trim()&&"True"===t.attr("data-label-lookup")){const e={},a=t.attr("id").split("_");e.rt=a[a.length-2],e.n=a[a.length-1],C(e.rt+"|"+e.n+"::"+l,(function(t){if(Array.isArray(t)&&t.length>0){const l=t[0].l,a=t[0].k;I(e,a,!0,l)}}))}})),a.EnableCurrentLocation){var i=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(),u=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(),S=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val();void 0!==i&&void 0!==u&&void 0!==S&&""!=i&&""!=u&&""!=S&&(f=!0)}e(n).keydown((function(t){switch(t.keyCode){case 9:case 13:a.AutoSelectFirstItem&&e(n).val().length>0?(m>0?y():O(0,!1,!0),v=!1):(y(),v=!1);break;case 38:x(-1);break;case 39:a.AutoSelectFirstItem&&(O(0,!1,!0),e(o).hide(),e(r).val(""));break;case 40:x(1);break;case 27:e(o).hide(),h=null,p=[],m=0}})),e(n).keypress((function(t){parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),13==t.keyCode&&t.preventDefault()})),e(n).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(n).val().length||(I(null,null),a.AutoSelectFirstItem&&r.val("")),13==t.keyCode&&e(n).val().length>0&&!v?a.OnSearch&&a.OnSearch():13==t.keyCode&&e(n).val().length>0&&a.AutoSelectFirstItem?m>0?y():O(0,!1,!0):a.OnIncrementalSearch&&a.OnIncrementalSearch(),e(n).val().length>=a.MinCharLimit||a.EnablePreList||a.EnableCurrentLocation?e(o).show():e(o).hide(),13==t.keyCode&&e(o).hide(),e(n).val().indexOf(c)<0&&e(o).html(""),8!=t.keyCode&&46!=t.keyCode||(c="",d=""),c!=e(n).val()&&(a.OnTextChange&&a.OnTextChange(e(n).val()),I(null,null),c=e(n).val(),"none"!=e(o).css("display")&&(""!=a.LoadingImageUrl&&e(n).val().length>=a.MinCharLimit&&e(o).html('<img src="'+a.LoadingImageUrl+'" />'),setTimeout((function(){C()}),500))))})),e(n).focus((function(){if(parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),a.MultiSelect)if(s.find("a.agora-onesearch-multi-sel-item-close").length>0){var l=e("<div>").html(e(s.html()));e(l).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),a.MultiSelectShowHelpText?a.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(a.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(n).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+l.html()+"</div>":a.EnableCurrentLocation&&e(l).append(g())}else a.HelpText="",a.EnableCurrentLocation&&(0==e(o).find("[data-location-search]").length&&e(o).append(g()),e(o).show());a.EnablePreList?(C(),e(o).show()):!a.MultiSelect&&a.EnableCurrentLocation?(0==e(o).find("[data-location-search]").length&&e(o).append(g()),console.log(g()),e(o).show()):""!=a.HelpText&&""==e(n).val()&&(e(o).html(a.HelpText),parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),e(o).show())})),e(n).blur((function(){a.AutoSelectFirstItem&&e(n).val().length>0&&!a.MultiSelect&&setTimeout((function(){var t=e(n).data("is-manual-select");void 0!==t&&0!=t||O(0,!0,!0),e(n).data("is-manual-select",!1)}),50),setTimeout((function(){a.TestMode?(e(o).find("[data-location-search]").length>0&&a.TestMode||a.StickyMode&&0==e(o).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(o).html(""),e(o).hide(),e(o).parent().removeClass("is-dirty")):(e(o).html(""),e(o).hide(),0==e(n).val().length&&e(o).parent().removeClass("is-dirty"))}),300)})),C(),1==a.AnimatePlaceholderText&&""==e(n).val()&&AnimatePlaceholderText(e(n),"",0)}(e(this))}));function g(){return a.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(n).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(a.HighlightItemCss)})).click((function(){S(e(this).attr("idx"))})).on("tap",(function(){S(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(a.HighlightItemCss)})):null}function S(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val(null!=e(n).attr("DefaultSearchRadius")&&"0"!=e(n).attr("DefaultSearchRadius")?e(n).attr("DefaultSearchRadius"):"5"),f=!0,a.OnSelect&&a.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),a.OnSuccess&&a.OnSuccess()})),O(t)}function C(t,s){(d!=e(n).val()||a.EnablePreList||null!=t)&&(null!=u&&null==l&&u.abort(),l=null!=t?t:null,e(n).val().length<a.MinCharLimit?c="":d=e(n).val(),null==t&&!a.EnablePreList&&e(n).val().length<a.MinCharLimit||(a.AutoSelectFirstItem&&(e(r).val(""),e(n).data("is-manual-select",!1)),_searchParam=e(n).val().length<a.MinCharLimit?"":e(n).val(),_searchKeyword=(e(n).val().length<a.MinCharLimit?"":e(n).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),null!=t&&t.length>0&&(_searchParam=_searchKeyword="LOOKUP_LABEL::"+t),u=e.ajax({type:"POST",url:a.ServiceUrl+"?Keyword="+_searchKeyword,data:{Keyword:_searchParam,SearchMode:a.SearchMode,OneSearchName:a.OneSearchName,Region:a.Region,Locale:a.Locale,AdditionalWhere:e(n).attr("AdditionalWhere")},dataType:"json",success:function(l){if(null==t||null==s)if(h=l,m=0,e(o).html(""),null!=l&&0!=l.length){var r="",c="",d=null,u="",p="";for(i=0;i<l.length;i++){if(r=w(l[i].l,e(n).val()),null!=(c=M(a.OneSearchDS,l[i].rt,l[i].n))&&null!=c.ItemTemplate&&""!=c.ItemTemplate)r=(r=c.ItemTemplate.replace("{$l}",w(l[i].l,e(n).val()))).replace("{$d}",l[i].d);else if(null!=c&&c.ItemTemplates.length>0)for(j=0;j<c.ItemTemplates.length;j++)c.ItemTemplates[j].Locale==a.Locale&&(r=(r=c.ItemTemplates[j].Template.replace("{$l}",w(l[i].l,e(n).val()))).Template.replace("{$d}",l[i].d));d=e("<a>").html(r).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(a.HighlightItemCss)})).mousedown((function(){e(n).data("is-manual-select",!0)})).click((function(){O(e(this).attr("idx"))})).on("tap",(function(){e(n).data("is-manual-select",!0),O(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(a.HighlightItemCss)})),0==i&&a.AutoSelectFirstItem&&T(i),a.EnableCategoryView?(p!=l[i].g&&((u=e("<div>").addClass("OneSearchBox-category-"+l[i].g)).append(e("<span>").html(l[i].g)),p=l[i].g),u.append(d),e(o).append(u),0==i&&e(o)[i].className.includes("OneSearchBox-")&&(e(o)[i].className=e(o)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(o).addClass("OneSearchBox-"+l[i].g)):e(o).append(d)}}else e(o).hide();else s(l)},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function y(){if(!(null==h||h.length<m-1||m<=0)){var t,l="",i=M(a.OneSearchDS,h[m-1].rt,h[m-1].n);null!=i&&""!=i.ItemTemplate&&(l=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?h[m-1].k:h[m-1].l),t=h[m-1].l,a.MultiSelect?e(n).val(""):e(n).val(t),c=e(n).val(),I(h[m-1],l),a.AutoSelectFirstItem&&T(m-1),a.OnSelect&&a.OnSelect(h[m-1]),m=0,a.TestMode||e(o).html("")}}function O(t,l,i){var s="",d="";if(null!=l&&null!=l||(l=!1),null!=i&&null!=i||(i=!1),void 0!==h&&null!=h&&0!=h.length){var u=M(a.OneSearchDS,h[t].rt,h[t].n);null!=u&&""!=u.ItemTemplate&&(d=null!=u.Selector&&null!=u.Selector&&"k"==u.Selector?h[t].k:h[t].l),s=h[t].l,1!=i||s.toLowerCase().startsWith(e(n).val().toLowerCase())?(a.MultiSelect?(e(n).val(""),a.AutoSelectFirstItem&&e(r).val("")):(null!=u&&1!=u.SkipSelect?e(n).val(s):e(n).val(""),a.AutoSelectFirstItem&&e(r).val("")),c=e(n).val(),t>=0&&f&&(e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=u&&1!=u.SkipSelect&&I(h[t],d),a.OnSelect&&a.OnSelect(h[t]),a.TestMode||l||e(o).html(""),a.MultiSelect&&(a.EnablePreList||setTimeout((function(){e(n).focus()}),200))):e(r).val("")}}function T(t){var l="";if(null!=e(n).val()&&""!=e(n).val()&&void 0!==h&&null!=h&&0!=h.length){var i=M(a.OneSearchDS,h[t].rt,h[t].n);if(null!=i&&""!=i.ItemTemplate&&(null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?h[t].k:h[t].l),(l=h[t].l).includes("<span")&&(l=l.replace(/<\/?span[^>]*>/gi,"")),l.toLowerCase().replace(/\,/g,"").startsWith(e(n).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(n).val(),"ig");e(r).val(l.replace(o,e(n).val())),c=e(n).val()}else e(r).val("")}}function I(t,l,r,o){if(a.MultiSelect){if(null==t)return;var c=e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n),d=u=l.split(";");if(null!=o&&null!=o)var u=o.split(";");var h=M(a.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(n).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(n).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(){_(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])));s.append(p)}!r&&a.OnMultiSelectRemove&&a.OnMultiSelectRemove()}else{const a=e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').is('[data-label-lookup="True"]');if(null==t)return;if(a&&o)e(n).val(o);else{if(e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n).val(l)}}}function _(t,l,i){var r=e("#"+e(n).attr("id")+"_"+l.rt+"_"+l.n);0!=r.val().indexOf(";")&&r.val(";"+r.val()),r.val(r.val().replace(";"+i,"")),e(t).parent().remove(),""!=r.val()&&0!=e(o).find("div.agora-onesearch-multi-sel-item-cont").length||(e(o).html(""),e(o).hide()),a.OnMultiSelectRemove&&a.OnMultiSelectRemove()}function x(t){v=!0,t>0?m<e(o).find("a").length&&m++:m>1&&m--,e(o).find("a").each((function(){e(this).removeClass(a.HighlightItemCss)})),e(o).find(a.EnableCategoryView?"a[idx="+m+"]":"a:nth-child("+m+")").addClass(a.HighlightItemCss)}function b(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),""!=a.ParentContainer&&(t+=e.offset().left),t}function L(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,""!=a.ParentContainer&&(t+=e.offset().top),t}function M(e,t,l){if(null!=p[t+"_"+l])return p[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 p[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function w(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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QUFXRCxHQUFXLElBQUssTUFBTyxzQkFDMUUsQ0FDSixHLEdDaHlCSUUsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCdEQsSUFBakJ1RCxFQUNILE9BQU9BLEVBQWE5TixRQUdyQixJQUFJQyxFQUFTME4sRUFBeUJFLEdBQVksQ0FHakQ3TixRQUFTLENBQUMsR0FPWCxPQUhBK04sRUFBb0JGLEdBQVU1TixFQUFRQSxFQUFPRCxRQUFTNE4sR0FHL0MzTixFQUFPRCxPQUNmLENDckJBNE4sRUFBb0I3SCxFQUFLOUYsSUFDeEIsSUFBSStOLEVBQVMvTixHQUFVQSxFQUFPZ08sV0FDN0IsSUFBT2hPLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMk4sRUFBb0I3QyxFQUFFaUQsRUFBUSxDQUFFNU4sRUFBRzROLElBQzVCQSxDQUFNLEVDTGRKLEVBQW9CN0MsRUFBSSxDQUFDL0ssRUFBU2tPLEtBQ2pDLElBQUksSUFBSWxILEtBQU9rSCxFQUNYTixFQUFvQk8sRUFBRUQsRUFBWWxILEtBQVM0RyxFQUFvQk8sRUFBRW5PLEVBQVNnSCxJQUM1RW9ILE9BQU9DLGVBQWVyTyxFQUFTZ0gsRUFBSyxDQUFFc0gsWUFBWSxFQUFNQyxJQUFLTCxFQUFXbEgsSUFFMUUsRUNORDRHLEVBQW9CTyxFQUFJLENBQUNqSyxFQUFLc0ssSUFBVUosT0FBT0ssVUFBVUMsZUFBZUMsS0FBS3pLLEVBQUtzSyxHQ0NsRlosRUFBb0JnQixFQUFLNU8sSUFDSCxvQkFBWDZPLFFBQTBCQSxPQUFPQyxhQUMxQ1YsT0FBT0MsZUFBZXJPLEVBQVM2TyxPQUFPQyxZQUFhLENBQUVqSSxNQUFPLFdBRTdEdUgsT0FBT0MsZUFBZXJPLEVBQVMsYUFBYyxDQUFFNkcsT0FBTyxHQUFPLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heE9uZVNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIHtcblx0XHR2YXIgYSA9IGZhY3RvcnkoKTtcblx0XHRmb3IodmFyIGkgaW4gYSkgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyA/IGV4cG9ydHMgOiByb290KVtpXSA9IGFbaV07XG5cdH1cbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCLvu78oZnVuY3Rpb24gKCQpIHtcclxuXHJcbiAgICAvL0F0dGFjaCB0aGlzIG5ldyBtZXRob2QgdG8galF1ZXJ5XHJcbiAgICAkLmZuLmV4dGVuZCh7XHJcblxyXG4gICAgICAgIC8vVGhpcyBpcyB3aGVyZSB5b3Ugd3JpdGUgeW91ciBwbHVnaW4ncyBuYW1lXHJcbiAgICAgICAgT25lU2VhcmNoOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cclxuICAgICAgICAgICAgLy9TZXQgdGhlIGRlZmF1bHQgdmFsdWVzLCB1c2UgY29tbWEgdG8gc2VwYXJhdGUgdGhlIHNldHRpbmdzLCBleGFtcGxlOlxyXG4gICAgICAgICAgICB2YXIgX2RlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIE9uZVNlYXJjaERTOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgTWluQ2hhckxpbWl0OiAzLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlQ3VycmVudExvY2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZVByZUxpc3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgQXV0b1NlbGVjdEZpcnN0SXRlbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBSZXN1bHRMaW1pdDogMTAsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVUb3VjaDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBEYXRhU291cmNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZUNvbnRyb2w6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBDb250YWluZXJDc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBIaWdobGlnaHRJdGVtQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIFJlZ2lvbjogJ1VTJyxcclxuICAgICAgICAgICAgICAgIExvY2FsZTogJ05PTkUnLFxyXG4gICAgICAgICAgICAgICAgSGVscFRleHQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdEJveElkOiAnJyxcclxuICAgICAgICAgICAgICAgIE11bHRpU2VsZWN0U2hvd0hlbHBUZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlLZXl3b3JkRGVsaW1pdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIExvYWRpbmdJbWFnZVVybDogJycsXHJcbiAgICAgICAgICAgICAgICBQYXJlbnRDb250YWluZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgQmVmb3JlQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEFmdGVyQ2FsbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU3VjY2VzczogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uRXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlbGVjdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uVGV4dENoYW5nZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU2VhcmNoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25JbmNyZW1lbnRhbFNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uTXVsdGlTZWxlY3RSZW1vdmU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBTZWFyY2hNb2RlOiAnRGF0YWJhc2UnLCAvLyBDYWNoZSwgRGF0YWJhc2UsIFNtYXJ0XHJcbiAgICAgICAgICAgICAgICBUZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBTdGlja3lNb2RlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUNhdGVnb3J5VmlldzogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9vcHRpb25zID0gJC5leHRlbmQoX2RlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRDb250cm9sID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF90YXJnZXRBdXRvQ29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfb25lU2VhcmNoQm94ID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9NdWx0aVNlbGVjdEJveCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2xhc3RLZXl3b3JkID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHZhciBfcmVxdWVzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgIHZhciBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIHZhciBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vSXRlcmF0ZSBvdmVyIHRoZSBjdXJyZW50IHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgSW5pdCgkKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBJbml0KG9iaikge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgIV9vcHRpb25zLlRlc3RNb2RlKSBfb3B0aW9ucy5UZXN0TW9kZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RhcmdldENvbnRyb2wgPSBvYmo7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0QXV0b0NvbnRyb2wgPSAkKCdpbnB1dFtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19BVVRPX0lURU1cIl0nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgYnJvd3NlciBhdXRvY29tcGxldGUgb24gaW5wdXRcclxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L1NlY3VyaW5nX3lvdXJfc2l0ZS9UdXJuaW5nX29mZl9mb3JtX2F1dG9jb21wbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdhdXRvY29tcGxldGUnLCAnbm9wZScpO1xyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignbmFtZScsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwkL2dpLCAnXycpICsgKG5ldyBEYXRlKCkpLnZhbHVlT2YoKSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3ggPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJylcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdwb3NpdGlvbicsIChfb3B0aW9ucy5FbmFibGVUb3VjaCA/ICdyZWxhdGl2ZScgOiAnYWJzb2x1dGUnKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhfb3B0aW9ucy5Db250YWluZXJDc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLlBhcmVudENvbnRhaW5lcikuYXBwZW5kKF9vbmVTZWFyY2hCb3gpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94Lmluc2VydEFmdGVyKCQoX3RhcmdldENvbnRyb2wpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5jbG9zZXN0KCdkaXYnKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS5jc3MoJ2Rpc3BsYXknKSA9PSAnYmxvY2snICYmICQoX3RhcmdldENvbnRyb2wpLmh0bWwoKSAhPSAnJykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT0gJ0Nsb3NlQXJlYScpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvL01kbFJlbG9hZENvbnRyb2xTdGF0ZSgkKHRoaXMpLCAkKHRoaXMpLmNsb3Nlc3QoJ1tkYXRhLXNlYXJjaF0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3ggPSAkKCcjJyArIF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3ggIT0gbnVsbCAmJiBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveENzcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYWRkQ2xhc3MoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkTXVsdGlTZWxlY3RPbkxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZFNpbmdsZVNlbGVjdE9uTG9hZEZvckRhdGFsb29rdXAoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2NoZWNrIGlzIGxvY2F0aW9uIHNlYXJjaCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhdCA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG5nID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmRzID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobGF0KSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKGxuZykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChyZHMpICE9ICd1bmRlZmluZWQnICYmIGxhdCAhPSAnJyAmJiBsbmcgIT0gJycgJiYgcmRzICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOSAvKiB0YWIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTMgLyogZW50ZXIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYXNlIDM3IC8qIGxlZnQgKi86XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzggLyogdXAgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM5IC8qIHJpZ2h0ICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwIC8qIGRvd24gKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjcgLyogZXNjYXBlICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5cHJlc3MoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5dXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2IHx8IGUua2V5Q29kZSA9PSA4OCB8fCBlLmtleUNvZGUgPT0gODYpICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgX3RhcmdldEF1dG9Db250cm9sLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2lmIChlLmtleUNvZGUgPT0gMTMgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCAmJiAkKF9vbmVTZWFyY2hCb3gpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9pc09uQXJyb3dTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VhcmNoKSBfb3B0aW9ucy5PblNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDApIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpOyBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpb25zLk9uSW5jcmVtZW50YWxTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0IHx8IF9vcHRpb25zLkVuYWJsZVByZUxpc3QgfHwgX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTsgZWxzZSAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5pbmRleE9mKF9sYXN0S2V5d29yZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoYW5nZSB0aGUgbGFzdCBhbmQgY3VycmVudCB2YWx1ZSBpbiB0aGUga2V5d29yZCwgdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9sYXN0S2V5d29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25UZXh0Q2hhbmdlKSBfb3B0aW9ucy5PblRleHRDaGFuZ2UoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBhc3NvY2lhdGVkIGNvbnRyb2xzIHNpbmNlIHRoZSBrZXl3b3JkIGhhcyBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRleHQgYm9veCBhcyBsYXN0IHZhbHVlL2tleXdvcmRcclxuICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN1Z2dlc3Rpb24gYm94IGlzIGhpZGRlbiB0aGVuIG5vIG5lZWQgdG8gY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnPGltZyBzcmM9XCInICsgX29wdGlvbnMuTG9hZGluZ0ltYWdlVXJsICsgJ1wiIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5mb2N1cyhmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RlbXBDb250TXVsdCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgkKF9NdWx0aVNlbGVjdEJveC5odG1sKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ29uY2xpY2snLCAnamF2YXNjcmlwdDokKFxcJyMnICsgb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkICsgJyAjJyArICQodGhpcykuYXR0cignaWQnKSArICdcXCcpLnRyaWdnZXIoXFwnY2xpY2tcXCcpJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0KSBfb3B0aW9ucy5IZWxwVGV4dCA9ICc8ZGl2IHN0eWxlPVwicGFkZGluZzo3cHhcIj48Zm9udCBzdHlsZT1cImNvbG9yOnJlZFwiPllvdSBoYXZlIGFscmVhZHkgc2VsZWN0ZWQ8L2ZvbnQ+JyArICgoX29wdGlvbnMuU3RpY2t5TW9kZSkgPyAnPGEgY2xhc3M9XCJDbG9zZUFyZWFcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRpdGxlPVwiQ2xpY2sgaGVyZSB0byBoaWRlIHNlbGVjdGVkIGZpbHRlcnMuXCIgb25jbGljaz1cIiQoXFwnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19PbmVTZWFyY2gnICsgJ1xcJykuaGlkZSgpO1wiPkNsb3NlPC9hPicgOiAnJykgKyAnPGhyIHN0eWxlPVwibWFyZ2luOjBweCAwcHggN3B4IDBweFwiIC8+JyArIF90ZW1wQ29udE11bHQuaHRtbCgpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IZWxwVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5IZWxwVGV4dCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmJsdXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTWFudWFsU2VsZWN0ID0gJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXNNYW51YWxTZWxlY3QpID09ICd1bmRlZmluZWQnIHx8IGlzTWFudWFsU2VsZWN0ID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFuaW1hdGVQbGFjZWhvbGRlclRleHQgPT0gdHJ1ZSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQoJChfdGFyZ2V0Q29udHJvbCksICcnLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbiAmJiAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdodHRwcycpID4gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZignbG9jYWxob3N0JykgPiAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1sb2NhdGlvblwiPjwvaT4nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRW5hYmxlQ3VycmVudExvY2F0aW9uTGFiZWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywgJzNweCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2NvbG9yJywgJ3JlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCAtMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdnZXQtbXktZGlyZWN0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtbG9jYXRpb24tc2VhcmNoJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcjpyZWQnKTsgJCh0aGlzKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdXQoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhck5lYXJieSgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjZHJhd19zZWFyY2gnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hOZWFyYnkoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCgkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gbnVsbCAmJiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gJzAnKSA/ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0RlZmF1bHRTZWFyY2hSYWRpdXMnKSA6ICc1Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoeyBcImtcIjogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlICsgJ3wnICsgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgXCJuXCI6IFwiSURDTEFUSVRVREV8SURDTE9OR0lUVURFXCIsIFwicnRcIjogXCJMT0NBVElPTlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TdWNjZXNzKSBfb3B0aW9ucy5PblN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbShpZHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwcmV2aW91c2xvb2t1cGxhYmVsPW51bGw7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHNlYXJjaEtleXdvcmQobG9va3VwTGFiZWwsIGFmdGVyU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2xhc3RTZWFyY2h3b3JkID09ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpICYmICFfb3B0aW9ucy5FbmFibGVQcmVMaXN0ICYmIGxvb2t1cExhYmVsID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhbHJlYWR5IGEgcmVxdWVzdCBub3QgeWV0IGNvbXBsZXRlZCB0aGVuIHRoYXQgbmVlZCB0byBzdG9wL2Fib3J0IGJlZm9yZSBzdGFhcnRpbmcgbmV3IG9uZVxyXG4gICAgICAgICAgICAgICAgaWYgKF9yZXF1ZXN0ICE9IG51bGwgJiYgcHJldmlvdXNsb29rdXBsYWJlbCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIF9yZXF1ZXN0LmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9va3VwTGFiZWwgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2xvb2t1cGxhYmVsID0gbG9va3VwTGFiZWw7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNsb29rdXBsYWJlbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgX2xhc3RLZXl3b3JkID0gJyc7IGVsc2UgX2xhc3RTZWFyY2h3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsID09IG51bGwgJiYgIV9vcHRpb25zLkVuYWJsZVByZUxpc3QgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbSA9ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoS2V5d29yZCA9ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkucmVwbGFjZSgvIy9nLCAnJTIzJykpICsgJyZ0PScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsICE9IG51bGwgJiYgbG9va3VwTGFiZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbSA9IF9zZWFyY2hLZXl3b3JkID0gJ0xPT0tVUF9MQUJFTDo6JyArIGxvb2t1cExhYmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9yZXF1ZXN0ID0gJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfb3B0aW9ucy5TZXJ2aWNlVXJsICsgXCI/S2V5d29yZD1cIiArIF9zZWFyY2hLZXl3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6ICh7IFwiS2V5d29yZFwiOiBfc2VhcmNoUGFyYW0sIFwiU2VhcmNoTW9kZVwiOiBfb3B0aW9ucy5TZWFyY2hNb2RlLCBcIk9uZVNlYXJjaE5hbWVcIjogX29wdGlvbnMuT25lU2VhcmNoTmFtZSwgXCJSZWdpb25cIjogX29wdGlvbnMuUmVnaW9uLCBcIkxvY2FsZVwiOiBfb3B0aW9ucy5Mb2NhbGUsIFwiQWRkaXRpb25hbFdoZXJlXCI6ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0FkZGl0aW9uYWxXaGVyZScpIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsICE9IG51bGwgJiYgYWZ0ZXJTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJTZWFyY2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQgfHwgZGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlbURhdGEgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9maWVsZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVnb3J5aXRlbSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVvZ29yeW5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBkYXRhW2ldLnJ0LCBkYXRhW2ldLm4pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBfZmllbGQuSXRlbVRlbXBsYXRlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uTG9jYWxlID09IF9vcHRpb25zLkxvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2l0ZW1EYXRhLlRlbXBsYXRlLnJlcGxhY2UoJ3skZH0nLCBkYXRhW2ldLmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtID0gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfaXRlbURhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3RleHQtZGVjb3JhdGlvbicsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdibGFjaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkeCcsIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlZG93bihmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnLCB0cnVlKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soZnVuY3Rpb24gKCkgeyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbigndGFwJywgZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IHNlbGVjdEl0ZW0oJCh0aGlzKS5hdHRyKCdpZHgnKSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NlbGVjdEl0ZW0oaSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5Vmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY2F0ZW9nb3J5bmFtZSAhPSBkYXRhW2ldLmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbSA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC1jYXRlZ29yeS0nKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZCAoJCgnPHNwYW4+JykuaHRtbChkYXRhW2ldLmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVvZ29yeW5hbWUgPSBkYXRhW2ldLmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0uYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChfY2F0ZWdvcnlpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLmluY2x1ZGVzKCdPbmVTZWFyY2hCb3gtJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lID0gJChfb25lU2VhcmNoQm94KVtpXS5jbGFzc05hbWUucmVwbGFjZSgvXFxiT25lU2VhcmNoQm94LVtBLVphLXpdKlxcYi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hZGRDbGFzcygnT25lU2VhcmNoQm94LScgKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZXJ2aWNlIChhZ29yYU9uZVNlYXJjaCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCkge1xyXG4gICAgICAgIGlmIChfcmVzcG9zZUNhY2hlID09IG51bGwgfHwgX3Jlc3Bvc2VDYWNoZS5sZW5ndGggPCAoX2hpZ2hsaWdodElkeCAtIDEpIHx8IF9oaWdobGlnaHRJZHggPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ucnQsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIGF1dG9TZWxlY3RJdGVtKChfaGlnaGxpZ2h0SWR4IC0gMSkpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0pO1xyXG4gICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SXRlbShpZHgsIG5vY2xlYXIsIGF1dG9TZWxlY3QpIHtcclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKG5vY2xlYXIgPT0gdW5kZWZpbmVkIHx8IG5vY2xlYXIgPT0gbnVsbCkgbm9jbGVhciA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChhdXRvU2VsZWN0ID09IHVuZGVmaW5lZCB8fCBhdXRvU2VsZWN0ID09IG51bGwpIGF1dG9TZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB0cnVlICYmICFfbGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpICQoX3RhcmdldENvbnRyb2wpLnZhbChfbGFiZWwpOyBlbHNlICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIGNsZWFyTmVhcmJ5KCk7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmX2ZpZWxkLlNraXBTZWxlY3QgIT0gdHJ1ZSkgYmluZEFzc29jaWF0ZUNvbnRyb2woX3Jlc3Bvc2VDYWNoZVtpZHhdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VsZWN0KSBfb3B0aW9ucy5PblNlbGVjdChfcmVzcG9zZUNhY2hlW2lkeF0pO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUgJiYgIW5vY2xlYXIpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAoIV9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5mb2N1cygpOyB9LCAyMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGF1dG9TZWxlY3RJdGVtKGlkeCkge1xyXG4gICAgICAgIHZhciBfbGFiZWwgPSAnJztcclxuICAgICAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gbnVsbCB8fCAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoX2xhYmVsLmluY2x1ZGVzKCc8c3BhbicpKSB7XHJcbiAgICAgICAgICAgIF9sYWJlbCA9IF9sYWJlbC5yZXBsYWNlKC88XFwvP3NwYW5bXj5dKj4vZ2ksICcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghX2xhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKSkpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLCBcImlnXCIpO1xyXG4gICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoX2xhYmVsLnJlcGxhY2UocmVnRXgsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKSk7XHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCkge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHJldHVybjtcclxuXHJcbiAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfaXRlbSA9IHt9OyAvL1t7IFwia1wiOiBcIkNoYXJsb3R0ZVwiLCBcImxcIjogXCJDaGFybG90dGUsIE5DXCIsIFwiblwiOiBcIkNJVFlcIiwgXCJydFwiOiBcIkNNTkNNTlwiIH1dXHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW1WYWx1ZSA9ICQodGhpcykuYXR0cignaWQnKS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ucnQgPSBfaXRlbVZhbHVlW19pdGVtVmFsdWUubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICBfaXRlbS5uID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtbGFiZWwtbG9va3VwJykgPT0gJ1RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZChfaXRlbS5ydCArICd8JyArIF9pdGVtLm4gKyAnOjonICsgJCh0aGlzKS52YWwoKSwgZnVuY3Rpb24gKHJlc3VsdEpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sYWJlbHMgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXlzID0gJyc7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRKc29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xhYmVscyA9IHJlc3VsdEpzb24ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJzsnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfa2V5cyA9IHJlc3VsdEpzb24ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJzsnKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9pdGVtLCBfa2V5cywgdHJ1ZSwgX2xhYmVscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgJCh0aGlzKS52YWwoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbG9hZFNpbmdsZVNlbGVjdE9uTG9hZEZvckRhdGFsb29rdXAoKSB7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0ICRoaWRkZW5JbnB1dHMgPSAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkXj1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ1wiXScpO1xyXG5cclxuICAgICAgICAkaGlkZGVuSW5wdXRzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCAkaW5wdXQgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICRpbnB1dC52YWwoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFByb2NlZWQgb25seSBpZiB2YWx1ZSBpcyBub24tZW1wdHkgYW5kIGRhdGEtbGFiZWwtbG9va3VwIGlzIFRydWVcclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnRyaW0oKSAhPT0gJycgJiYgJGlucHV0LmF0dHIoJ2RhdGEtbGFiZWwtbG9va3VwJykgPT09ICdUcnVlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9pdGVtVmFsdWUgPSAkaW5wdXQuYXR0cignaWQnKS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ucnQgPSBfaXRlbVZhbHVlW19pdGVtVmFsdWUubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICBfaXRlbS5uID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmQoX2l0ZW0ucnQgKyAnfCcgKyBfaXRlbS5uICsgJzo6JyArIHZhbHVlLCBmdW5jdGlvbiAocmVzdWx0SnNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdEpzb24pICYmIHJlc3VsdEpzb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHJlc3VsdEpzb25bMF0ubDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcmVzdWx0SnNvblswXS5rO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwga2V5LCB0cnVlLCBsYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBiaW5kQXNzb2NpYXRlQ29udHJvbChpdGVtLCB2YWx1ZSwgaW5pdGlhbExvYWQsIGxhYmVscykge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgJGhpZGRlbklucHV0cyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhYmVsTG9va3VwID0gJGhpZGRlbklucHV0cy5pcygnW2RhdGEtbGFiZWwtbG9va3VwPVwiVHJ1ZVwiXScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhhc0xhYmVsTG9va3VwICYmIGxhYmVscykge1xyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKGxhYmVscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkXj1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ1wiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIF9jdHJsTXVsdGlGaWVsZCA9ICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pO1xyXG5cclxuICAgICAgICAgICAgdmFyIF92YWx1ZUl0ZW1zID0gdmFsdWUuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlSXRlbXNDYXJyaWVyID0gX3ZhbHVlSXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChsYWJlbHMgIT0gbnVsbCAmJiBsYWJlbHMgIT0gdW5kZWZpbmVkKSB2YXIgX3ZhbHVlSXRlbXMgPSBsYWJlbHMuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBpdGVtLnJ0LCBpdGVtLm4pO1xyXG5cclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF92YWx1ZUl0ZW1zLmxlbmd0aCAmJiBfZmllbGQgIT0gbnVsbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3ZhbHVlSXRlbXNbaV0ubGVuZ3RoIDwgMikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoKCc7JyArIF9jdHJsTXVsdGlGaWVsZC52YWwoKS50b0xvd2VyQ2FzZSgpICsgJzsnKS5pbmRleE9mKCc7JyArIF92YWx1ZUl0ZW1zW2ldLnRvTG93ZXJDYXNlKCkgKyAnOycpID09IC0xIHx8IGluaXRpYWxMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbml0aWFsTG9hZCkgX2N0cmxNdWx0aUZpZWxkLnZhbChfY3RybE11bHRpRmllbGQudmFsKCkgKyAnOycgKyBfdmFsdWVJdGVtc1tpXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbXVsdGlTZWxlY3RJdGVtID0gJCgnPGRpdj4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2Fnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJ211bHRpaXRlbScgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIF92YWx1ZUl0ZW1zW2ldLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1teQS16MC05XS9nLCAnXycpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2Fnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jbG9zZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndGl0bGUnLCAnQ2xpY2sgaGVyZSB0byBoaWRlIHRoaXMgYXJlYSBmaWx0ZXIuJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdtdWx0aWl0ZW1fY2xvc2VfJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgX3ZhbHVlSXRlbXNbaV0ucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvW15BLXowLTldL2csICdfJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndmFsJywgX3ZhbHVlSXRlbXNDYXJyaWVyW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1jbG9zZVwiPjwvaT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVGcm9tTXVsdGlTZWxlY3QoJCh0aGlzKSwgaXRlbSwgJCh0aGlzKS5hdHRyKCd2YWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKF9maWVsZC5NdWx0aUl0ZW1UZW1wbGF0ZS5yZXBsYWNlKCd7JGx9JywgKGl0ZW0gIT0gbnVsbCAmJiBpdGVtLmwgIT0gbnVsbCkgPyBpdGVtLmwgOiBfdmFsdWVJdGVtc1tpXSkucmVwbGFjZSgneyRkfScsIChpdGVtICE9IG51bGwgJiYgaXRlbS5kICE9IG51bGwpID8gaXRlbS5kIDogX3ZhbHVlSXRlbXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF9NdWx0aVNlbGVjdEJveC5hcHBlbmQoX211bHRpU2VsZWN0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5pdGlhbExvYWQgJiYgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSkgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYXNNdWx0aVNlbGVjdGVkSXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIChfb3B0aW9ucy5NdWx0aVNlbGVjdCAmJiBfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW1vdmVGcm9tTXVsdGlTZWxlY3QobWUsIGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9jdHJsTXVsdGlGaWVsZCA9ICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pO1xyXG4gICAgICAgIGlmIChfY3RybE11bHRpRmllbGQudmFsKCkuaW5kZXhPZignOycpICE9IDApIF9jdHJsTXVsdGlGaWVsZC52YWwoJzsnICsgX2N0cmxNdWx0aUZpZWxkLnZhbCgpKTtcclxuICAgICAgICBfY3RybE11bHRpRmllbGQudmFsKF9jdHJsTXVsdGlGaWVsZC52YWwoKS5yZXBsYWNlKCc7JyArIHZhbHVlLCAnJykpO1xyXG5cclxuICAgICAgICAvLyQoJyNtdWx0aWl0ZW0nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyB2YWx1ZS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKSkucmVtb3ZlKCk7XHJcbiAgICAgICAgJChtZSkucGFyZW50KCkucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgIGlmIChfY3RybE11bHRpRmllbGQudmFsKCkgPT0gXCJcIiB8fCAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2Rpdi5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUpIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gaGlnaGxpZ2h0SXRlbShkaXJlY3Rpb24pIHtcclxuICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIC8qZG93biovIHtcclxuICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPCAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2EnKS5sZW5ndGgpIF9oaWdobGlnaHRJZHgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSAvKnVwKi8ge1xyXG4gICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDEpIF9oaWdobGlnaHRJZHgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChfb25lU2VhcmNoQm94KS5maW5kKCdhJykuZWFjaChmdW5jdGlvbiAoKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pO1xyXG4gICAgICAgICQoX29uZVNlYXJjaEJveCkuZmluZCgoX29wdGlvbnMuRW5hYmxlQ2F0ZWdvcnlWaWV3KSA/ICdhW2lkeD0nICsgX2hpZ2hsaWdodElkeCArICddJyA6ICdhOm50aC1jaGlsZCgnICsgX2hpZ2hsaWdodElkeCArICcpJykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VG90YWxXaWR0aE9mQ29udHJvbChvYmplY3QpIHtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdC53aWR0aCgpO1xyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLWxlZnRcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIpLCAxMCk7IC8vVG90YWwgUGFkZGluZyBXaWR0aFxyXG4gICAgICAgIC8vdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1sZWZ0XCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLXJpZ2h0XCIpLCAxMCk7IC8vVG90YWwgTWFyZ2luIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIiksIDEwKTsgLy9Ub3RhbCBCb3JkZXIgV2lkdGhcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBvYmplY3Qub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUb3RhbEhlaWdodE9mQ29udHJvbChvYmplY3QpIHtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdC5oZWlnaHQoKTtcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy10b3BcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwgMTApOyAvL1RvdGFsIFBhZGRpbmcgV2lkdGhcclxuICAgICAgICAvL3ZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tdG9wXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApOyAvL1RvdGFsIE1hcmdpbiBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLCAxMCk7IC8vVG90YWwgQm9yZGVyIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gb2JqZWN0LnBvc2l0aW9uKCkudG9wO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IG9iamVjdC5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmllbGRKc29uKG9iaiwgcnQsIGZpZWxkTmFtZSkge1xyXG4gICAgICAgIGlmIChfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV0gIT0gbnVsbCkgcmV0dXJuIF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXTtcclxuXHJcbiAgICAgICAgZm9yIChrID0gMDsgayA8IG9iai5SZWNvcmRUeXBlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBvYmouUmVjb3JkVHlwZXNba10uTmFtZSA9PSBydCAmJiBqIDwgb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal0uTmFtZSA9PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV0gPSBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHByZWdfcXVvdGUoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIChzdHIgKyAnJykucmVwbGFjZSgvKFtcXFxcXFwuXFwrXFwqXFw/XFxbXFxeXFxdXFwkXFwoXFwpXFx7XFx9XFw9XFwhXFw8XFw+XFx8XFw6XSkvZywgXCJcXFxcJDFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGlnaGxpZ2h0S2V5d29yZChzdHIsIGtleXdvcmQpIHtcclxuICAgICAgICAvL3JldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKHByZWdfcXVvdGUodG8pLCAnZ2knKSwgYnkpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcIiArIHByZWdfcXVvdGUoa2V5d29yZCkgKyBcIilcIiwgJ2dpJyksIFwiPHN0cm9uZz4kMTwvc3Ryb25nPlwiKTtcclxuICAgIH1cclxufVxyXG59KTtcclxufSkoalF1ZXJ5KTtcclxuXHJcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwiYSIsImkiLCJzZWxmIiwiJCIsImpRdWVyeSIsImZuIiwiZXh0ZW5kIiwiT25lU2VhcmNoIiwib3B0aW9ucyIsInByZXZpb3VzbG9va3VwbGFiZWwiLCJfb3B0aW9ucyIsIlNlcnZpY2VVcmwiLCJPbmVTZWFyY2hOYW1lIiwiT25lU2VhcmNoRFMiLCJNaW5DaGFyTGltaXQiLCJFbmFibGVDdXJyZW50TG9jYXRpb24iLCJFbmFibGVQcmVMaXN0IiwiQXV0b1NlbGVjdEZpcnN0SXRlbSIsIlJlc3VsdExpbWl0IiwiRW5hYmxlVG91Y2giLCJEYXRhU291cmNlIiwiRGF0YVNvdXJjZUNvbnRyb2wiLCJDb250YWluZXJDc3MiLCJJdGVtQ3NzIiwiSGlnaGxpZ2h0SXRlbUNzcyIsIlJlZ2lvbiIsIkxvY2FsZSIsIkhlbHBUZXh0IiwiQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dCIsIk11bHRpU2VsZWN0IiwiTXVsdGlTZWxlY3RCb3hJZCIsIk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0IiwiTXVsdGlLZXl3b3JkRGVsaW1pdGVyIiwiTG9hZGluZ0ltYWdlVXJsIiwiUGFyZW50Q29udGFpbmVyIiwiQmVmb3JlQ2FsbCIsIkFmdGVyQ2FsbCIsIk9uU3VjY2VzcyIsIk9uRXJyb3IiLCJPblNlbGVjdCIsIk9uVGV4dENoYW5nZSIsIk9uU2VhcmNoIiwiT25JbmNyZW1lbnRhbFNlYXJjaCIsIk9uTXVsdGlTZWxlY3RSZW1vdmUiLCJTZWFyY2hNb2RlIiwiVGVzdE1vZGUiLCJTdGlja3lNb2RlIiwiRW5hYmxlQ2F0ZWdvcnlWaWV3IiwiX3RhcmdldENvbnRyb2wiLCJfdGFyZ2V0QXV0b0NvbnRyb2wiLCJfb25lU2VhcmNoQm94IiwiX011bHRpU2VsZWN0Qm94IiwiX2xhc3RLZXl3b3JkIiwiX2xhc3RTZWFyY2h3b3JkIiwiX3JlcXVlc3QiLCJfcmVzcG9zZUNhY2hlIiwiX2l0ZW1UZXBsYXRlQ2FjaGUiLCJfaGlnaGxpZ2h0SWR4IiwiX2lzT25BcnJvd1NlbGVjdGlvbiIsIl9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCIsInRoaXMiLCJlYWNoIiwib2JqIiwiYXR0ciIsInJlcGxhY2UiLCJEYXRlIiwidmFsdWVPZiIsIndpbmRvdyIsIm9ucG9wc3RhdGUiLCJldmVudCIsImNzcyIsImdldFRvdGFsSGVpZ2h0T2ZDb250cm9sIiwiZ2V0VG90YWxXaWR0aE9mQ29udHJvbCIsImFkZENsYXNzIiwiaHRtbCIsImFwcGVuZCIsImluc2VydEFmdGVyIiwiY2xvc2VzdCIsImNsaWNrIiwiZSIsInRhcmdldCIsImNsYXNzTmFtZSIsInNldFRpbWVvdXQiLCJmb2N1cyIsIk11bHRpU2VsZWN0Qm94Q3NzIiwidmFsIiwiX2l0ZW0iLCJfaXRlbVZhbHVlIiwic3BsaXQiLCJydCIsImxlbmd0aCIsIm4iLCJzZWFyY2hLZXl3b3JkIiwicmVzdWx0SnNvbiIsIl9sYWJlbHMiLCJfa2V5cyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJsIiwiam9pbiIsImsiLCJiaW5kQXNzb2NpYXRlQ29udHJvbCIsIiRpbnB1dCIsInZhbHVlIiwidHJpbSIsImxhYmVsIiwia2V5IiwibGF0IiwibG5nIiwicmRzIiwia2V5ZG93biIsImtleUNvZGUiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzZWxlY3RJdGVtIiwiaGlnaGxpZ2h0SXRlbSIsImhpZGUiLCJrZXlwcmVzcyIsInBhcnNlSW50IiwicHJldmVudERlZmF1bHQiLCJrZXl1cCIsInNob3ciLCJpbmRleE9mIiwiZmluZCIsIl90ZW1wQ29udE11bHQiLCJnZXRDdXJyZW50TG9jYXRpb25PYmplY3QiLCJjb25zb2xlIiwibG9nIiwiYmx1ciIsImlzTWFudWFsU2VsZWN0IiwiZGF0YSIsInBhcmVudCIsInJlbW92ZUNsYXNzIiwiSW5pdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJwcm90b2NvbCIsInRvTG93ZXJDYXNlIiwiaG9zdG5hbWUiLCJtb3VzZW92ZXIiLCJzZWFyY2hOZWFyYnkiLCJvbiIsIm1vdXNlb3V0IiwiaWR4IiwibmF2aWdhdG9yIiwiZ2VvbG9jYXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJwb3NpdGlvbiIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwibG9va3VwTGFiZWwiLCJhZnRlclNlYXJjaCIsImFib3J0IiwiX3NlYXJjaFBhcmFtIiwiX3NlYXJjaEtleXdvcmQiLCJnZXRUaW1lIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ1bmRlZmluZWQiLCJfaXRlbURhdGEiLCJfZmllbGQiLCJfY2F0ZWdvcnlpdGVtIiwiX2NhdGVvZ29yeW5hbWUiLCJoaWdobGlnaHRLZXl3b3JkIiwiZ2V0RmllbGRKc29uIiwiSXRlbVRlbXBsYXRlIiwiZCIsIkl0ZW1UZW1wbGF0ZXMiLCJqIiwiVGVtcGxhdGUiLCJtb3VzZWRvd24iLCJhdXRvU2VsZWN0SXRlbSIsImciLCJpbmNsdWRlcyIsInN0YXR1c0NvZGUiLCJfbGFiZWwiLCJfc2VsZWN0ZWRWYWx1ZSIsIlNlbGVjdG9yIiwibm9jbGVhciIsImF1dG9TZWxlY3QiLCJzdGFydHNXaXRoIiwiU2tpcFNlbGVjdCIsInJlZ0V4IiwiUmVnRXhwIiwiaW5pdGlhbExvYWQiLCJsYWJlbHMiLCJfY3RybE11bHRpRmllbGQiLCJfdmFsdWVJdGVtc0NhcnJpZXIiLCJfdmFsdWVJdGVtcyIsIl9tdWx0aVNlbGVjdEl0ZW0iLCJyZW1vdmVGcm9tTXVsdGlTZWxlY3QiLCJNdWx0aUl0ZW1UZW1wbGF0ZSIsImhhc0xhYmVsTG9va3VwIiwiaXMiLCJtZSIsInJlbW92ZSIsImRpcmVjdGlvbiIsIm9iamVjdCIsIndpZHRoIiwib2Zmc2V0IiwibGVmdCIsImhlaWdodCIsInRvcCIsImZpZWxkTmFtZSIsIlJlY29yZFR5cGVzIiwiTmFtZSIsIkZpZWxkcyIsInN0ciIsImtleXdvcmQiLCJwcmVnX3F1b3RlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciXSwic291cmNlUm9vdCI6IiJ9
|