PageSourceSearch

https://site.knifeart.com/ytimes/2024/dist/ytimes-scripts-bottom-2024.min.js?ts=1790251331922459

js knifeart.com collected 2026-09-24 19:21:38 UTC 65,821 bytes, 2 lines download raw bytes

1function loadScript(e){const t=document.createElement("script");t.src=e,t.async=!0,document.head.appendChild(t)}function loadCss(e){var t="";e.match(/\//g)||(t="localhost"==location.hostname||"127.0.0.1"==location.hostname?"./dist/":"https://turbifycdn.com/ty/cdn/knifeart/");var n=$("<link href='' rel='stylesheet' type='text/css' />");n.prop("href",t+e),$("head").append(n)}function userInteracted(){if(document.body.classList.add("interactive"),!document.getElementById("ytimes-scripts-delayed-2024")){var e=document.createElement("script");e.id="ytimes-scripts-delayed-2024","localhost"==location.hostname||"127.0.0.1"==location.hostname?e.src="dist/ytimes-scripts-delayed-2024.min.js":e.src="https://site.knifeart.com/ytimes/2024/dist/ytimes-scripts-delayed-2024.min.js",document.body.appendChild(e)}removeInteractionListeners()}function handleInteraction(){userInteracted()}function removeInteractionListeners(){document.removeEventListener("mousedown",handleInteraction),document.removeEventListener("keydown",handleInteraction),document.removeEventListener("touchstart",handleInteraction),document.removeEventListener("mousemove",handleInteraction),document.removeEventListener("scroll",handleInteraction)}function checkVisible(e){var t=e.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(t.bottom<0||t.top-n>=0)}function bindEvent(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n)}function ytimesUpdateCartCount(){const e=sessionStorage.getItem("cartcnt");if(e){let t=document.querySelector(".viewCart .cartCnt");t||(t=document.createElement("span"),t.className="cartCnt",document.querySelector(".viewCart").prepend(t)),t.innerHTML=e}}if(document.addEventListener("DOMContentLoaded",(function(){document.addEventListener("mousedown",handleInteraction),document.addEventListener("keydown",handleInteraction),document.addEventListener("touchstart",handleInteraction),document.addEventListener("mousemove",handleInteraction),document.addEventListener("scroll",handleInteraction),setTimeout((function(){userInteracted()}),6e3),document.body.classList.remove("no-js"),document.body.classList.add("design18"),document.querySelectorAll(".swiper").forEach((function(e){e.classList.contains("sub-sections")?new Swiper(e,{slidesPerView:2,spaceBetween:20,grabCursor:!0,keyboard:{enabled:!0},loop:!0,lazy:!0,pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev",clickable:!0},breakpoints:{640:{slidesPerView:2,slidesPerGroup:2},720:{slidesPerView:3,slidesPerGroup:3},1024:{slidesPerView:4,slidesPerGroup:4}},on:{resize:function(e){window.innerWidth>=1024?(e.el.classList.add("no-swiper"),e.disable()):(e.el.classList.remove("no-swiper"),e.enable())}}}):e.classList.contains("brands")||e.classList.contains("videos")?new Swiper(e,{slidesPerView:2,spaceBetween:20,grabCursor:!0,keyboard:{enabled:!0},slidesPerGroup:2,loop:!0,pagination:{el:".swiper-pagination",clickable:!0},lazy:!0,navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev",clickable:!0},breakpoints:{640:{slidesPerView:2,slidesPerGroup:2},720:{slidesPerView:3,slidesPerGroup:3},1024:{slidesPerView:6,slidesPerGroup:6}}}):e.classList.contains("grid")&&new Swiper(e,{init:!0,slidesPerView:2,spaceBetween:20,grabCursor:!0,keyboard:{enabled:!0},slidesPerGroup:2,grid:{rows:2,fill:"row"},loop:!0,lazy:!0,pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev",clickable:!0},breakpoints:{768:{slidesPerView:3,slidesPerGroup:3,grid:{rows:2,fill:"row"}},1024:{slidesPerView:4,slidesPerGroup:4,grid:{rows:2,fill:"row"}}}}).on("slidesUpdated",(function(e){!function(e){const t=e.el.querySelectorAll(".item");let n=0;t.forEach((e=>{const t=e.offsetHeight;t>n&&(n=t)}));const i=e.el.querySelector(".swiper-wrapper").getAttribute("id"),r=`style-${i}`;document.getElementById(r)&&document.getElementById(r).remove();const o=document.createElement("style");o.id=r,o.innerHTML=`#${i} .item {\n                height: ${n}px;\n            }`,document.head.appendChild(o)}(e)}))})),ytimesUpdateCartCount(),"loading"in HTMLImageElement.prototype&&"undefined"==typeof productVariants?document.querySelectorAll("img[data-src]").forEach((function(e){e.loading="lazy",e.src=e.getAttribute("data-src"),e.removeAttribute("data-src")})):(loadScript("https://turbifycdn.com/ty/cdn/knifeart/jquery.lazyloadxt.min.js"),loadScript("https://turbifycdn.com/ty/cdn/knifeart/jquery.lazyloadxt.srcset.min.js"))})),formatter=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2}),void 0===YTIMES)var YTIMES={};function formatCurrency(e){var t=!1;return e<0&&(t=!0,e=Math.abs(e)),(t?"-$":"$")+parseFloat(e,10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g,"$1,").toString()}function smartBreadcrumbs(){if(document.getElementById("breadcrumbs")){jQuery("#breadcrumbs .breadcrumbs").hide(),jQuery("#breadcrumbs .breadcrumbs").each((function(){for(var e="2A2A",t=jQuery(this).find("a"),n=1;n<t.length;n++)if(!jQuery(t[n]).parent().hasClass("prevLink")&&!jQuery(t[n]).parent().hasClass("nextLink")){href=jQuery(t[n]).attr("href"),j=href.lastIndexOf("/"),j>0&&(href=href.substring(j+1)),j=href.indexOf("."),j>0&&(href=href.substring(0,j));var i="";for(j=0;j<href.length;
1j++){i+=href.toUpperCase().charCodeAt(j).toString(16).toUpperCase()}e+=i}if("0"==jQuery(this).attr("leaf")){href=location.href,j=href.lastIndexOf("/"),j>0&&(href=href.substring(j+1)),j=href.indexOf("."),j>0&&(href=href.substring(0,j));i="";for(j=0;j<href.length;j++){i+=href.toUpperCase().charCodeAt(j).toString(16).toUpperCase()}e+=i}jQuery(this).attr("id",e)}));var e=null;"undefined"!=typeof currentBC&&currentBC?1==jQuery("div[id*="+currentBC+"]").length?((e=jQuery("div[id*="+currentBC+"]")).css("display","block"),SetCookie("currentBC",e.get()[0].id)):jQuery("div[id*="+currentBC+"]").length>1?((e=jQuery("div[id*="+currentBC+"]:first")).css("display","block"),SetCookie("currentBC",e.get()[0].id)):((e=jQuery("#breadcrumbs div:first")).css("display","block"),SetCookie("currentBC",e.get()[0].id)):((e=jQuery("#breadcrumbs div:first")).css("display","block"),SetCookie("currentBC",e.get()[0].id)),null!=e&&document.getElementById("divPrevNext")&&(e.find(".prevLink").length>0&&e.find(".prevLink").appendTo(jQuery("#divPrevNext")).show(),e.find(".nextLink").length>0&&e.find(".nextLink").appendTo(jQuery("#divPrevNext")).show())}}function popupreview(e,t,n){t||(t=200),n||(n=450),win=window.open(e,"","top=20,left=20,height="+t+",width="+n+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes")}function createVideoObject(){const e=$("iframe[src*='www.youtube']");if(e.length){const t=e.attr("src").match(/\/embed\/([^?]+)/);if(t){const e=t[1],n=$("h1").text().trim(),i=`Overview of ${n}`,r=`https://img.youtube.com/vi/${e}/maxresdefault.jpg`,o=`https://www.youtube.com/embed/${e}`,s=`https://www.knifeart.com/${prodId}.html`,a=$("body").attr("published");if(void 0===a)return;const d=new Date(1e3*a),c="America/Chicago",l=e=>e.toString().padStart(2,"0"),u=d.getFullYear(),m=l(d.getMonth()+1),p=l(d.getDate()),y=l(d.getHours()),f=l(d.getMinutes()),h=l(d.getSeconds()),v=-new Date(d.toLocaleString("en-US",{timeZone:c})).getTimezoneOffset(),g=v>=0?"+":"-",w=Math.abs(v),b={"@context":"https://schema.org","@type":"VideoObject",name:n,description:i,thumbnailUrl:r,uploadDate:`${u}-${m}-${p}T${y}:${f}:${h}${g}${l(Math.floor(w/60))}:${l(w%60)}`,embedUrl:o,contentUrl:s};$("head").append(`<script type="application/ld+json">${JSON.stringify(b)}<\/script>`)}}}void 0===YTIMES.maxRecentlyViewed&&(YTIMES.maxRecentlyViewed=10),YTIMES.set=function(e,t){"object"==typeof t&&(t=JSON.stringify(t)),sessionStorage.setItem(e,t)},YTIMES.get=function(e){var t=sessionStorage.getItem(e);try{return JSON.parse(t)}catch(e){return t}},YTIMES.saveTrail=function(e){var t=YTIMES.get("ytTrail");null==t&&(t=[]);for(var n=0;n<t.length;n++)if(t[n].id==e.id){t.splice(n,1);break}t.unshift({id:e.id,name:e.name,img:e.img,price:e.price,sale:e.sale}),t=t.splice(0,YTIMES.maxRecentlyViewed),YTIMES.set("ytTrail",t)},YTIMES.showTrail=function(e){const t=YTIMES.get("ytTrail");if(t){let n=`\n            <div class="ytimesRecentlyViewed">\n                <h2 class="heading"><span>Recently Viewed Items</span></h2>\n                <div class="recently swiper">\n                    <div class="swiper-wrapper">\n                        ${t.map((e=>`\n                            <div class="item swiper-slide">\n                                <div class="img">\n                                    <a href="${e.id}.html">\n                                        <img src="${e.img}" alt="${e.name}">\n                                    </a>\n                                </div>\n                                <div class="title">\n                                    <a href="${e.id}.html">${e.name}</a>\n                                </div>\n                                <div class="price">\n                                    ${e.price?`\n                                        ${e.sale?`<div class="reg">${formatCurrency(e.price)}</div>`:""}\n                                        <div class="sale">${formatCurrency(e.sale||e.price)}</div>\n                                    `:""}\n                                </div>\n                            </div>\n                        `)).join("")}\n                    </div>\n                    <div class="swiper-button-prev"></div>\n                    <div class="swiper-button-next"></div>\n                </div>\n            </div>\n        `;const i=document.getElementById("ytimesRecentlyViewedContainer");i&&(i.innerHTML=n),e&&e()}void 0!==YTIMES.currentItem&&YTIMES.saveTrail(YTIMES.currentItem)},smartBreadcrumbs(),(()=>{if("undefined"==typeof testimonialsArray)return;const e=Math.floor(Math.random()*testimonialsArray.length),t=testimonialsArray[e];document.querySelector("#testimonials .randomTestimonial").innerHTML=t})(),loadCss("https://turbifycdn.com/ty/cdn/knifeart/jquery.fancybox.min.css"),document.addEventListener("DOMContentLoaded",(function(){function e(e){document.body.insertAdjacentHTML("beforeend",'<div id="ytimesReviewsModalOverlay"></div>\n     <div id="ytimesReviewsModalContainer"></div>');const t=window.innerHeight,n=window.innerWidth;window.scrollTo(0,0);const i=document.getElementById("ytimesReviewsModalContainer"),r=Math.max(i.offsetWidth,600),o=Math.max(i.offsetHeight,400),s=o>t?0:Math.round(t/2-o/2),a=r>n?0:Math.round(n/2-r/2),d=document.getElementById("ytimesReviewsModalOverlay");if(d.style.width=`${document.documentElement.scrollWidth}px`,d.style.height=`${document.documentElement.scrollHeight}px`,o>t?(i.style.position="absolute",i.style.top="0px",i.style.left=`${a}px`,i.style.maxHeight=`${t}px`):(i.style.position="fixed",i.style.top=`${s}px`,i.style.left=`${a}px`),i.innerHTML=`\n            <iframe src="${yrewurl}yreview_writereview.php?CODE=${prodId}&verify=${e}&prodname=${encodeURIComponent(prodName)}&prodimage=${prodImg}" \n                    frameborder="0" marginheight="6" marginwidth="6" scrolling="no" id="wframe"></iframe>\n            <div id="ytimesReviewsModalClose"></div>\n        `,r>n){const e=document.getElementById("ytimesReviewsModalClose");
1e.style.top="0px",e.style.right="0px",i.style.position="absolute",i.style.top=`${s}px`,i.style.left="0px",i.style.maxWidth=`${n}px`}document.getElementById("ytimesReviewsModalClose").addEventListener("click",(()=>{i.remove(),d.remove()})),d.addEventListener("click",(()=>{i.remove(),d.remove()}))}if("undefined"!=typeof prodId){const t=document.getElementById("ytimesAvgRating");t&&fetch(`${yrewurl}yreview_avgrating.php?CODE=${prodId}&jsonp=?`).then((e=>e.text())).then((n=>{t.innerHTML=n;const i=document.getElementById("writeLink");i&&i.addEventListener("click",(function(t){t.preventDefault(),e("N")}))}));const n=document.getElementById("ytimesReviewsResult");n&&fetch(`${yrewurl}yreview_reviews.php?CODE=${prodId}&jsonp=?`).then((e=>e.text())).then((t=>{n.innerHTML=t;const i=document.getElementById("writeLink2");i&&(i.setAttribute("href","#"),i.addEventListener("click",(function(t){t.preventDefault(),t.stopPropagation(),e("N")})))}));const i=document.getElementById("writeLink");i&&i.addEventListener("click",(function(t){t.preventDefault(),t.stopPropagation(),e("N")}));const r=document.getElementById("writeLink2");r&&(r.setAttribute("href","#"),r.addEventListener("click",(function(t){t.preventDefault(),t.stopPropagation(),e("N")})))}-1!=location.href.indexOf("writerev=1")&&e("Y"),createVideoObject()}));
2//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXRpbWVzLXNjcmlwdHMtYm90dG9tLTIwMjQubWluLmpzIiwibmFtZXMiOlsibG9hZFNjcmlwdCIsInVybCIsInNjcmlwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImFzeW5jIiwiaGVhZCIsImFwcGVuZENoaWxkIiwibG9hZENzcyIsImNzc0ZpbGUiLCJ1cmxQcmVmaXgiLCJtYXRjaCIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJjc3MiLCIkIiwicHJvcCIsImFwcGVuZCIsInVzZXJJbnRlcmFjdGVkIiwiYm9keSIsImNsYXNzTGlzdCIsImFkZCIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJyZW1vdmVJbnRlcmFjdGlvbkxpc3RlbmVycyIsImhhbmRsZUludGVyYWN0aW9uIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNoZWNrVmlzaWJsZSIsImVsbSIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ2aWV3SGVpZ2h0IiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudEhlaWdodCIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwiYm90dG9tIiwidG9wIiwiYmluZEV2ZW50IiwiZWxlbWVudCIsImV2ZW50TmFtZSIsImV2ZW50SGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsInl0aW1lc1VwZGF0ZUNhcnRDb3VudCIsImNhcnRDb3VudCIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImNhcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImNsYXNzTmFtZSIsInByZXBlbmQiLCJpbm5lckhUTUwiLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJzdyIsImNvbnRhaW5zIiwiU3dpcGVyIiwic2xpZGVzUGVyVmlldyIsInNwYWNlQmV0d2VlbiIsImdyYWJDdXJzb3IiLCJrZXlib2FyZCIsImVuYWJsZWQiLCJsb29wIiwibGF6eSIsInBhZ2luYXRpb24iLCJlbCIsImNsaWNrYWJsZSIsIm5hdmlnYXRpb24iLCJuZXh0RWwiLCJwcmV2RWwiLCJicmVha3BvaW50cyIsInNsaWRlc1Blckdyb3VwIiwib24iLCJyZXNpemUiLCJzd2lwZXIiLCJpbm5lcldpZHRoIiwiZGlzYWJsZSIsImVuYWJsZSIsImluaXQiLCJncmlkIiwicm93cyIsImZpbGwiLCJpdGVtcyIsInRhbGxlc3QiLCJpdGVtIiwiaGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic3dpcGVySUQiLCJnZXRBdHRyaWJ1dGUiLCJzd2lwZXJTdHlsZUlEIiwic3R5bGUiLCJyZXNpemVTd2lwZXJHcmlkRWxlbWVudHMiLCJIVE1MSW1hZ2VFbGVtZW50IiwicHJvdG90eXBlIiwiaW1nIiwibG9hZGluZyIsInJlbW92ZUF0dHJpYnV0ZSIsImZvcm1hdHRlciIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJjdXJyZW5jeSIsIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIsIllUSU1FUyIsImZvcm1hdEN1cnJlbmN5IiwidG90YWwiLCJuZWciLCJhYnMiLCJwYXJzZUZsb2F0IiwidG9GaXhlZCIsInJlcGxhY2UiLCJ0b1N0cmluZyIsInNtYXJ0QnJlYWRjcnVtYnMiLCJqUXVlcnkiLCJoaWRlIiwiZWFjaCIsInBhcnRzIiwidGhpcyIsImZpbmQiLCJpIiwibGVuZ3RoIiwicGFyZW50IiwiaGFzQ2xhc3MiLCJocmVmIiwiYXR0ciIsImoiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImluZGV4T2YiLCJoZXgiLCJ0b1VwcGVyQ2FzZSIsImNoYXJDb2RlQXQiLCJjdXJyZW50QkNEaXYiLCJjdXJyZW50QkMiLCJTZXR
2Db29raWUiLCJnZXQiLCJhcHBlbmRUbyIsInNob3ciLCJwb3B1cHJldmlldyIsImgiLCJ3Iiwid2luIiwib3BlbiIsImNyZWF0ZVZpZGVvT2JqZWN0IiwieW91dHViZUlmcmFtZSIsInZpZGVvQ29kZSIsInRpdGxlIiwidGV4dCIsInRyaW0iLCJkZXNjcmlwdGlvbiIsInRodW1ibmFpbCIsImVtYmVkVXJsIiwiY29udGVudFVybCIsInByb2RJZCIsInB1Ymxpc2hUaW1lc3RhbXAiLCJkdCIsIkRhdGUiLCJ0eiIsInBhZCIsIm4iLCJwYWRTdGFydCIsInkiLCJnZXRGdWxsWWVhciIsIm0iLCJnZXRNb250aCIsImQiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJtaW4iLCJnZXRNaW51dGVzIiwicyIsImdldFNlY29uZHMiLCJvZmZzZXRNaW51dGVzIiwidG9Mb2NhbGVTdHJpbmciLCJ0aW1lWm9uZSIsImdldFRpbWV6b25lT2Zmc2V0Iiwib2Zmc2V0U2lnbiIsImFic09mZnNldCIsInZpZGVvSnNvbkxkIiwibmFtZSIsInRodW1ibmFpbFVybCIsInVwbG9hZERhdGUiLCJmbG9vciIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXhSZWNlbnRseVZpZXdlZCIsInNldCIsInZhbHVlIiwic2V0SXRlbSIsInBhcnNlIiwiZSIsInNhdmVUcmFpbCIsImN1cnJlbnRJdGVtIiwidHJhaWwiLCJzcGxpY2UiLCJ1bnNoaWZ0IiwicHJpY2UiLCJzYWxlIiwic2hvd1RyYWlsIiwiY2FsbGJhY2siLCJodG1sIiwibWFwIiwiam9pbiIsImNvbnRhaW5lciIsIm51bSIsInJhbmRvbSIsInRlc3RpbW9uaWFsc0FycmF5IiwidGVzdGltb25pYWwiLCJwb3BXcml0ZVJldmlldyIsInZlcmlmeSIsImluc2VydEFkamFjZW50SFRNTCIsInNjcmVlbkhlaWdodCIsInNjcmVlbldpZHRoIiwic2Nyb2xsVG8iLCJtb2RhbENvbnRhaW5lciIsImNvbnRhaW5lclciLCJvZmZzZXRXaWR0aCIsIm
2NvbnRhaW5lckgiLCJwb3NUb3AiLCJyb3VuZCIsInBvc0xlZnQiLCJvdmVybGF5Iiwid2lkdGgiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsInBvc2l0aW9uIiwibGVmdCIsIm1heEhlaWdodCIsInlyZXd1cmwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwcm9kTmFtZSIsInByb2RJbWciLCJjbG9zZUJ1dHRvbiIsInJpZ2h0IiwibWF4V2lkdGgiLCJhdmdSYXRpbmdFbGVtZW50IiwiZmV0Y2giLCJ0aGVuIiwicmVzcG9uc2UiLCJkYXRhIiwid3JpdGVMaW5rIiwicHJldmVudERlZmF1bHQiLCJyZXZpZXdzUmVzdWx0RWxlbWVudCIsIndyaXRlTGluazIiLCJzZXRBdHRyaWJ1dGUiLCJzdG9wUHJvcGFnYXRpb24iXSwic291cmNlcyI6WyJ5dGltZXMtc2NyaXB0cy1ib3R0b20tMjAyNC5qcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBV0MsR0FDaEIsTUFBTUMsRUFBU0MsU0FBU0MsY0FBYyxVQUN0Q0YsRUFBT0csSUFBTUosRUFDYkMsRUFBT0ksT0FBUSxFQUNmSCxTQUFTSSxLQUFLQyxZQUFZTixFQUM5QixDQUNBLFNBQVNPLFFBQVFDLEdBQ2IsSUFBSUMsRUFBWSxHQUNYRCxFQUFRRSxNQUFNLFNBRVhELEVBRHFCLGFBQXJCRSxTQUFTQyxVQUFnRCxhQUFyQkQsU0FBU0MsU0FDakMsVUFFQSwyQ0FHcEIsSUFBSUMsRUFBTUMsRUFBRSxxREFDWkQsRUFBSUUsS0FBSyxPQUFRTixFQUFZRCxHQUM3Qk0sRUFBRSxRQUFRRSxPQUFPSCxFQUNyQixDQXNPQSxTQUFTSSxpQkFHTCxHQUZBaEIsU0FBU2lCLEtBQUtDLFVBQVVDLElBQUksZ0JBRXZCbkIsU0FBU29CLGVBQWUsK0JBQWdDLENBQ3pELElBQUlyQixFQUFTQyxTQUFTQyxjQUFjLFVBQ3BDRixFQUFPc0IsR0FBSyw4QkFDYSxhQUFyQlgsU0FBU0MsVUFBZ0QsYUFBckJELFNBQVNDLFNBQzdDWixFQUFPRyxJQUFNLDBDQUViSCxFQ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FBS0MsR0FBWUEsRUFBUzNGLFNBQzFCMEYsTUFBS0UsSUFDRkosRUFBaUJ6TCxVQUFZNkwsRUFDN0IsTUFBTUMsRUFBWWxQLFNBQVNvQixlQUFlLGFBQ3RDOE4sR0FDQUEsRUFBVXhNLGlCQUFpQixTQUFTLFNBQVVzSixHQUMxQ0EsRUFBRW1ELGlCQUNGakMsRUFBZSxJQUNuQixHQUNKLElBSVosTUFBTWtDLEVBQXVCcFAsU0FBU29CLGVBQWUsdUJBQ2pEZ08sR0FDQU4sTUFBTSxHQUFHUixtQ0FBbUMzRSxrQkFDM0NvRixNQUFLQyxHQUFZQSxFQUFTM0YsU0FDMUIwRixNQUFLckMsSUFDRjBDLEVBQXFCaE0sVUFBWXNKLEVBQ2pDLE1BQU0yQyxFQUFhclAsU0FBU29CLGVBQWUsY0FDdkNpTyxJQUNBQSxFQUFXQyxhQUFhLE9BQVEsS0FDaENELEVBQVczTSxpQkFBaUIsU0FBUyxTQUFVc0osR0FDM0NBLEVBQUVtRCxpQkFDRm5ELEVBQUV1RCxrQkFDRnJDLEVBQWUsSUFDbkIsSUFDSixJQUlSLE1BQU1nQyxFQUFZbFAsU0FBU29CLGVBQWUsYUFDdEM4TixHQUNBQSxFQUFVeE0saUJBQWlCLFNBQVMsU0FBVXNKLEdBQzFDQSxFQUFFbUQsaUJBQ0ZuRCxFQUFFdUQsa0JBQ0ZyQyxFQUFlLElBQ25CLElBR0osTUFBTW1DLEVBQWFyUCxTQUFTb0IsZUFBZSxjQUN2Q2lPLElBQ0FBLEVBQVdDLGFBQWEsT0FBUSxLQUNoQ0QsRUFBVzNNLGlCQUFpQixTQUFTLFNBQVVzSixHQUMzQ0EsRUFBRW1ELGlCQUNGbkQsRUFBRXVELGtCQUNGckMsRUFBZSxJQUNuQixJQUVSLEVBRTRDLEdBQXhDeE0sU0FBU21ILEtBQUtLLFFBQVEsZUFDdEJnRixFQUFlLEtBR25CakUsbUJBQ0oiLCJpZ25vcmVMaXN0IjpbXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbG9hZFNjcmlwdCh1cmwpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gdXJsO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xufVxuZnVuY3Rpb24gbG9hZENzcyhjc3NGaWxlKSB7XG4gICAgdmFyIHVybFByZWZpeCA9IFwiXCI7XG4gICAgaWYgKCFjc3NGaWxlLm1hdGNoKC9cXC8vZykpIHtcbiAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09IFwibG9jYWxob3N0XCIgfHwgbG9jYXRpb24uaG9zdG5hbWUgPT0gXCIxMjcuMC4wLjFcIikge1xuICAgICAgICAgICAgdXJsUHJlZml4ID0gXCIuL2Rpc3QvXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmxQcmVmaXggPSBcImh0dHBzOi8vdHVyYmlmeWNkbi5jb20vdHkvY2RuL2tuaWZlYXJ0L1wiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBjc3MgPSAkKFwiPGxpbmsgaHJlZj0nJyByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJyAvPlwiKTtcbiAgICBjc3MucHJvcChcImhyZWZcIiwgdXJsUHJlZml4ICsgY3NzRmlsZSk7XG4gICAgJChcImhlYWRcIikuYXBwZW5kKGNzcyk7XG59XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhZE1vcmVUaHJlc2hvbGQgPSAwLjMwO1xuXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlSW50ZXJhY3Rpb24pOyAvLyBNb3VzZSBjbGlja1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVJbnRlcmFjdGlvbik7ICAgLy8gS2V5Ym9hcmQgcHJlc3NcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlSW50ZXJhY3Rpb24pOyAvLyBUb3VjaCBzY3JlZW5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVJbnRlcmFjdGlvbik7IC8vIE1vdXNlIG1vdmVtZW50XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlSW50ZXJhY3Rpb24pOyAgICAvLyBTY3JvbGxpbmdcblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB1c2VySW50ZXJhY3RlZCgpO1xuICAgIH0sIDYwMDApO1xuXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwibm8tanNcIik7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiZGVzaWduMThcIik7XG5cblxuICAgIC8vICAgICAgICAgLy8gJChcIi5pdGVtOm5vdChbZGF0YS1pZF0pIC50aXRsZSBhXCIpLmVsbGlwc2lzKHtcbiAgICAvLyAgICAgICAgIC8vICAgICBsaW5lczogMywgICAgICAgICAgICAgLy8gZm9yY2UgZWxsaXBzaXMgYWZ0ZXIgYSBjZXJ0YWluIG51bWJlciBvZiBsaW5lcy4gRGVmYXVsdCBpcyAnYXV0bydcbiAgICAvLyAgICAgICAgIC8vICAgICBlbGxpcENsYXNzOiAnZWxsaXAnLCAg
2Ly8gY2xhc3MgdXNlZCBmb3IgZWxsaXBzaXMgd3JhcHBlciBhbmQgdG8gbmFtZXNwYWNlIGVsbGlwIGxpbmVcbiAgICAvLyAgICAgICAgIC8vICAgICByZXNwb25zaXZlOiB0cnVlICAgICAgLy8gc2V0IHRvIHRydWUgaWYgeW91IHdhbnQgZWxsaXBzaXMgdG8gdXBkYXRlIG9uIHdpbmRvdyByZXNpemUuIERlZmF1bHQgaXMgZmFsc2VcbiAgICAvLyAgICAgICAgIC8vIH0pO1xuXG4gICAgLy8gICAgICAgICAvLyBJbml0aWFsaXplIHZpZGVvcyBvbiBob21lIHBhZ2Ugd2l0aCAyIGxpbmVzIG9ubHkuIFRoZSB2aWRlb3MgaGF2ZSBhIGRhdGEtaWQ9eCBhdHRyaWJ1dGVcbiAgICAvLyAgICAgICAgIC8vIHNvIHRoZSBwcmV2aW91cyBjYWxsIGFib3ZlIGRvZXNuJ3QgaW5pdGlhbGl6ZSBlbGxpcHNpcyB3aXRoIDMgbGluZXMuXG4gICAgLy8gICAgICAgICAvLyAkKFwiLnZpZGVvcyAuaXRlbSAudGl0bGUgYVwiKS5lbGxpcHNpcyh7XG4gICAgLy8gICAgICAgICAvLyAgICAgbGluZXM6IDIsICAgICAgICAgICAgIC8vIGZvcmNlIGVsbGlwc2lzIGFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgbGluZXMuIERlZmF1bHQgaXMgJ2F1dG8nXG4gICAgLy8gICAgICAgICAvLyAgICAgZWxsaXBDbGFzczogJ2VsbGlwJywgIC8vIGNsYXNzIHVzZWQgZm9yIGVsbGlwc2lzIHdyYXBwZXIgYW5kIHRvIG5hbWVzcGFjZSBlbGxpcCBsaW5lXG4gICAgLy8gICAgICAgICAvLyAgICAgcmVzcG9uc2l2ZTogdHJ1ZSAgICAgIC8vIHNldCB0byB0cnVlIGlmIHlvdSB3YW50IGVsbGlwc2lzIHRvIHVwZGF0ZSBvbiB3aW5kb3cgcmVzaXplLiBEZWZhdWx0IGlzIGZhbHNlXG4gICAgLy8gICAgICAgICAvLyB9KTtcbiAgICAvLyAgICAgfSk7XG5cblxuXG4gICAgLy8gICAgICQoXCIuaXRlbVt0YXJnZXRdXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICQodGhpcykuYXR0cihcInRhcmdldFwiKTtcbiAgICAvLyAgICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyBob21lIHN3aXBlcnNcbiAgICBmdW5jdGlvbiByZXNpemVTd2lwZXJHcmlkRWxlbWVudHMoc3cpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzdy5lbC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW1cIik7XG4gICAgICAgIGxldCB0YWxsZXN0ID0gMDtcblxuICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gaXRlbS5vZmZzZXRIZWlnaHQ7IC8vIEFsdGVybmF0aXZlbHk6IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgICBpZiAoaGVpZ2h0ID4gdGFsbGVzdCkge1xuICAgICAgICAgICAgICAgIHRhbGxlc3QgPSBoZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN3aXBlcklEID0gc3cuZWwucXVlcnlTZWxlY3RvcihcIi5zd2lwZXItd3JhcHBlclwiKS5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIGNvbnN0IHN3aXBlclN0eWxlSUQgPSBgc3R5bGUtJHtzd2lwZXJJRH1gO1xuICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3dpcGVyU3R5bGVJRCkpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN3aXBlclN0eWxlSUQpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGUuaWQgPSBzd2lwZXJTdHlsZUlEO1xuICAgICAgICBzdHlsZS5pbm5lckhUTUwgPVxuICAgICAgICAgICAgYCMke3N3aXBlcklEfSAuaXRlbSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAke3RhbGxlc3R9cHg7XG4gICAgICAgICAgICB9YDtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zd2lwZXJcIikuZm9yRWFjaCgoZnVuY3Rpb24gKHN3KSB7XG4gICAgICAgIGlmIChzdy5jbGFzc0xpc3QuY29udGFpbnMoXCJzdWItc2VjdGlvbnNcIikpIHtcbiAgICAgICAgICAgIG5ldyBTd2lwZXIoc3csIHtcbiAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAyLFxuICAgICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMjAsXG4gICAgICAgICAgICAgICAgZ3JhYkN1cnNvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBlbDogXCIuc3dpcGVyLXBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnLFxuICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JyxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBicmVha3BvaW50czoge1xuICAgICAgICAgICAgICAgICAgICA2NDA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgNzIwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDEwMjQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogNCAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgI
2H0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplOiBmdW5jdGlvbiBlbmFibGVPbmx5TW9iaWxlKHN3aXBlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID49IDEwMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2lwZXIuZWwuY2xhc3NMaXN0LmFkZCgnbm8tc3dpcGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVyLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ25vLXN3aXBlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXBlci5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3LmNsYXNzTGlzdC5jb250YWlucyhcImJyYW5kc1wiKSB8fCBzdy5jbGFzc0xpc3QuY29udGFpbnMoXCJ2aWRlb3NcIikpIHtcbiAgICAgICAgICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKHN3LCB7XG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMixcbiAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDIwLFxuICAgICAgICAgICAgICAgIGdyYWJDdXJzb3I6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDIsXG4gICAgICAgICAgICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGVsOiBcIi5zd2lwZXItcGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBjbGlja2FibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWw6ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgcHJldkVsOiAnLnN3aXBlci1idXR0b24tcHJldicsXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgICAgNjQwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDcyMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiAzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAxMDI0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdy5jbGFzc0xpc3QuY29udGFpbnMoXCJncmlkXCIpKSB7XG4gICAgICAgICAgICB2Y
2XIgc3dpcGVyID0gbmV3IFN3aXBlcihzdywge1xuICAgICAgICAgICAgICAgIGluaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMixcbiAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDIwLFxuICAgICAgICAgICAgICAgIGdyYWJDdXJzb3I6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDIsXG4gICAgICAgICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgICAgICAgICByb3dzOiAyLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcInJvd1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb29wOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBlbDogXCIuc3dpcGVyLXBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnLFxuICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JyxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2thYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBicmVha3BvaW50czoge1xuICAgICAgICAgICAgICAgICAgICA3Njg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDEwMjQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN3aXBlci5vbihcInNsaWRlc1VwZGF0ZWRcIiwgZnVuY3Rpb24gKHN3KSB7XG4gICAgICAgICAgICAgICAgcmVzaXplU3dpcGVyR3JpZEVsZW1lbnRzKHN3KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgeXRpbWVzVXBkYXRlQ2FydENvdW50KCk7XG5cbiAgICAvLyAvLyBsb2FkIGl0ZW0gcGFnZSBzY3JpcHRzXG4gICAgLy8gaWYgKCQoXCJib2R5XCIpLmhhc0NsYXNzKFwiaXRlbS1wYWdlXCIpKSB7XG4gICAgLy8gICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PSBcImxvY2FsaG9zdFwiIHx8IGxvY2F0aW9uLmhvc3RuYW1lID09IFwiMTI3LjAuMC4xXCIpIHtcbiAgICAvLyAgICAgICAgIHVybFByZWZpeCA9IFwiLi9kaXN0L1wiO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgdXJsUHJlZml4ID0gXCJodHRwczovL3NpdGUua25pZmVhcnQuY29tL2tuaWZlYXJ0L2Rpc3QvXCI7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgJC5nZXRTY3JpcHQodXJsUHJlZml4ICsgXCJ5dGltZXMtaXRlbS1wYWdlLXNjcmlwdC5taW4uanNcIik7XG4gICAgLy8gfVxuXG4gICAgaWYgKCdsb2FkaW5nJyBpbiBIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSAmJiB0eXBlb2YgKHByb2R1Y3RWYXJpYW50cykgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW1nW2RhdGEtc3JjXScpLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgICAgICAgICAgaW1nLmxvYWRpbmcgPSAnbGF6eSc7XG4gICAgICAgICAgICBpbWcuc3JjID0gaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKTtcbiAgICAgICAgICAgIGltZy5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWRTY3JpcHQoXCJodHRwczovL3R1cmJpZnljZG4uY29tL3R5L2Nkbi9rbmlmZWFydC9qcXVlcnkubGF6eWxvYWR4dC5taW4uanNcIik7XG4gICAgICAgIGxvYWRTY3JpcHQoXCJodHRwczovL3R1cmJpZnljZG4uY29tL3R5L2Nkbi9rbmlmZWFydC9qcXVlcnkubGF6eWxvYWR4dC5zcmNzZXQubWluLmpzXCIpO1xuICAgIH1cbn0pO1xuXG5mdW5jdGlvbiB1c2VySW50ZXJhY3RlZCgpIHtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2ludGVyYWN0aXZlJyk7XG5cbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5dGltZXMtc2NyaXB0cy1kZWxheWVkLTIwMjQnKSkge1xuICAgICAgICB2Y
2XIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHNjcmlwdC5pZCA9ICd5dGltZXMtc2NyaXB0cy1kZWxheWVkLTIwMjQnO1xuICAgICAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT0gXCJsb2NhbGhvc3RcIiB8fCBsb2NhdGlvbi5ob3N0bmFtZSA9PSBcIjEyNy4wLjAuMVwiKSB7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gJ2Rpc3QveXRpbWVzLXNjcmlwdHMtZGVsYXllZC0yMDI0Lm1pbi5qcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vc2l0ZS5rbmlmZWFydC5jb20veXRpbWVzLzIwMjQvZGlzdC95dGltZXMtc2NyaXB0cy1kZWxheWVkLTIwMjQubWluLmpzJztcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFsbCBpbnRlcmFjdGlvbiBsaXN0ZW5lcnNcbiAgICByZW1vdmVJbnRlcmFjdGlvbkxpc3RlbmVycygpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcmFjdGlvbigpIHtcbiAgICB1c2VySW50ZXJhY3RlZCgpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVJbnRlcmFjdGlvbkxpc3RlbmVycygpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVJbnRlcmFjdGlvbik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUludGVyYWN0aW9uKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgaGFuZGxlSW50ZXJhY3Rpb24pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZUludGVyYWN0aW9uKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVJbnRlcmFjdGlvbik7XG59XG5cbmZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZW4tVVMnLCB7XG4gICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgY3VycmVuY3k6ICdVU0QnLFxuICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMlxufSk7XG5cblxuZnVuY3Rpb24gY2hlY2tWaXNpYmxlKGVsbSkge1xuICAgIHZhciByZWN0ID0gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciB2aWV3SGVpZ2h0ID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0KTtcbiAgICByZXR1cm4gIShyZWN0LmJvdHRvbSA8IDAgfHwgcmVjdC50b3AgLSB2aWV3SGVpZ2h0ID49IDApO1xufVxuXG5mdW5jdGlvbiBiaW5kRXZlbnQoZWxlbWVudCwgZXZlbnROYW1lLCBldmVudEhhbmRsZXIpIHtcbiAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlciwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5hdHRhY2hFdmVudCkge1xuICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyBldmVudE5hbWUsIGV2ZW50SGFuZGxlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB5dGltZXNVcGRhdGVDYXJ0Q291bnQoKSB7XG4gICAgY29uc3QgY2FydENvdW50ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImNhcnRjbnRcIik7XG4gICAgaWYgKGNhcnRDb3VudCkge1xuICAgICAgICBsZXQgY2FydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnZpZXdDYXJ0IC5jYXJ0Q250XCIpO1xuICAgICAgICBpZiAoIWNhcnRFbGVtZW50KSB7XG4gICAgICAgICAgICBjYXJ0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICAgICAgY2FydEVsZW1lbnQuY2xhc3NOYW1lID0gXCJjYXJ0Q250XCI7XG4gICAgICAgICAgICBkb2
2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnZpZXdDYXJ0XCIpLnByZXBlbmQoY2FydEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNhcnRFbGVtZW50LmlubmVySFRNTCA9IGNhcnRDb3VudDtcbiAgICB9XG59XG5cbmlmICh0eXBlb2YgKFlUSU1FUykgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBZVElNRVMgPSB7fTtcbn1cblxuaWYgKHR5cGVvZiAoWVRJTUVTLm1heFJlY2VudGx5Vmlld2VkKSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgWVRJTUVTLm1heFJlY2VudGx5Vmlld2VkID0gMTA7XG59XG5cbllUSU1FUy5zZXQgPSBmdW5jdGlvbiAoaWQsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oaWQsIHZhbHVlKTtcbn1cbllUSU1FUy5nZXQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgdmFsdWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGlkKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5ZVElNRVMuc2F2ZVRyYWlsID0gZnVuY3Rpb24gKGN1cnJlbnRJdGVtKSB7XG4gICAgdmFyIHRyYWlsID0gWVRJTUVTLmdldChcInl0VHJhaWxcIik7XG4gICAgaWYgKHRyYWlsID09IG51bGwpIHtcbiAgICAgICAgdHJhaWwgPSBbXTtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdGhpcyBlbGVtZW50IGlmIGV4aXN0cyBhcmVhZHlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWlsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmFpbFtpXS5pZCA9PSBjdXJyZW50SXRlbS5pZCkge1xuICAgICAgICAgICAgdHJhaWwuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFpbC51bnNoaWZ0KFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IGN1cnJlbnRJdGVtLmlkLFxuICAgICAgICAgICAgXCJuYW1lXCI6IGN1cnJlbnRJdGVtLm5hbWUsXG4gICAgICAgICAgICBcImltZ1wiOiBjdXJyZW50SXRlbS5pbWcsXG4gICAgICAgICAgICBcInByaWNlXCI6IGN1cnJlbnRJdGVtLnByaWNlLFxuICAgICAgICAgICAgXCJzYWxlXCI6IGN1cnJlbnRJdGVtLnNhbGVcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICB0cmFpbCA9IHRyYWlsLnNwbGljZSgwLCBZVElNRVMubWF4UmVjZW50bHlWaWV3ZWQpO1xuICAgIFlUSU1FUy5zZXQoXCJ5dFRyYWlsXCIsIHRyYWlsKTtcbn1cblxuWVRJTUVTLnNob3dUcmFpbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNvbnN0IHRyYWlsID0gWVRJTUVTLmdldChcInl0VHJhaWxcIik7XG5cbiAgICBpZiAodHJhaWwpIHtcbiAgICAgICAgbGV0IGh0bWwgPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwieXRpbWVzUmVjZW50bHlWaWV3ZWRcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nXCI+PHNwYW4+UmVjZW50bHkgVmlld2VkIEl0ZW1zPC9zcGFuPjwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY2VudGx5IHN3aXBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7dHJhaWwubWFwKGl0ZW0gPT4gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHN3aXBlci1zbGlkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiJHtpdGVtLmlkfS5odG1sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke2l0ZW0uaW1nfVwiIGFsdD1cIiR7aXRlbS5uYW1lfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiJHtpdGVtLmlkfS5odG1sXCI+JHtpdGVtLm5hbWV9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0ucHJpY2UgPyBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpdGVtLnNhbGUgPyBgPGRpdiBjbGFzcz1cInJlZ1wiPiR7Zm9ybWF0Q3VycmVuY3koaXRlbS5wcmljZSl9PC9kaXY+YCA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGVcIj4ke2Zvcm1hdEN1cnJlbmN5KGl0ZW0uc2FsZSB8fCBpdGVtLnByaWNlKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIGApLmpvaW4oXCJcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLWJ1dHRvbi1wcmV2XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2lwZXItYnV0dG9uLW5leHRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwieXRpbWVzUmVjZW50bHlWaWV3ZWRDb250YWluZXJcIik7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpOyAvLyB3aGVuIHVwZGF0ZWRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgKFlUSU1FUy5jdXJyZW50SXRlbSkgIT0g
2XCJ1bmRlZmluZWRcIikge1xuICAgICAgICBZVElNRVMuc2F2ZVRyYWlsKFlUSU1FUy5jdXJyZW50SXRlbSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDdXJyZW5jeSh0b3RhbCkge1xuICAgIHZhciBuZWcgPSBmYWxzZTtcbiAgICBpZiAodG90YWwgPCAwKSB7XG4gICAgICAgIG5lZyA9IHRydWU7XG4gICAgICAgIHRvdGFsID0gTWF0aC5hYnModG90YWwpO1xuICAgIH1cbiAgICByZXR1cm4gKG5lZyA/IFwiLSRcIiA6ICckJykgKyBwYXJzZUZsb2F0KHRvdGFsLCAxMCkudG9GaXhlZCgyKS5yZXBsYWNlKC8oXFxkKSg/PShcXGR7M30pK1xcLikvZywgXCIkMSxcIikudG9TdHJpbmcoKTtcbn1cblxuLypcbiAgICBTbWFydEJyZWFkY3J1bWJzXG4gICAgXG4gICAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTkgWS1UaW1lcyBQdWJsaWNhdGlvbnMsIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgICBEdXBsaWNhdGlvbiBpcyBzdHJpY3RseSBwcm9oaWJpdGVkIHdpdGhvdXQgd3JpdHRlbiBjb25zZW50IG9mIFktVGltZXMgUHVibGljYXRpb25zLCBMTEMuXG4gICAgd3d3Lnl0aW1lcy5pbmZvXG4gXG4qL1xuXG5mdW5jdGlvbiBzbWFydEJyZWFkY3J1bWJzKCkge1xuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJicmVhZGNydW1ic1wiKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgLy8gYXNzaWduIGlkc1xuICAgIGpRdWVyeShcIiNicmVhZGNydW1icyAuYnJlYWRjcnVtYnNcIikuaGlkZSgpO1xuICAgIGpRdWVyeShcIiNicmVhZGNydW1icyAuYnJlYWRjcnVtYnNcIikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpZCA9IFwiMkEyQVwiO1xuICAgICAgICB2Y
2XIgcGFydHMgPSBqUXVlcnkodGhpcykuZmluZChcImFcIik7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghalF1ZXJ5KHBhcnRzW2ldKS5wYXJlbnQoKS5oYXNDbGFzcyhcInByZXZMaW5rXCIpICYmICFqUXVlcnkocGFydHNbaV0pLnBhcmVudCgpLmhhc0NsYXNzKFwibmV4dExpbmtcIikpIHtcbiAgICAgICAgICAgICAgICBocmVmID0galF1ZXJ5KHBhcnRzW2ldKS5hdHRyKFwiaHJlZlwiKTtcbiAgICAgICAgICAgICAgICBqID0gaHJlZi5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKVxuICAgICAgICAgICAgICAgICAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoaiArIDEpO1xuICAgICAgICAgICAgICAgIGogPSBocmVmLmluZGV4T2YoXCIuXCIpO1xuICAgICAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYuc3Vic3RyaW5nKDAsIGopO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhleCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGhyZWYubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBocmVmLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdChqKS50b1N0cmluZygxNik7XG4gICAgICAgICAgICAgICAgICAgIGhleCArPSBoLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlkICs9IGhleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoalF1ZXJ5KHRoaXMpLmF0dHIoXCJsZWFmXCIpID09IFwiMFwiKSB7XG4gICAgICAgICAgICBocmVmID0gbG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgIGogPSBocmVmLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChqID4gMClcbiAgICAgICAgICAgICAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoaiArIDEpO1xuICAgICAgICAgICAgaiA9IGhyZWYuaW5kZXhPZihcIi5cIik7XG4gICAgICAgICAgICBpZiAoaiA+IDApXG4gICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYuc3Vic3RyaW5nKDAsIGopO1xuXG4gICAgICAgICAgICB2Y
2XIgaGV4ID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBocmVmLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGggPSBocmVmLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdChqKS50b1N0cmluZygxNik7XG4gICAgICAgICAgICAgICAgaGV4ICs9IGgudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkICs9IGhleDtcbiAgICAgICAgfVxuICAgICAgICBqUXVlcnkodGhpcykuYXR0cihcImlkXCIsIGlkKTtcbiAgICB9KTtcbiAgICB2YXIgY3VycmVudEJDRGl2ID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgKGN1cnJlbnRCQykgIT0gJ3VuZGVmaW5lZCcgJiYgY3VycmVudEJDKSB7XG4gICAgICAgIGlmIChqUXVlcnkoXCJkaXZbaWQqPVwiICsgY3VycmVudEJDICsgXCJdXCIpLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBjdXJyZW50QkNEaXYgPSBqUXVlcnkoXCJkaXZbaWQqPVwiICsgY3VycmVudEJDICsgXCJdXCIpO1xuICAgICAgICAgICAgY3VycmVudEJDRGl2LmNzcyhcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcbiAgICAgICAgICAgIFNldENvb2tpZShcImN1cnJlbnRCQ1wiLCBjdXJyZW50QkNEaXYuZ2V0KClbMF0uaWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGpRdWVyeShcImRpdltpZCo9XCIgKyBjdXJyZW50QkMgKyBcIl1cIikubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY3VycmVudEJDRGl2ID0galF1ZXJ5KFwiZGl2W2lkKj1cIiArIGN1cnJlbnRCQyArIFwiXTpmaXJzdFwiKTtcbiAgICAgICAgICAgIGN1cnJlbnRCQ0Rpdi5jc3MoXCJkaXNwbGF5XCIsIFwiYmxvY2tcIik7XG4gICAgICAgICAgICBTZXRDb29raWUoXCJjdXJyZW50QkNcIiwgY3VycmVudEJDRGl2LmdldCgpWzBdLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRCQ0RpdiA9IGpRdWVyeShcIiNicmVhZGNydW1icyBkaXY6Zmlyc3RcIik7XG4gICAgICAgICAgICBjdXJyZW50QkNEaXYuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xuICAgICAgICAgICAgU2V0Q29va2llKFwiY3VycmVudEJDXCIsIGN1cnJlbnRCQ0Rpdi5nZXQoKVswXS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGN1cnJlbnRCQ0RpdiA9IGpRdWVyeShcIiNicmVhZGNydW1icyBkaXY6Zmlyc3RcIik7XG4gICAgICAgIGN1cnJlbnRCQ0Rpdi5jc3MoXCJkaXNwbGF5XCIsIFwiYmxvY2tcIik7XG4gICAgICAgIFNldENvb2tpZShcImN1cnJlbnRCQ1wiLCBjdXJyZW50QkNEaXYuZ2V0KClbMF0uaWQpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50QkNEaXYgIT0gbnVsbCkge1xuICAgICAgICAvLyBzaG93IHRoZSBjdXJyZW50IHByZXYgYW5kIG5leHQgbGlua3MsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGl0XG4gICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRpdlByZXZOZXh0XCIpKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEJDRGl2LmZpbmQoXCIucHJldkxpbmtcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRCQ0Rpdi5maW5kKFwiLnByZXZMaW5rXCIpLmFwcGVuZFRvKGpRdWVyeShcIiNkaXZQcmV2TmV4dFwiKSkuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRCQ0Rpdi5maW5kKFwiLm5leHRMaW5rXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50QkNEaXYuZmluZChcIi5uZXh0TGlua1wiKS5hcHBlbmRUbyhqUXVlcnkoXCIjZGl2UHJldk5leHRcIikpLnNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuc21hcnRCcmVhZGNydW1icygpO1xuXG4vLyByYW5kb20gdGVzdGltb25pYWxzXG4oKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgKHRlc3RpbW9uaWFsc0FycmF5KSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRlc3RpbW9uaWFsc0FycmF5Lmxlbmd0aCk7XG4gICAgY29uc3QgdGVzdGltb25pYWwgPSB0ZXN0aW1vbmlhbHNBcnJheVtudW1dO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0ZXN0aW1vbmlhbHMgLnJhbmRvbVRlc3RpbW9uaWFsJykuaW5uZXJIVE1MID0gdGVzdGltb25pYWw7XG59KSgpO1xuXG5sb2FkQ3NzKFwiaHR0cHM6Ly90dXJiaWZ5Y2RuLmNvbS90eS9jZG4va25pZmVhcnQvanF1ZXJ5LmZhbmN5Ym94Lm1pbi5jc3NcIik7XG5cbi8vPT09PT09PT09PT09PT09PT09IFNUQVJUIE9GIFlUSU1FUyBSRVZJRVdTID09PT09PT09PT09PT09PT09PVxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHBvcFdyaXRlUmV2aWV3KHZlcmlmeSkge1xuICAgICAgICAvLyBDcmVhdGUgYW5kIGFwcGVuZCBtb2RhbCBvdmVybGF5IGFuZCBjb250YWluZXJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICAgICAgICBcImJlZm9yZWVuZFwiLFxuICAgICAgICAgICAgYDxkaXYgaWQ9XCJ5dGltZXNSZXZpZXdzTW9kYWxPdmVybGF5XCI+PC9kaXY+XG4gICAgIDxkaXYgaWQ9XCJ5dGltZXNSZXZpZXdzTW9kYWxDb250YWluZXJcIj48L2Rpdj5gXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gR2V0IHNjcmVlbiBkaW1lbnNpb25zXG4gICAgICAgIGNvbnN0IHNjcmVlbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuXG4gICAgICAgIC8vIEdldCBtb2RhbCBjb250YWluZXIgZGltZW5zaW9uc1xuICAgICAgICBjb25zdCBtb2RhbENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwieXRpbWVzUmV2aWV3c01vZGFsQ29udGFpbmVyXCIpO1xuICAgICAgICBjb25zdCBjb250YWluZXJXID0gTWF0aC5tYXgobW9kYWxDb250YWluZXIub2Zmc2V0V2lkdGgsIDYwMCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckggPSBNYXRoLm1heChtb2RhbENvbnRhaW5lci5vZmZzZXRIZWlnaHQsIDQwMCk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHBvc1RvcCA9IGNvbnRhaW5lckggPiBzY3JlZW5IZWlnaHQgPyAwIDogTWF0aC5yb3VuZChzY3JlZW5IZWlnaHQgLyAyIC0gY29udGFpbmVySCAvIDIpO1xuICAgICAgICBjb25zdCBwb3NMZWZ0ID0gY29udGFpbmVyVyA+IHNjcmVlbldpZHRoID8gMCA6IE1hdGgucm91bmQoc2NyZWVuV2lkdGggLyAyIC0gY29udGFpbmVyVyAvIDIpO1xuXG4gICAgICAgIC8vIFNldCBvdmVybGF5IGRpbWVuc2lvbnNcbiAgICAgICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwieXRpbWVzUmV2aWV3c01vZGFsT3ZlcmxheVwiKTtcbiAgICAgICAgb3ZlcmxheS5zdHlsZS53aWR0aCA9IGAke2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aH1weGA7XG4gICAgICAgIG92ZXJsYXkuc3R5bGUuaGVpZ2h0ID0gYCR7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodH1weGA7XG5cbiAgICAgICAgLy8gU3R5bGUgbW9kYWwgY29udGFpbmVyXG4gICAgICAgIGlmIChjb250YWluZXJIID4gc2NyZWVuSGVpZ2h0KSB7XG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9I
2FwiYWJzb2x1dGVcIjtcbiAgICAgICAgICAgIG1vZGFsQ29udGFpbmVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS5sZWZ0ID0gYCR7cG9zTGVmdH1weGA7XG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSBgJHtzY3JlZW5IZWlnaHR9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kYWxDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS50b3AgPSBgJHtwb3NUb3B9cHhgO1xuICAgICAgICAgICAgbW9kYWxDb250YWluZXIuc3R5bGUubGVmdCA9IGAke3Bvc0xlZnR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwZW5kIGlmcmFtZSBhbmQgY2xvc2UgYnV0dG9uXG4gICAgICAgIG1vZGFsQ29udGFpbmVyLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpZnJhbWUgc3JjPVwiJHt5cmV3dXJsfXlyZXZpZXdfd3JpdGVyZXZpZXcucGhwP0NPREU9JHtwcm9kSWR9JnZlcmlmeT0ke3ZlcmlmeX0mcHJvZG5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocHJvZE5hbWUpfSZwcm9kaW1hZ2U9JHtwcm9kSW1nfVwiIFxuICAgICAgICAgICAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIiBtYXJnaW5oZWlnaHQ9XCI2XCIgbWFyZ2lud2lkdGg9XCI2XCIgc2Nyb2xsaW5nPVwibm9cIiBpZD1cIndmcmFtZVwiPjwvaWZyYW1lPlxuICAgICAgICAgICAgPGRpdiBpZD1cInl0aW1lc1Jldmlld3NNb2RhbENsb3NlXCI+PC9kaXY+XG4gICAgICAgIGA7XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciB3aWRlIGNvbnRhaW5lcnNcbiAgICAgICAgaWYgKGNvbnRhaW5lclcgPiBzY3JlZW5XaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInl0aW1lc1Jldmlld3NNb2RhbENsb3NlXCIpO1xuICAgICAgICAgICAgY2xvc2VCdXR0b24uc3R5bGUudG9wID0gXCIwcHhcIjtcbiAgICAgICAgICAgIGNsb3NlQnV0dG9uLnN0eWxlLnJpZ2h0ID0gXCIwcHhcIjtcblxuICAgICAgICAgICAgbW9kYWxDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS50b3AgPSBgJHtwb3NUb3B9cHhgO1xuICAgICAgICAgICAgbW9kYWxDb250YWluZXIuc3R5bGUubGVmdCA9IFwiMHB4XCI7XG4gICAgICAgICAgICBtb2RhbENvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9IGAke3NjcmVlbldpZHRofXB4YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBjbG9zZSBmdW5jdGlvbmFsaXR5XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwieXRpbWVzUmV2aWV3c01vZGFsQ2xvc2VcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIG1vZGFsQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgb3ZlcmxheS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgbW9kYWxDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICBvdmVybGF5LnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb2RJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3QgYXZnUmF0aW5nRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwieXRpbWVzQXZnUmF0aW5nXCIpO1xuICAgICAgICBpZiAoYXZnUmF0aW5nRWxlbWVudCkge1xuICAgICAgICAgICAgZmV0Y2goYCR7eXJld3VybH15cmV2aWV3X2F2Z3JhdGluZy5waHA/Q09ERT0ke3Byb2RJZH0manNvbnA9P2ApXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UudGV4dCgpKVxuICAgICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhdmdSYXRpbmdFbGVtZW50LmlubmVySFRNTCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyaXRlTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid3JpdGVMaW5rXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcFdyaXRlUmV2aWV3KFwiTlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgcmV2aWV3c1Jlc3VsdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInl0aW1lc1Jldmlld3NSZXN1bHRcIik7XG4gICAgICAgIGlmIChyZXZpZXdzUmVzdWx0RWxlbWVudCkge1xuICAgICAgICAgICAgZmV0Y2goYCR7eXJld3VybH15cmV2aWV3X3Jldmlld3MucGhwP0NPREU9JHtwcm9kSWR9Jmpzb25wPT9gKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UudGV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oaHRtbCA9PiB7XG4gICAgICAgICAgICAgICAgcmV2aWV3c1Jlc3VsdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgICAgICAgICBjb25zdCB3cml0ZUxpbmsyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3cml0ZUxpbmsyXCIpO1xuICAgICAgICAgICAgICAgIGlmICh3cml0ZUxpbmsyKSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlTGluazIuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBcIiNcIik7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlTGluazIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9wV3JpdGVSZXZpZXcoXCJOXCIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCB3cml0ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndyaXRlTGlua1wiKTtcbiAgICAgICAgaWYgKHdyaXRlTGluaykge1xuICAgICAgICAgICAgd3JpdGVMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgI
2HBvcFdyaXRlUmV2aWV3KFwiTlwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGNvbnN0IHdyaXRlTGluazIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndyaXRlTGluazJcIik7XG4gICAgICAgIGlmICh3cml0ZUxpbmsyKSB7XG4gICAgICAgICAgICB3cml0ZUxpbmsyLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgXCIjXCIpO1xuICAgICAgICAgICAgd3JpdGVMaW5rMi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBwb3BXcml0ZVJldmlldyhcIk5cIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKFwid3JpdGVyZXY9MVwiKSAhPSAtMSkge1xuICAgICAgICBwb3BXcml0ZVJldmlldyhcIllcIik7XG4gICAgfVxuXG4gICAgY3JlYXRlVmlkZW9PYmplY3QoKTtcbn0pO1xuXG5mdW5jdGlvbiBwb3B1cHJldmlldyhzcmMsIGgsIHcpIHtcbiAgICBpZiAoIWgpXG4gICAgICAgIGggPSAyMDA7XG4gICAgaWYgKCF3KVxuICAgICAgICB3ID0gNDUwO1xuICAgIHdpbiA9IHdpbmRvdy5vcGVuKHNyYywgXCJcIiwgXCJ0b3A9MjAsbGVmdD0yMCxoZWlnaHQ9XCIgKyBoICsgXCIsd2lkdGg9XCIgKyB3ICsgXCIsdG9vbGJhcj1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rvcmllcz1ubyxzdGF0dXM9bm8sbWVudWJhcj1ubyxzY3JvbGxiYXJzPW5vLHJlc2l6YWJsZT15ZXNcIilcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmlkZW9PYmplY3QoKSB7XG4gICAgY29uc3QgeW91dHViZUlmcmFtZSA9ICQoXCJpZnJhbWVbc3JjKj0nd3d3LnlvdXR1YmUnXVwiKTtcbiAgICBpZiAoeW91dHViZUlmcmFtZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgeW91dHViZVNyYyA9IHlvdXR1YmVJZnJhbWUuYXR0cihcInNyY1wiKTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB5b3V0dWJlU3JjLm1hdGNoKC9cXC9lbWJlZFxcLyhbXj9dKykvKTtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZGVvQ29kZSA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSAkKFwiaDFcIikudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYE92ZXJ2aWV3IG9mICR7dGl0bGV9YDtcbiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbCA9IGBodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8ke3ZpZGVvQ29kZX0vbWF4cmVzZGVmYXVsdC5qcGdgO1xuICAgICAgICAgICAgY29uc3QgZW1iZWRVcmwgPSBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHt2aWRlb0NvZGV9YDtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRVcmwgPSBgaHR0cHM6Ly93d3cua25pZmVhcnQuY29tLyR7cHJvZElkfS5odG1sYDsgLy8gbWFrZSBzdXJlIHByb2RJZCBpcyBkZWZpbmVkXG4gICAgICAgICAgICBjb25zdCBwdWJsaXNoVGltZXN0YW1wID0gJChcImJvZHlcIikuYXR0cihcInB1Ymxpc2hlZFwiKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHVibGlzaFRpbWVzdGFtcCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ29udmVydCBVbml4IHRpbWVzdGFtcCB0byBJU08gc3RyaW5nIGluIEFtZXJpY2EvQ2hpY2FnbyB0aW1lem9uZVxuICAgICAgICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShwdWJsaXNoVGltZXN0YW1wICogMTAwMCk7XG4gICAgICAgICAgICAvLyBVc2UgSW50bC5EYXRlVGltZUZvcm1hdCB0byBnZXQgdGhlIG9mZnNldCBmb3IgQW1lcmljYS9DaGljYWdvXG4gICAgICAgICAgICBjb25zdCB0eiA9ICdBbWVyaWNhL0NoaWNhZ28nO1xuICAgICAgICAgICAgY29uc3QgcGFkID0gbiA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBkdC5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgY29uc3QgbSA9IHBhZChkdC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCBkID0gcGFkKGR0LmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb25zdCBoID0gcGFkKGR0LmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgY29uc3QgbWluID0gcGFkKGR0LmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICBjb25zdCBzID0gcGFkKGR0LmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICAvLyBHZXQgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIEFtZXJpY2EvQ2hpY2Fnb1xuICAgICAgICAgICAgY29uc3QgY2hpY2Fnb0RhdGUgPSBuZXcgRGF0ZShkdC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IHRpbWVab25lOiB0eiB9KSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRNaW51dGVzID0gLWNoaWNhZ29EYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRTaWduID0gb2Zmc2V0TWludXRlcyA+PSAwID8gJysnIDogJy0nO1xuICAgICAgICAgICAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0TWludXRlcyk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRIb3VycyA9IHBhZChNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRNaW5zID0gcGFkKGFic09mZnNldCAlIDYwKTtcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZERhdGUgPSBgJHt5fS0ke219LSR7ZH1UJHtofToke21pbn06JHtzfSR7b2Zmc2V0U2lnbn0ke29mZnNldEhvdXJzfToke29mZnNldE1pbnN9YDtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW9Kc29uTGQgPSB7XG4gICAgICAgICAgICAgICAgXCJAY29udGV4dFwiOiBcImh0dHBzOi8vc2NoZW1hLm9yZ1wiLFxuICAgICAgICAgICAgICAgIFwiQHR5cGVcIjogXCJWaWRlb09iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIFwidGh1bWJuYWlsVXJsXCI6IHRodW1ibmFpbCxcbiAgICAgICAgICAgICAgICBcInVwbG9hZERhdGVcIjogdXBsb2FkRGF0ZSxcbiAgICAgICAgICAgICAgICBcImVtYmVkVXJsXCI6IGVtYmVkVXJsLFxuICAgICAgICAgICAgICAgIFwiY29udGVudFVybFwiOiBjb250ZW50VXJ
2sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAkKFwiaGVhZFwiKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgYDxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2xkK2pzb25cIj4ke0pTT04uc3RyaW5naWZ5KHZpZGVvSnNvbkxkKX08L3NjcmlwdD5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.