1"use strict";(()=>{var y=(t,e,n)=>new Promise((o,r)=>{var i=c=>{try{a(n.next(c))}catch(d){r(d)}},s=c=>{try{a(n.throw(c))}catch(d){r(d)}},a=c=>c.done?o(c.value):Promise.resolve(c.value).then(i,s);a((n=n.apply(t,e)).next())});window.fedlib={when:function(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:50,o=document.querySelectorAll(t);return o.length?e(o):document.readyState==="complete"?void 0:setTimeout(function(){fedlib.when(t,e,n)},n)},pollForDataLayer:function(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:50;if(!window.dataLayer[0]&&typeof window.dataLayer[0]!="function")return setTimeout(function(){fedlib.pollForDataLayer(t,e)},e);{let n=window.dataLayer;t(n)}},pollForDataLayerKey:function(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:50,o=new String;typeof window.dataLayer!="undefined"&&(o=this.findInDataLayer(t)),o!=""||document.readyState=="complete"?e(o):setTimeout(function(){fedlib.pollForDataLayerKey(t,e,n)},n)},pollForApp:function(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:50;if(!window.app.util&&typeof window.app.util!="function")return setTimeout(function(){fedlib.pollForApp(t,e)},e);{let n=window.app;t(n)}},pollForJquery:function(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:50;if(!window.$||typeof window.$!="function"||!window.$.fn||typeof window.$.fn.after!="function")return setTimeout(function(){fedlib.pollForJquery(t,e)},e);{let n=window.$;t(n)}},readCookie:function(t){let e=encodeURIComponent(t)+"=",n=document.cookie.split(";");for(let o=0;o<n.length;o++){let r=n[o];for(;r.charAt(0)===" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}return null},writeCookie:function(t,e,n){let o;if(n){let r=new Date;r.setTime(r.getTime()+n*24*60*60*1e3),o="; expires="+r.toGMTString()}else o="";document.cookie=encodeURIComponent(t)+"="+encodeURIComponent(e)+o+"; path=/"},findInDataLayer:function(t){let e=new String;for(let n in window.dataLayer)if(window.dataLayer[n].hasOwnProperty(t)){e=window.dataLayer[n][t];break}return e},isEmail:function(t){return/^[\w.%+\-]+@[\w.\-]+\.[\w]{2,6}$/.test(t)},getPageName:function(t){let e="";return e=function(r){let i,s=r.length-1;return r[s]!==""?i=r[s]:i=r[s-1],i}(function(r,i){return typeof i!="string"&&i.toString(),r.pathname.split(i)}(t,"/")),e},getCurrentPageName:function(){return this.getPageName(window.location)},getCurrentPageType:function(){return this.findInDataLayer("page_type")},getUrlParameter:function(t,e){params=typeof e=="undefined"?location.search:"?"+e.split("?")[1],t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");let o=new RegExp("[\\?&]"+t+"=([^&#]*)").exec(params);return o===null?"":decodeURIComponent(o[1].replace(/\+/g," "))},applyCouponV1:function(t,e,n){$.getJSON("/on/demandware.store/Sites-"+t+"-Site/default/Cart-AddCoupon?couponCode="+e+"&format=ajax",function(o){typeof n=="function"&&n(o)})},identifyPromoParent:function(t){$("#"+t).closest(".promotion-item").attr("data-promo-wrapper",t)},identifyAllPromoParents:function(){let t=$(".promotion-item");t.length>0&&t.each(function(){let e=$(this),n=$("[data-content-asset]",e).attr("data-content-asset");e.attr("data-parent-of",n)})},modalize:function(t){let e=$(t).first();e.dialog({resizable:!1,modal:!0,draggable:!1,width:500,open:function(n,o){$(".ui-widget-overlay").on("click",function(){e.dialog("close")})}})},isCouponApplied:function(t){let e=!1,n=$(".promotion-item .add-coupon"),o={icon:null,popup:null,couponCode:null},r=new Array;n.each(function(){let i=n.find(".info-icon"),s=n.find(".info-poppup"),a=n.find(".info-code").text().trim(),c=Object.create(o);c.icon=i,c.popup=s,c.couponCode=a,r.push(c)}),console.log(r);for(let i=0;i<r.length;i++)r[i].couponCode==t.toUpperCase()&&r[i].icon.hasClass("added")&&(e=!0);return e},chatOpen:function(){$(".helper-dropdown-chat-link")[0].click()},IsStaging:function(){return document.location.hostname==="staging-na-wwwinc.demandware.net"},IsDevelopment:function(){return document.location.hostname==="development-na-wwwinc.demandware.net"},openMiniCart:function(){document.dispatchEvent(new CustomEvent("miniCart:add-to-cart"))},sentenceCase:function(t){return t.charAt(0).toUpperCase()+t.slice(1)},titleCase:function(t){return str.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},categorySpecificLinks:function(){let t=$(".pt_storefront").length>0?"home":$("body").attr("data-category-id");$("[data-href-"+t+"]").each(function(){$link=$(this),$link.attr("href",$link.attr("data-href-"+t)),$link.filter("[data-text-"+t+"]").length>0&&$link.text($link.attr("data-text-"+t))})},categorySpecificImages:function(){let t=$(".pt_storefront").length>0?"home":$("body").attr("data-category-id");$("img[data-src-"+t+"]").each(function(){$img=$(this),$img.attr("src",$img.attr("data-src-"+t))}),$("source[data-srcset-"+t+"]").each(function(){$source=$(this),$source.attr("srcset",$source.attr("data-srcset-"+t))})},packAssets:function(t,e){t.each(function(){$(this).appendTo(e)})},getProductIDFromURL:function(t){let e=new String;try{e=t.split("/").pop().split(".")[0]}catch(n){console.error("getProductIDFromURL() error parsing url: "+t)}return e},getCurrentProductID:function(){return this.getProductIDFromURL(window.location.pathname)},getCurrentPageTypeFromDataLayer:function(){return this.findInDataLayer("page_type")},getCurrentProductIDFromDataLayer:function(){return this.findInDataLayer("product_master_id")},getDateSuffix:function(t){if(t>=11&&t<=13)return"th";let e=t%10;return e===1?"st":e===2?"nd":e===3?"rd":"th"},getAssetAsync(t,e,n){let o=new URL(window.location.href);o.pathname.endsWith("/")&&(o.pathname=o.pathname.substring(0,o.pathname.length-1));let r=o.pathname.lastIndexOf("/");(window.pageType||app.page.type)==="product"&&(r=o.pathname.substring(0,r).lastIndexOf("/"));let s=o.origin+o.pathname.substring(0,r)+"/content?caid="+t+"&format=ajax";
1$.ajax({url:s,type:"GET",dataType:"html",success:function(a){if(a.indexOf("<!doctype html>")>-1)console.error("Content asset not found: "+t),console.error(s);else{let c='<div class="content-asset" data-content-asset="'+t+`"> 2 3 `,d=a.indexOf(c);if(d>-1)d=d+c.length;else if(d==-1){let u='<div class="content-asset" data-content-asset="'+t+`">\r 4 \r 5 `;d=a.indexOf(u),d>-1&&(d=d+u.length)}let l=a.indexOf(` 6 7 </div> 8 <!-- End content-asset -->`);l==-1&&(l=a.indexOf(`\r 9 \r 10 </div>\r 11 <!-- End content-asset -->`)),l>-1&&(l=l-d),d==-1||l==-1?(console.error("Content asset could not be extracted. The rendering template may have changed"),console.error(s)):(a=a.substr(d,l),n(a))}},error:function(a,c){console.error("Content asset could not be loaded:"),console.error(s),e!=null&&typeof(e=="function")&&e(a)},complete:function(a,c){}})},insertAsset(t,e,n){if(typeof t!="object")return console.error("$(targetElement) is not a valid target element (DOM Object)"),!1;this.getAssetAsync(n,()=>{console.error(`Failed to load asset: ${n}`)},o=>{let r=document.createElement("div");r.classList.add("content-asset"),r.setAttribute("data-content-asset",n),t.insertAdjacentElement(e,r),$(r).html(o)})},replaceWithAsset(t,e,n=!0){t==null||typeof t!="object"||t.length==0?console.error("Element not found"):this.getAssetAsync(e,()=>{console.error(`Failed to load asset: ${e}`)},o=>{n?t.replaceWith(o):t.replaceWith($.parseHTML(o))})},replaceChildrenWithAsset(t,e,n=!0){t==null||typeof t!="object"||t.length==0?console.error("Element not found"):this.getAssetAsync(e,()=>{console.error(`Failed to load asset: ${e}`)},o=>{n?t.html(o):t.html($.parseHTML(o))})},createLightbox(){let t=$("body"),e=$('<div class="fed-bg-overlay"></div>'),n=$('<div class="fed-lightbox"></div>');e.append(n),t.append(e),t.css("overflow","hidden");let o=!1;return e.on("mousedown",function(r){o=!0}),e.on("mouseup",function(r){o&&(t.css("overflow",""),e.remove())}),n.on("click mousedown",function(r){r.stopPropagation()}),n},createSideslide(){return this.createLightbox().removeClass("fed-lightbox").addClass("fed-sideslide")},lightbox(t,e){let n=this.createLightbox(),o=$("<div></div>");n.append(o),this.getAssetAsync(t,r,function(i){o.replaceWith(i),r()});function r(){n.addClass("open"),e(n)}},sideslide(t,e){let n=this.createSideslide(),o=$("<div></div>");n.append(o),this.getAssetAsync(t,r,function(i){o.replaceWith(i),r()});function r(){n.addClass("open"),e(n)}},scrollToElement(t,e=1e3){if(typeof t!="object")return!1;var n=$(t);event.preventDefault(),$("html, body").animate({scrollTop:n.offset().top},e,()=>{if(n.focus(),n.is(":focus"))return!1;n.attr("tabindex","-1"),n.focus()})},formatPhoneListener(t){let e=t.target.value.replace(/\D/g,"").substring(0,10);if(t.key.length!==1)return;if(isNaN(parseInt(t.key))||e.length===10){t.preventDefault();return}let n=e.substring(0,3),o=e.substring(3,6),r=e.substring(6,10);e.length>6?t.target.value=`(${n}) ${o}-${r}`:e.length===6?t.target.value=`(${n}) ${o}-`:e.length===3&&(t.target.value=`(${n}) `)},relativeFontSize(t){let{element:e,fontSize:n,breakpoint:o}=t,{mobile:r,desktop:i}=t.widths,s=()=>{if(window.innerWidth>=o){e.style.fontSize=e.offsetWidth/(i/n)+"px";return}e.style.fontSize=e.offsetWidth/(r/n)+"px"};window.addEventListener("resize",s),s()},reCaptchaRender(t){if(typeof grecaptcha==null)return console.error("Google reCAPTCHA is not available."),!1;try{grecaptcha.render(t,{sitekey:"6LfEEdAZAAAAAFkQnHboH4NGsRUUJAwLD4YtXoM2"}),console.log("Google reCAPTCHA has rendered properly for element with ID: "+t)}catch(e){console.log("Google reCAPTCHA has already been rendered for element with ID: "+t)}},humanKindEventListeners(){let t=document.querySelectorAll('.hk-external-entry-point,[href="#/hk-entry-widget-open"]');t.forEach(n=>{n.style.pointerEvents="none"});function e(){let n=document.getElementById("hk-entry-widget");n?t.forEach(o=>{let r=o.id||o.text||o.innerHTML;o.addEventListener("click",()=>{n.dispatchEvent(new CustomEvent("hk-entry-widget-open",{detail:r}))}),o.style.pointerEvents="auto"}):setTimeout(e,1e3)}return e(),!0},isNumberOdd(t){return t%2},populateCatSlider:function(t){return y(this,null,function*(){function e(o,r){return o?`${o.split("?")[0]}${r}`:""}function n(o,r){var d,f,l,u,p;let i=(d=o.querySelector(".name-link"))==null?void 0:d.textContent,s=(f=o.querySelector(".thumb-link"))==null?void 0:f.getAttribute("href"),a=((l=o.querySelector(".product-sales-price"))==null?void 0:l.innerHTML)||((u=o.querySelector(".product-pricing"))==null?void 0:u.innerHTML),c=e((p=o.querySelector(".thumb-link img"))==null?void 0:p.getAttribute("src"),r);if(!i||!s||!a||!c)throw new Error("Failed to retrieve product data");return{productName:i,productLink:s,productPrice:a,rawImgPath:c}}try{let o=document.querySelector(t.target);if(!o)throw new Error(`Could not find element with selector: ${t.target}`);let r=o.querySelector(".product-container");t.sliderLib==="swiper"&&(o.classList.add("swiper"),r.classList.add("swiper-wrapper"));let i=o.dataset.products,s=yield fetch(i);if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);let a=yield s.text(),f=new DOMParser().parseFromString(a,"text/html").querySelectorAll(".search-result-items .grid-tile .product-tile"),l=document.createDocumentFragment();f.forEach((p,m)=>{if(!(m>=t.maxProducts))try{let{productName:g,productLink:w,productPrice:b,rawImgPath:v}=n(p,t.imgParams),h=document.createElement("div");
11h.className=t.slideClass,h.innerHTML=` 12 <a href="${w}" class="product-card"> 13 <picture> 14 <img src="${v}" alt="${g}"> 15 </picture> 16 <footer> 17 <span class="product-name">${g}</span> 18 <span class="product-price">${b}</span> 19 </footer> 20 </a>`,l.appendChild(h)}catch(g){console.error(`Failed to process product at index ${m}: ${g}`)}}),r.appendChild(l);let u=document.querySelector(".dynamic-loading-icon");u&&(u.style.display="none");try{t.initScript(o)}catch(p){console.error(`Failed to initialize slider: ${p}`)}}catch(o){console.error(`Failed to populate slider: ${o}`)}})},setResponsiveVideoSources:function(){document.addEventListener("DOMContentLoaded",()=>{let t="(max-width: 640px)",e=document.querySelectorAll("video[data-responsive]"),n=window.matchMedia(t);o(),n.addEventListener("change",o);function o(){let r=n.matches?"sm":"lg";e.forEach(i=>{i.setAttribute("poster",i.getAttribute(`data-poster-${r}`)),i.setAttribute("src",i.getAttribute(`data-src-${r}`))})}})},setResponsivePosterSources:function(){document.addEventListener("DOMContentLoaded",()=>{let t="(max-width: 640px)",e=document.querySelectorAll("video[data-responsive]"),n=window.matchMedia(t);o(),n.addEventListener("change",o);function o(){let r=n.matches?"sm":"lg";e.forEach(i=>{i.setAttribute("poster",i.getAttribute(`data-poster-${r}`))})}})}};window.fedutils={force_drop_open:function(t){if($("#FEDNAV-styles").length===0){let r="";r+="#navigation #FEDNAV-active-parent > .level-1 a { outline: solid 1px red; }",r+="#navigation #FEDNAV-active-drop{ left: 5px !important; margin-left: 4px !important; width: 912px !important; display: block !important; }",r+="#navigation #FEDNAV-drop-background { display: block !important; min-height: 500px !important; }",$("<style id='FEDNAV-styles'>"+r+"</style>").appendTo("body")}t>0&&t--;let e=$("#navigation ul.level-1 > li").eq(t),n=$("div.level-2",e),o=$("#navigation .submenu-background");$("#navigation [id^=FEDNAV]").removeAttr("id"),e.attr("id","FEDNAV-active-parent"),n.attr("id","FEDNAV-active-drop"),o.attr("id","FEDNAV-drop-background"),$(".menu-wrapper",n).addClass("adjust-menu-column")}};$(function(){fedlib.getCurrentPageName()=="checkout"&&$(".desktop-promotions").length&&$(".desktop-promotions").css("display","none"),fedlib.identifyAllPromoParents();let t=$(".desktop-feedback-icon");if(t.length>0){let e=$(".desktop-tab-container"),n=e.length>0?e.position().top:0,o=t.position().top,i=(n+o+45).toString()+"px";$("body").on("click",".desktop-feedback-icon",function(){let s=$("#_hj_feedback_container");s.find("[class$='__slideInRight']").length?s.find("[class$='__closeButton']").trigger("click"):s.find("button[class$='__label']").trigger("click")})}$(".helper-dropdown-text").off("click"),$(".helper-dropdown-feedback-link").on("click",function(){$(".desktop-feedback-icon").trigger("click")})});})(); 21//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlZC1saWIuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIndpbmRvdy5mZWRsaWIgPSB7XG4gIC8qKioqKioqKioqKlxuICAgKiB1c2VkIGxpa2UgdGhpczpcbiAgICogZmVkbGliLndoZW4oXCIuY2xhc3NuYW1lXCIsIGZ1bmN0aW9uICgpIHtcbiAgICogICAvL2RvIHNvbWV0aGluZy4uLlxuICB9LCAxMDApO1xuICAqKioqKioqKioqL1xuICB3aGVuOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPVxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiA1MDtcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIC8vIElmIGVsZW1lbnQgZm91bmQsIGNhbGwgY2FsbGJhY2tcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoKSByZXR1cm4gY2FsbGJhY2soZWxlbWVudHMpO1xuICAgIC8vIElmIGVsZW1lbnQgbm90IGZvdW5kIGJ5IGRvbSByZWFkeSwgZXhpdFxuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJldHVybjtcbiAgICAvLyBFbHNlLCB0cnkgYWdhaW5cbiAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZmVkbGliLndoZW4oc2VsZWN0b3IsIGNhbGxiYWNrLCBpbnRlcnZhbCk7XG4gICAgfTtcbiAgICByZXR1cm4gc2V0VGltZW91dChuZXh0LCBpbnRlcnZhbCk7XG4gIH0sXG5cbiAgcG9sbEZvckRhdGFMYXllcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPVxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA1MDtcbiAgICBpZiAoIXdpbmRvdy5kYXRhTGF5ZXJbMF0gJiYgdHlwZW9mIHdpbmRvdy5kYXRhTGF5ZXJbMF0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmVkbGliLnBvbGxGb3JEYXRhTGF5ZXIoY2FsbGJhY2ssIGludGVydmFsKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gc2V0VGltZW91dChuZXh0LCBpbnRlcnZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXI7XG4gICAgICBjYWxsYmFjayhkYXRhTGF5ZXIpO1xuICAgIH1cbiAgfSxcblxuICBwb2xsRm9yRGF0YUxheWVyS2V5OiBmdW5jdGlvbiAoa2V5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGludGVydmFsID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogNTA7XG4gICAgbGV0IHJldCA9IG5ldyBTdHJpbmcoKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5kYXRhTGF5ZXIgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgcmV0ID0gdGhpcy5maW5kSW5EYXRhTGF5ZXIoa2V5KTtcbiAgICB9XG4gICAgaWYgKHJldCAhPSBcIlwiIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICBjYWxsYmFjayhyZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmZWRsaWIucG9sbEZvckRhdGFMYXllcktleShrZXksIGNhbGxiYWNrLCBpbnRlcnZhbCk7XG4gICAgICB9O1xuICAgICAgc2V0VGltZW91dChuZXh0LCBpbnRlcnZhbCk7XG4gICAgfVxuICB9LFxuXG4gIHBvbGxGb3JBcHA6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNvbnN0IGludGVydmFsID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogNTA7XG4gICAgaWYgKCF3aW5kb3cuYXBwLnV0aWwgJiYgdHlwZW9mIHdpbmRvdy5hcHAudXRpbCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmZWRsaWIucG9sbEZvckFwcChjYWxsYmFjaywgaW50ZXJ2YWwpO1xuICAgICAgfTtcbiAgICAgIHJldHVybi
21BzZXRUaW1lb3V0KG5leHQsIGludGVydmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBwID0gd2luZG93LmFwcDtcbiAgICAgIGNhbGxiYWNrKGFwcCk7XG4gICAgfVxuICB9LFxuXG4gIHBvbGxGb3JKcXVlcnk6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNvbnN0IGludGVydmFsID1cbiAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogNTA7XG4gICAgaWYgKFxuICAgICAgIXdpbmRvdy4kIHx8XG4gICAgICB0eXBlb2Ygd2luZG93LiQgIT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgIXdpbmRvdy4kLmZuIHx8XG4gICAgICB0eXBlb2Ygd2luZG93LiQuZm4uYWZ0ZXIgIT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgY29uc3QgbmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmVkbGliLnBvbGxGb3JKcXVlcnkoY2FsbGJhY2ssIGludGVydmFsKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gc2V0VGltZW91dChuZXh0LCBpbnRlcnZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmluZSBqUXVlcnkgd2hlbiBmb3VuZFxuICAgICAgY29uc3QgJCA9IHdpbmRvdy4kO1xuICAgICAgLy8gRWxzZSBydW4gZXhwXG4gICAgICBjYWxsYmFjaygkKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVhZENvb2tpZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBjb25zdCBuYW1lRVEgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyBcIj1cIjtcbiAgICBjb25zdCBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gXCIgXCIpIHtcbiAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsIGMubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIHdyaXRlQ29va2llOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRheXMpIHtcbiAgICBsZXQgZXhwaXJlcztcblxuICAgIGlmIChkYXlzKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICAgIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9HTVRTdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwaXJlcyA9IFwiXCI7XG4gICAgfVxuICAgIGRvY3VtZW50LmNvb2tpZSA9XG4gICAgICBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgK1xuICAgICAgXCI9XCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSArXG4gICAgICBleHBpcmVzICtcbiAgICAgIFwiOyBwYXRoPS9cIjtcbiAgfSxcblxuICBmaW5kSW5EYXRhTGF5ZXI6IGZ1bmN0aW9uIChfa2V5KSB7XG4gICAgbGV0IHJldCA9IG5ldyBTdHJpbmcoKTtcbiAgICBmb3IgKGxldCBlbGVtZW50IGluIHdpbmRvdy5kYXRhTGF5ZXIpIHtcbiAgICAgIGlmICh3aW5kb3cuZGF0YUxheWVyW2VsZW1lbnRdLmhhc093blByb3BlcnR5KF9rZXkpKSB7XG4gICAgICAgIHJldCA9IHdpbmRvdy5kYXRhTGF5ZXJbZWxlbWVudF1bX2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIGlzRW1haWw6IGZ1bmN0aW9uIChlbWFpbCkge1xuICAgIGNvbnN0IHJlID0gL15bXFx3LiUrXFwtXStAW1xcdy5cXC1dK1xcLltcXHddezIsNn0kLztcbiAgICByZXR1cm4gcmUudGVzdChlbWFpbCk7XG4gIH0sXG5cbiAgZ2V0UGFnZU5hbWU6IGZ1bmN0aW9uICh1cmkpIHtcbiAgICBsZXQgcGFnZU5hbWUgPSBcIlwiO1xuXG4gICAgLy8gVGFrZXMgVVJJIGFuIGRlbGltaW5hdG9yIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGl0ZW1zIHNwbGl0IGF0IHRoZSBkZWxpbVxuICAgIGNvbnN0IHNwbGl0VXJpID0gZnVuY3Rpb24gKHVyaSwgZGVsaW0pIHtcbiAgICAgIGlmICh0eXBlb2YgZGVsaW0gIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZGVsaW0udG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cmkucGF0aG5hbWUuc3BsaXQoZGVsaW0pO1xuICAgIH07XG5cbiAgICBjb25zdCBleHRyYWN0VXJpID0gZnVuY3Rpb24gKHVyaUFycmF5KSB7XG4gICAgICBsZXQgcGFnZUlEID0gdW5kZWZpbmVkO1xuICAgICAgbGV0IGxhc3RJbmRleCA9IHVyaUFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICBpZiAodXJpQXJyYXlbbGFzdEluZGV4XSAhPT0gXCJcIikge1xuICAgICAgICBwYWdlSUQgPSB1cmlBcnJheVtsYXN0SW5kZXhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnZUlEID0gdXJpQXJyYXlbbGFzdEluZGV4IC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFnZUlEO1xuICAgIH07XG5cbiAgICBwYWdlTmFtZSA9IGV4dHJhY3RVcmkoc3BsaXRVcmkodXJpLCBcIi9cIikpO1xuXG4gICAgcmV0dXJuIHBhZ2VOYW1lO1xuICB9LFxuXG4gIGdldEN1cnJlbnRQYWdlTmFtZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VOYW1lKHdpbmRvdy5sb2NhdGlvbik7XG4gIH0sXG5cbiAgZ2V0Q3VycmVudFBhZ2VUeXBlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEluRGF0YUxheWVyKFwicGFnZV90eXBlXCIpO1xuICB9LFxuXG4gIGdldFVybFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHVybCkge1xuICAgIC8vIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGdldCBpbmRpdmlkdWFsIHBhcmFtZXRlciB2YWx1ZXM6XG4gICAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgXCJwYWdlLmh0bWw/cG9zdD0xMjM0JmFjdGlvbj1lZGl0XCI6XG4gICAgLy8gLSBnZXRVcmxQYXJhbWV0ZXIoJ3Bvc3QnKTsgLy8gXCIxMjM0XCJcbiAgICAvLyAtIGdldFVybFBhcmFtZXRlcignYWN0aW9uJyk7IC8vIFwiZWRpdFwiXG5cbiAgICAvLyBJZiBhIFVSTCBpcyBwYXNzZWQgdXNlIHRoYXQsIG90aGVyd2lzZSB1c2UgY3VycmVudCBwYWdlXG4gICAgcGFyYW1zID1cbiAgICAgIHR5cGVvZiB1cmwgPT0gXCJ1bmRlZmluZWRcIiA/IGxvY2F0aW9uLnNlYXJjaCA6IFwiP1wiICsgdXJsLnNwbGl0KFwiP1wiKVsxXTtcblxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcXFtdLywgXCJcXFxcW1wiKS5yZXBsYWNlKC9bXFxdXS8sIFwiXFxcXF1cIik7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiW1xcXFw/Jl1cIiArIG5hbWUgKyBcIj0oW14mI10qKVwiKTtcbiAgICBjb25zdCByZXN1bHRzID0gcmVnZXguZXhlYyhwYXJhbXMpO1xuICAgIHJldHVybi
21ByZXN1bHRzID09PSBudWxsXG4gICAgICA/IFwiXCJcbiAgICAgIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdHNbMV0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKSk7XG4gIH0sXG5cbiAgYXBwbHlDb3Vwb25WMTogZnVuY3Rpb24gKF9saWJyYXJ5LCBfY291cG9uQ29kZSwgX2NiKSB7XG4gICAgJC5nZXRKU09OKFxuICAgICAgXCIvb24vZGVtYW5kd2FyZS5zdG9yZS9TaXRlcy1cIiArXG4gICAgICAgIF9saWJyYXJ5ICtcbiAgICAgICAgXCItU2l0ZS9kZWZhdWx0L0NhcnQtQWRkQ291cG9uP2NvdXBvbkNvZGU9XCIgK1xuICAgICAgICBfY291cG9uQ29kZSArXG4gICAgICAgIFwiJmZvcm1hdD1hamF4XCIsXG4gICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAodHlwZW9mIF9jYiA9PT0gXCJmdW5jdGlvblwiKSBfY2IoZSk7XG4gICAgICB9LFxuICAgICk7XG4gIH0sXG4gIC8qIEVYQU1QTEUgVVNBR0VcbiAgY29uc3QgbGlicmFyeSA9IFwibWVycmVsbF91c1wiO1xuICBjb25zdCBjb3Vwb25Db2RlID0gXCIxMjM0LWhhcHB5LWNvZGVcIlxuICBmZWRsaWIuYXBwbHlDb3Vwb25WMShsaWJyYXJ5LCBjb3Vwb25Db2RlLFxuICAgIGZ1bmN0aW9uIHByb21vQ2FsbGJhY2soZGF0YSkge1xuICAgICAgaWYgKGRhdGEuc3VjY2VzcyA9PSB0cnVlKSB7XG4gICAgICAgIGFsZXJ0KFwiU3VjY2VzcyEhIVwiKTtcbiAgICAgICAgaWYgKGZlZGxpYi5nZXRDdXJyZW50UGFnZU5hbWUoKSA9PSBcImNhcnRcIikge1xuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBkYXRhLm1lc3NhZ2U7XG4gICAgICAgIGFsZXJ0KGVyck1zZyk7XG4gICAgICB9XG4gICAgfVxuICApO1xuICAqL1xuXG4gIGlkZW50aWZ5UHJvbW9QYXJlbnQ6IGZ1bmN0aW9uIChwcm9tb0lEKSB7XG4gICAgLy8gcHJvbW9JRCBpcyBIVE1MIElEIG9mIGVsZW1lbnQgKG5vIGxlYWRpbmcgaGFzaC9wb3VuZClcbiAgICBjb25zdCAkcHJvbW8gPSAkKFwiI1wiICsgcHJvbW9JRCk7XG4gICAgJHByb21vLmNsb3Nlc3QoXCIucHJvbW90aW9uLWl0ZW1cIikuYXR0cihcImRhdGEtcHJvbW8td3JhcHBlclwiLCBwcm9tb0lEKTtcbiAgfSxcblxuICBpZGVudGlmeUFsbFByb21vUGFyZW50czogZnVuY3Rpb24gKCkge1xuICAgIC8vIEF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlcyBwYXJlbnQgd3JhcHBlcnMgdG8gZW5jbG9zZWQgcHJvbW9zIHNvIHN0eWxlc1xuICAgIC8vIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgaW5mbyBiYXJzIGFzIG5lZWRlZFxuICAgIGNvbnN0ICRwcm9tb3MgPSAkKFwiLnByb21vdGlvbi1pdGVtXCIpO1xuICAgIGlmICgkcHJvbW9zLmxlbmd0aCA+IDApIHtcbiAgICAgICRwcm9tb3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0ICRwcm9tbyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IHByb21vSWQgPSAkKFwiW2RhdGEtY29udGVudC1hc3NldF1cIiwgJHByb21vKS5hdHRyKFxuICAgICAgICAgIFwiZGF0YS1jb250ZW50LWFzc2V0XCIsXG4gICAgICAgICk7XG4gICAgICAgICRwcm9tby5hdHRyKFwiZGF0YS1wYXJlbnQtb2ZcIiwgcHJvbW9JZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgbW9kYWxpemU6IGZ1bmN0aW9uIChteURpYWxvZykge1xuICAgIGNvbnN0ICRmaXJzdEVsZSA9ICQobXlEaWFsb2cpLmZpcnN0KCk7XG4gICAgJGZpcnN0RWxlLmRpYWxvZyh7XG4gICAgICByZXNpemFibGU6IGZhbHNlLFxuICAgICAgbW9kYWw6IHRydWUsXG4gICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgd2lkdGg6IDUwMCxcbiAgICAgIG9wZW46IGZ1bmN0aW9uIChldmVudCwgdWkpIHtcbiAgICAgICAgJChcIi51aS13aWRnZXQtb3ZlcmxheVwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkZmlyc3RFbGUuZGlhbG9nKFwiY2xvc2VcIik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSxcblxuICBpc0NvdXBvbkFwcGxpZWQ6IGZ1bmN0aW9uIChfY291cG9uQ29kZSkge1xuICAgIGxldCByZXQgPSBmYWxzZTtcbiAgICBjb25zdCBjb3Vwb25BY3Rpb24gPSAkKFwiLnByb21vdGlvbi1pdGVtIC5hZGQtY291cG9uXCIpO1xuICAgIGNvbnN0IGNvdXBvbiA9IHtcbiAgICAgIGljb246IG51bGwsXG4gICAgICBwb3B1cDogbnVsbCxcbiAgICAgIGNvdXBvbkNvZGU6IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCBjb3Vwb25BcnJheSA9IG5ldyBBcnJheSgpO1xuICAgIGNvdXBvbkFjdGlvbi5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG15SWNvbiA9IGNvdXBvbkFjdGlvbi5maW5kKFwiLmluZm8taWNvblwiKTtcbiAgICAgIGNvbnN0IG15UG9wcHVwID0gY291cG9uQWN0aW9uLmZpbmQoXCIuaW5mby1wb3BwdXBcIik7XG4gICAgICBjb25zdCBteUNvdXBvbkNvZGUgPSBjb3Vwb25BY3Rpb24uZmluZChcIi5pbmZvLWNvZGVcIikudGV4dCgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IG15Q291cG9uID0gT2JqZWN0LmNyZWF0ZShjb3Vwb24pO1xuICAgICAgbXlDb3Vwb24uaWNvbiA9IG15SWNvbjtcbiAgICAgIG15Q291cG9uLnBvcHVwID0gbXlQb3BwdXA7XG4gICAgICBteUNvdXBvbi5jb3Vwb25Db2RlID0gbXlDb3Vwb25Db2RlO1xuICAgICAgY291cG9uQXJyYXkucHVzaChteUNvdXBvbik7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coY291cG9uQXJyYXkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3Vwb25BcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBjb3Vwb25BcnJheVtpXS5jb3Vwb25Db2RlID09IF9jb3Vwb25Db2RlLnRvVXBwZXJDYXNlKCkgJiZcbiAgICAgICAgY291cG9uQXJyYXlbaV0uaWNvbi5oYXNDbGFzcyhcImFkZGVkXCIpXG4gICAgICApIHtcbiAgICAgICAgcmV0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBjaGF0T3BlbjogZnVuY3Rpb24gKCkge1xuICAgICQoXCIuaGVscGVyLWRyb3Bkb3duLWNoYXQtbGlua1wiKVswXS5jbGljaygpO1xuICB9LFxuXG4gIElzU3RhZ2luZzogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybi
21Bkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gXCJzdGFnaW5nLW5hLXd3d2luYy5kZW1hbmR3YXJlLm5ldFwiO1xuICB9LFxuXG4gIElzRGV2ZWxvcG1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUgPT09IFwiZGV2ZWxvcG1lbnQtbmEtd3d3aW5jLmRlbWFuZHdhcmUubmV0XCJcbiAgICApO1xuICB9LFxuXG4gIG9wZW5NaW5pQ2FydDogZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwibWluaUNhcnQ6YWRkLXRvLWNhcnRcIikpO1xuICB9LFxuXG4gIHNlbnRlbmNlQ2FzZTogZnVuY3Rpb24gKF9zdHIpIHtcbiAgICByZXR1cm4gX3N0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIF9zdHIuc2xpY2UoMSk7XG4gIH0sXG5cbiAgdGl0bGVDYXNlOiBmdW5jdGlvbiAoX3N0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFx3XFxTKi9nLCBmdW5jdGlvbiAodHh0KSB7XG4gICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qXG4gIEZpbmQgYW5kIGNoYW5nZSBhbGwgbGlua3MgZm9yIGN1cnJlbnQgY2F0ZWdvcnkgdGhhdCBoYXZlIGEgY2F0ZWdvcnktc3BlY2lmaWMgVVJMXG4gIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY2F0ZWdvcnksIG9yIHRoZSBob21lIHBhZ2UuXG4gICovXG4gIGNhdGVnb3J5U3BlY2lmaWNMaW5rczogZnVuY3Rpb24gKCkge1xuICAgIC8vIEdldCBjYXRlZ29yeSBvZiBjdXJyZW50IHBhZ2UgZnJvbSBib2R5W2RhdGEtY2F0ZWdvcnktaWRdIChpZiB0aGlzIGlzbid0IHRoZSBob21lIHBhZ2UpXG4gICAgY29uc3QgY3VycmVudENhdCA9XG4gICAgICAkKFwiLnB0X3N0b3JlZnJvbnRcIikubGVuZ3RoID4gMFxuICAgICAgICA/IFwiaG9tZVwiXG4gICAgICAgIDogJChcImJvZHlcIikuYXR0cihcImRhdGEtY2F0ZWdvcnktaWRcIik7XG5cbiAgICAvLyBGaW5kIGFsbCBsaW5rcyB3aXRoIGFuIGF0dHIgb2YgZGF0YS1ocmVmLWN1cnJlbnRDYXRcbiAgICBjb25zdCAkY3VycmVudENhdExpbmtzID0gJChcIltkYXRhLWhyZWYtXCIgKyBjdXJyZW50Q2F0ICsgXCJdXCIpO1xuXG4gICAgJGN1cnJlbnRDYXRMaW5rcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICRsaW5rID0gJCh0aGlzKTtcblxuICAgICAgLy8gUmVwbGFjZSBocmVmIHdpdGggY2F0ZWdvcnktc3BlY2lmaWMgbGlua1xuICAgICAgJGxpbmsuYXR0cihcImhyZWZcIiwgJGxpbmsuYXR0cihcImRhdGEtaHJlZi1cIiArIGN1cnJlbnRDYXQpKTtcblxuICAgICAgLy8gSWYgdGhlcmUncyBhbHNvIGNhdC1zcGVjaWZpYyB0ZXh0IGZvciB0aGUgY2F0LXNwZWNpZmljIGxpbmsuLi5cbiAgICAgIGlmICgkbGluay5maWx0ZXIoXCJbZGF0YS10ZXh0LVwiICsgY3VycmVudENhdCArIFwiXVwiKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIC4uLnRoZW4gcmVwbGFjZSB0aGF0IHRvb1xuICAgICAgICAkbGluay50ZXh0KCRsaW5rLmF0dHIoXCJkYXRhLXRleHQtXCIgKyBjdXJyZW50Q2F0KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgLypcbiAgRmluZCBhbmQgY2hhbmdlIGFsbCBpbWcvc3JjIGFuZCBzb3VyY2Uvc3Jjc2V0IGZvciBjdXJyZW50IGNhdGVnb3J5IHRoYXQgaGF2ZSBhIGNhdGVnb3J5LXNwZWNpZmljIHZhbHVlXG4gIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY2F0ZWdvcnksIG9yIHRoZSBob21lIHBhZ2UuXG4gICovXG4gIGNhdGVnb3J5U3BlY2lmaWNJbWFnZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBHZXQgY2F0ZWdvcnkgb2YgY3VycmVudCBwYWdlIGZyb20gYm9keVtkYXRhLWNhdGVnb3J5LWlkXSAoaWYgdGhpcyBpc24ndCB0aGUgaG9tZSBwYWdlKVxuICAgIGNvbnN0IGN1cnJlbnRDYXQgPVxuICAgICAgJChcIi5wdF9zdG9yZWZyb250XCIpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBcImhvbWVcIlxuICAgICAgICA6ICQoXCJib2R5XCIpLmF0dHIoXCJkYXRhLWNhdGVnb3J5LWlkXCIpO1xuXG4gICAgLy8gRmluZCBhbGwgaW1nIGVsZW1lbnRzIHdpdGggYW4gYXR0ciBvZiBkYXRhLXNyYy1jdXJyZW50Q2F0XG4gICAgY29uc3QgJGN1cnJlbnRDYXRJbWdzID0gJChcImltZ1tkYXRhLXNyYy1cIiArIGN1cnJlbnRDYXQgKyBcIl1cIik7XG5cbiAgICAkY3VycmVudENhdEltZ3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAkaW1nID0gJCh0aGlzKTtcbiAgICAgIC8vIFJlcGxhY2UgaW1nIHNyYyB3aXRoIGNhdGVnb3J5LXNwZWNpZmljIHZhbHVlXG4gICAgICAkaW1nLmF0dHIoXCJzcmNcIiwgJGltZy5hdHRyKFwiZGF0YS1zcmMtXCIgKyBjdXJyZW50Q2F0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaW5kIGFsbCBzb3VyY2UgZWxlbWVudHMgd2l0aCBhbiBhdHRyIG9mIGRhdGEtc3Jjc2V0LWN1cnJlbnRDYXRcbiAgICBjb25zdCAkY3VycmVudENhdFNvdXJjZXMgPSAkKFwic291cmNlW2RhdGEtc3Jjc2V0LVwiICsgY3VycmVudENhdCArIFwiXVwiKTtcblxuICAgICRjdXJyZW50Q2F0U291cmNlcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICRzb3VyY2UgPSAkKHRoaXMpO1xuICAgICAgLy8gUmVwbGFjZSBzb3VyY2Ugc3Jjc2V0IHdpdGggY2F0ZWdvcnktc3BlY2lmaWMgdmFsdWVcbiAgICAgICRzb3VyY2UuYXR0cihcInNyY3NldFwiLCAkc291cmNlLmF0dHIoXCJkYXRhLXNyY3NldC1cIiArIGN1cnJlbnRDYXQpKTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBwYWNrIEFzc2V0cyB1c2VkIHByaW9yIHRvIDIwMjMwNzEwIHRvIG1vdmUgY29udGVudCBhc3NldHMgZnJvbSB0aGUgc2FtZSBzbG90IGludG8gYSBwYXJlbnQgY29udGFpbmVyXG4gIC8vIE1vcmUgcGVyZm9ybWFudCAobm9uLUpTKSBvcHRpb24gYmVpbmcgZW1wbG95ZWQgbm93LCBidXQgdGhpcyByZW1haW5zIGluIHBsYWNlIGZvciBvbGRlciBhc3NldHNcbiAgcGFja0Fzc2V0czogZnVuY3Rpb24gKCRzb3VyY2VTZWxlY3RvciwgJHRhcmdldCkge1xuICAgICRzb3VyY2VTZWxlY3Rvci5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICQo
21dGhpcykuYXBwZW5kVG8oJHRhcmdldCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgZ2V0UHJvZHVjdElERnJvbVVSTDogZnVuY3Rpb24gKF91cmwpIHtcbiAgICBsZXQgcmV0ID0gbmV3IFN0cmluZygpO1xuICAgIHRyeSB7XG4gICAgICByZXQgPSBfdXJsLnNwbGl0KFwiL1wiKS5wb3AoKS5zcGxpdChcIi5cIilbMF07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJnZXRQcm9kdWN0SURGcm9tVVJMKCkgZXJyb3IgcGFyc2luZyB1cmw6IFwiICsgX3VybCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2V0Q3VycmVudFByb2R1Y3RJRDogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZ2V0UHJvZHVjdElERnJvbVVSTCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2V0Q3VycmVudFBhZ2VUeXBlRnJvbURhdGFMYXllcjogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZmluZEluRGF0YUxheWVyKFwicGFnZV90eXBlXCIpO1xuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2V0Q3VycmVudFByb2R1Y3RJREZyb21EYXRhTGF5ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXQgPSB0aGlzLmZpbmRJbkRhdGFMYXllcihcInByb2R1Y3RfbWFzdGVyX2lkXCIpO1xuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2V0RGF0ZVN1ZmZpeDogZnVuY3Rpb24gKG4pIHtcbiAgICBpZiAobiA+PSAxMSAmJiBuIDw9IDEzKSByZXR1cm4gXCJ0aFwiO1xuICAgIGNvbnN0IGNvbmQgPSBuICUgMTA7XG4gICAgaWYgKGNvbmQgPT09IDEpIHJldHVybiBcInN0XCI7XG4gICAgaWYgKGNvbmQgPT09IDIpIHJldHVybiBcIm5kXCI7XG4gICAgaWYgKGNvbmQgPT09IDMpIHJldHVybiBcInJkXCI7XG4gICAgcmV0dXJuIFwidGhcIjtcbiAgfSxcblxuICBnZXRBc3NldEFzeW5jKGFzc2V0SUQsIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaykge1xuICAgIGNvbnN0IHdpbmRvd0xvY2F0aW9uID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKHdpbmRvd0xvY2F0aW9uLnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgLy90YWtlIHRoZSB0cmFpbGluZyBzbGFzaCBvZmZcbiAgICAgIHdpbmRvd0xvY2F0aW9uLnBhdGhuYW1lID0gd2luZG93TG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICB3aW5kb3dMb2NhdGlvbi5wYXRobmFtZS5sZW5ndGggLSAxLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbGFzdFNsYXNoSW5kZXggPSB3aW5kb3dMb2NhdGlvbi5wYXRobmFtZS5sYXN0SW5kZXhPZihcIi9cIik7XG5cbiAgICBjb25zdCBwYWdlVHlwZSA9IHdpbmRvdy5wYWdlVHlwZSB8fCBhcHAucGFnZS50eXBlO1xuICAgIGlmIChwYWdlVHlwZSA9PT0gXCJwcm9kdWN0XCIpIHtcbiAgICAgIGNvbnN0IHVybFdpdGhQcm9kdWN0TmFtZU9ubHkgPSB3aW5kb3dMb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgbGFzdFNsYXNoSW5kZXggPSB1cmxXaXRoUHJvZHVjdE5hbWVPbmx5Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldFVybCA9XG4gICAgICB3aW5kb3dMb2NhdGlvbi5vcmlnaW4gK1xuICAgICAgd2luZG93TG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaEluZGV4KSArXG4gICAgICBcIi9jb250ZW50P2NhaWQ9XCIgK1xuICAgICAgYXNzZXRJRCArXG4gICAgICBcIiZmb3JtYXQ9YWpheFwiO1xuICAgICQuYWpheCh7XG4gICAgICB1cmw6IGFzc2V0VXJsLFxuICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgIGRhdGFUeXBlOiBcImh0bWxcIixcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmluZGV4T2YoXCI8IWRvY3R5cGUgaHRtbD5cIikgPiAtMSkge1xuICAgICAgICAgIC8vIDQwNCBwYWdlIGxvYWRlZFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb250ZW50IGFzc2V0IG5vdCBmb3VuZDogXCIgKyBhc3NldElEKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGFzc2V0VXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhc3NldFN0YXJ0U3RyID1cbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY29udGVudC1hc3NldFwiIGRhdGEtY29udGVudC1hc3NldD1cIicgK1xuICAgICAgICAgICAgYXNzZXRJRCArXG4gICAgICAgICAgICAnXCI+XFxuXFx0XFx0XFx0XFxuXFx0XFx0XFx0XFx0JztcbiAgICAgICAgICBsZXQgYXNzZXRTdGFydEluZGV4ID0gZGF0YS5pbmRleE9mKGFzc2V0U3RhcnRTdHIpO1xuICAgICAgICAgIGlmIChhc3NldFN0YXJ0SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgLy8gdXNpbmcgbGludXggbGluZSBlbmRpbmdzXG4gICAgICAgICAgICAvL2luY3JlYXNlIGJ5IFN0YXJ0SW5kZXggYW1vdW50LmBcbiAgICAgICAgICAgIGFzc2V0U3RhcnRJbmRleCA9IGFzc2V0U3RhcnRJbmRleCArIGFzc2V0U3RhcnRTdHIubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXNzZXRTdGFydEluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAvLyB0cnkgd2luZG93cyBsaW5lIGVuZGluZ3NcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0U3RhcnRTdHIyID1cbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjb250ZW50LWFzc2V0XCIgZGF0YS1jb250ZW50LWFzc2V0PVwiJyArXG4gICAgICAgICAgICAgIGFzc2V0SUQgK1xuICAgICAgICAgICAgICAnXCI+XFxyXFxuXFx0XFx0XFx0XFxyXFxuXFx0XFx0XFx0XFx0JztcbiAgICAgICAgICAgIGFzc2V0U3RhcnRJbmRleCA9IGRhdGEuaW5kZXhPZihhc3NldFN0YXJ0U3RyMik7XG4gICAgICAgICAgICBpZiAoYXNzZXRTdGFydEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgLy9pbmNyZWFzZSBieSBTdGFydEluZGV4MiBhbW91bnQuXG4gICAgICAgICAgICAgIGFzc2V0U3RhcnRJbmRleCA9IGFzc2V0U3RhcnRJbmRleCArIGFzc2V0U3RhcnRTdHIyLmxlbmd0aDtcbiAgICAgICAgICAgI
21H1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXNzZXRFbmRTdHIgPVxuICAgICAgICAgICAgXCJcXG5cXHRcXHRcXHRcXG5cXHQ8L2Rpdj5cXG5cXHQ8IS0tIEVuZCBjb250ZW50LWFzc2V0IC0tPlwiO1xuICAgICAgICAgIGxldCBhc3NldEVuZEluZGV4ID0gZGF0YS5pbmRleE9mKGFzc2V0RW5kU3RyKTtcbiAgICAgICAgICBpZiAoYXNzZXRFbmRJbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgLy8gdHJ5IHdpbmRvd3MgbGluZSBlbmRpbmdzXG4gICAgICAgICAgICBjb25zdCBhc3NldEVuZFN0cjIgPVxuICAgICAgICAgICAgICBcIlxcclxcblxcdFxcdFxcdFxcclxcblxcdDwvZGl2PlxcclxcblxcdDwhLS0gRW5kIGNvbnRlbnQtYXNzZXQgLS0+XCI7XG4gICAgICAgICAgICBhc3NldEVuZEluZGV4ID0gZGF0YS5pbmRleE9mKGFzc2V0RW5kU3RyMik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhc3NldEVuZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIC8vcmVkdWNlIGJ5IFN0YXJ0SW5kZXggYW1vdW50LlxuICAgICAgICAgICAgYXNzZXRFbmRJbmRleCA9IGFzc2V0RW5kSW5kZXggLSBhc3NldFN0YXJ0SW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhc3NldFN0YXJ0SW5kZXggPT0gLTEgfHwgYXNzZXRFbmRJbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDb250ZW50IGFzc2V0IGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQuICBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlIG1heSBoYXZlIGNoYW5nZWRcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGFzc2V0VXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9TdWNjZXNzISAgU2VuZCBiYWNrIHRoZSBhc3NldCBtYXJrdXBcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cihhc3NldFN0YXJ0SW5kZXgsIGFzc2V0RW5kSW5kZXgpO1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyLCBzdGF0dXMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkNvbnRlbnQgYXNzZXQgY291bGQgbm90IGJlIGxvYWRlZDpcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYXNzZXRVcmwpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3JDYWxsYmFjayAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2YgKGVycm9yQ2FsbGJhY2sgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBlcnJvckNhbGxiYWNrKHhocik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKHhociwgc3RhdHVzKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG5cbiAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gaW5qZWN0IGFuIGFzc2V0IGRpcmVjdGx5IGludG8gdGhlIG1hcmt1cCBvZiBhIHNpdGUgbGlrZSBzbzpcbiAgLyogRVhBTVBMRTpcbiAgICBjb25zdCBjb250YWluaW5nRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwcm9kdWN0LXRvcC1jb250ZW50Pi5yb3c+LnBkcC1ib3JkZXItcmlnaHQnKTtcbiAgICBpZiAoY29udGFpbmluZ0VsZW1lbnQpIGZlZGxpYi5pbnNlcnRBc3NldChjb250YWluaW5nRWxlbWVudCwgXCJhZnRlcmJlZ2luXCIsIFwibXljb250ZW50YXNzZXQtMjAyNjAxMDFcIik7XG4gICovXG4gIGluc2VydEFzc2V0KHRhcmdldEVsZW1lbnQsIHRhcmdldFBvc2l0aW9uLCBhc3NldElEKSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXRFbGVtZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAkKHRhcmdldEVsZW1lbnQpIGlzIG5vdCBhIHZhbGlkIHRhcmdldCBlbGVtZW50IChET00gT2JqZWN0KWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0QXNzZXRBc3luYyhhc3NldElELFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvKmVycm9yIENhbGxiYWNrKi9cbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgYXNzZXQ6ICR7YXNzZXRJRH1gKTtcbiAgICAgIH0sIChkYXRhKSA9PiB7XG4gICAgICAgIC8qc3VjY2VzcyBDYWxsYmFjayovXG4gICAgICAgIGNvbnN0IGNvbnRlbnRBc3NldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29udGVudEFzc2V0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb250ZW50LWFzc2V0Jyk7XG4gICAgICAgIGNvbnRlbnRBc3NldEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWNvbnRlbnQtYXNzZXQnLCBhc3NldElEKTtcbiAgICAgICAgdGFyZ2V0RWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQodGFyZ2V0UG9zaXRpb24sIGNvbnRlbnRBc3NldEVsZW1lbnQpO1xuICAgICAgICAkKGNvbnRlbnRBc3NldEVsZW1lbnQpLmh0bWwoZGF0YSlcbiAgICAgIH1cbiAgICApO1xuXG4gIH0sXG5cbiAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGpRdWVyeSBvYmplY3Qgd2l0aCBhIG5ldyBvbmUgY3JlYXRlZCBmcm9tIGEgY29udGVudCBhc3NldCdzIG1hcmt1cCAoaW5jbHVkaW5nIGNzcyBhbmQgc2NyaXB0cykgZmV0Y2hlZCBhc3luY3Jvbm91c2x5IGZyb20gZ2V0QXNzZXRBc3luYygpLlxuICAvKiBOb3RlOlxuICAgICR3cmFwcGVkU2V0IGlzIGEgalF1ZXJ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGEgalF1ZXJ5IHNlbGVjdG9yIGxpa2U6ICQoXCIjbXktZWxlbWVudC1pZFwiKVxuICAgIEJ5IGRlZmF1bHQgKGV4ZWN1dGVKUz10cnVlKSwgc28gc2NyaXB0cyB3aXRoaW4gdGhlIGFzc2V0IGV4ZWN1dGVcbiAgICBQYXNzIGV4ZWN1dGVKUz1mYWxzZSB0byBzdHJpcCBhbGwgc2NyaXB0cyB2aWEgJC5wYXJzZUhUTUwoKVxuICAqL1xuICByZXBsYWNlV2l0aEFzc2V0KCR3cmFwcGVkU2V0LCBhc3NldElELCBleGVjdXRlSlMgPSB0cnVlKSB7XG4gICAgaWYgKFxuICAgICAgJHdyYXBwZWRTZXQgPT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eX
21Blb2YgJHdyYXBwZWRTZXQgIT0gXCJvYmplY3RcIiB8fFxuICAgICAgJHdyYXBwZWRTZXQubGVuZ3RoID09IDBcbiAgICApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFbGVtZW50IG5vdCBmb3VuZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRBc3NldEFzeW5jKGFzc2V0SUQsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAvKmVycm9yIENhbGxiYWNrKi9cbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhc3NldDogJHthc3NldElEfWApO1xuICAgICAgICB9LCAoZGF0YSkgPT4ge1xuICAgICAgICAgIC8qc3VjY2VzcyBDYWxsYmFjayovXG4gICAgICAgICAgaWYgKGV4ZWN1dGVKUykge1xuICAgICAgICAgICAgLy8gUGFzcyByYXcgSFRNTCBzdHJpbmcgc28gc2NyaXB0cyBleGVjdXRlIG5hdHVyYWxseVxuICAgICAgICAgICAgJHdyYXBwZWRTZXQucmVwbGFjZVdpdGgoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFN0cmlwIHNjcmlwdHMgZm9yIHNhZmV0eVxuICAgICAgICAgICAgJHdyYXBwZWRTZXQucmVwbGFjZVdpdGgoJC5wYXJzZUhUTUwoZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU2FtZSBmdW5jdGlvbmFsaXR5IGFzIHRoZSBtZXRob2QgYWJvdmUsIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgY2hpbGRyZW4gb2YgdGhlIHRhcmdldCBlbGVtZW50IGFyZSByZXBsYWNlZCByYXRoZXIgdGhhbiB0aGUgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgaGVscGZ1bCB3aGVuIHN0eWxlcyBhbmQgc2NyaXB0cyBhcmUgc2libGluZ3Mgb2YgdGhlIGFzc2V0J3MgbWFya3VwLCBhbmQgbm90IGNvbnRhaW5lZCBhbGwgaW5zaWRlIG9uZSBlbGVtZW50LiAgWW91IGNhbiB0YXJnZXQgdGhlIHdyYXBwZXIgZGl2IG9mIHRoZSBhc3NldCB0byByZXBsYWNlIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0LCBsaWtlOlxuICAvKiBFWEFNUExFOlxuICAgICAgY29uc3QgcHJvZElEID0gZmVkbGliLmdldEN1cnJlbnRQcm9kdWN0SUQoKTtcbiAgICAgIGNvbnN0IGFzc2V0SUQgPSBgcGRwLWJhbm5lci0ke3Byb2RJRH1gO1xuICAgICAgY29uc3QgJHRhcmdldEVsZW1lbnQgPSAkKGBbZGF0YS1jb250ZW50LWFzc2V0PVwiJHthc3NldElEfVwiXWApO1xuICAgICAgZmVkbGliLnJlcGxhY2VDaGlsZHJlbldpdGhBc3NldCgkdGFyZ2V0RWxlbWVudCwgYXNzZXRJRCk7XG4gICovXG4gIHJlcGxhY2VDaGlsZHJlbldpdGhBc3NldCgkd3JhcHBlZFNldCwgYXNzZXRJRCwgZXhlY3V0ZUpTID0gdHJ1ZSkge1xuICBpZiAoXG4gICAgICAkd3JhcHBlZFNldCA9PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiAkd3JhcHBlZFNldCAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAkd3JhcHBlZFNldC5sZW5ndGggPT0gMFxuICAgICkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVsZW1lbnQgbm90IGZvdW5kXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldEFzc2V0QXN5bmMoYXNzZXRJRCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8qZXJyb3IgQ2FsbGJhY2sqL1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGFzc2V0OiAke2Fzc2V0SUR9YCk7XG4gICAgICAgIH0sIChkYXRhKSA9PiB7XG4gICAgICAgICAgLypzdWNjZXNzIENhbGxiYWNrKi9cbiAgICAgICAgICBpZiAoZXhlY3V0ZUpTKSB7XG4gICAgICAgICAgICAvLyBQYXNzIHJhdyBIVE1MIHN0cmluZyBzbyBzY3JpcHRzIGV4ZWN1dGUgbmF0dXJhbGx5XG4gICAgICAgICAgICAkd3JhcHBlZFNldC5odG1sKGRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTdHJpcCBzY3JpcHRzIGZvciBzYWZldHlcbiAgICAgICAgICAgICR3cmFwcGVkU2V0Lmh0bWwoJC5wYXJzZUhUTUwoZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlTGlnaHRib3goKSB7XG4gICAgY29uc3QgJGJvZHkgPSAkKFwiYm9keVwiKTtcbiAgICBjb25zdCAkYmdPdmVybGF5ID0gJCgnPGRpdiBjbGFzcz1cImZlZC1iZy1vdmVybGF5XCI+PC9kaXY+Jyk7XG4gICAgY29uc3QgJGxpZ2h0Ym94ID0gJCgnPGRpdiBjbGFzcz1cImZlZC1saWdodGJveFwiPjwvZGl2PicpO1xuICAgICRiZ092ZXJsYXkuYXBwZW5kKCRsaWdodGJveCk7XG4gICAgJGJvZHkuYXBwZW5kKCRiZ092ZXJsYXkpO1xuICAgICRib2R5LmNzcyhcIm92ZXJmbG93XCIsIFwiaGlkZGVuXCIpO1xuICAgIGxldCBpc092ZXJsYXlDbGlja2VkID0gZmFsc2U7XG4gICAgJGJnT3ZlcmxheS5vbihcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaXNPdmVybGF5Q2xpY2tlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgJGJnT3ZlcmxheS5vbihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChpc092ZXJsYXlDbGlja2VkKSB7XG4gICAgICAgICRib2R5LmNzcyhcIm92ZXJmbG93XCIsIFwiXCIpOyAvL2FsbG93IGJvZHkgdG8gYmUgc2Nyb2xsZWQgYWdhaW4uXG4gICAgICAgICRiZ092ZXJsYXkucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgJGxpZ2h0Ym94Lm9uKFwiY2xpY2sgbW91c2Vkb3duXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyAvL3RoaXMgcHJldmVudHMgdGhlICRiZ092ZXJsYXkgY2xpY2sgbGlzdGVuZXIgZGVmaW5lZCBhYm92ZSBmcm9tIGZpcmluZy5cbiAgICB9KTtcbiAgICByZXR1cm4gJGxpZ2h0Ym94O1xuICB9LFxuXG4gIGNyZWF0ZVNpZGVzbGlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMaWdodGJveCgpXG4gICAgICAucmVtb3ZlQ2xhc3MoXCJmZWQtbGlnaHRib3hcIilcbiAgICAgIC5hZGRDbGFzcyhcImZlZC1zaWRlc2xpZGVcIik7XG4gIH0sXG5cbiAgbGlnaHRib3goYXNzZXRJRCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCAkbGlnaHRib3ggPSB0aGlzLmNyZWF0ZUxpZ2h0Ym94KCk7XG4gICAgY29uc3QgJGxpZ2h0Ym94Q29udGVudCA9ICQoXCI8ZGl2PjwvZGl2PlwiKTtcbiAgICAkbGlnaHRib3guYXBwZW5kKCRsaWdodGJveENvbnRlbnQpO1xuICAgIHRoaXMuZ2V0QXNzZXRBc3luYyhhc3NldElELCBmaW5pc2hlZCwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICRsaWdodGJveENvbnRlbnQucmVwbGFjZVdpdGgoZGF0YSk7XG4gICAgICBmaW5pc2hlZCgpO1xuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGZpbmlzaGVkKCkge1xuICAgICAgJGxpZ2h0Ym94LmFkZENsYXNzKFwib3BlblwiKTtcbiAgICAgIGNhbGxiYWNrKCRsaWdodGJveCk7XG4gICAgfVxuICB9LFxuXG4gIHNpZGVzbGlkZShhc3NldElELCBjYWxsYmFjaykge1xuICAgIGNvbnN0ICRzaWRlU2xpZGUgPSB0aGlzLmNyZWF0ZVNpZGVzbGlkZSgpO1xuICAgIGNvbnN0ICRzaWRlU2xpZGVDb250ZW50ID0gJChcIjxkaXY+PC9kaXY+XCIpO1xuICAgICRzaWRlU2xpZGUuYXBwZW5kKCRzaWRlU2xpZGVDb250ZW50KTtcbiAgICB0aGlzLmdldEFzc2V0QXN5bmMoYXNzZXRJRCwgZmluaXNoZWQsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAkc2lkZVNsaWRlQ29udGVudC5yZXBsYWNlV2l0aChkYXRhKTtcbiAgICAgIGZpbmlzaGVkKCk7XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gZmluaXNoZWQoKSB7XG4gICAgICAkc2lkZVNsaWRlLmFkZENsYXNzKFwib3BlblwiKTtcbiAgICAgIGNhbGxiYWNrKCRzaWRlU2xpZGUpO1xuICAgIH1cbiAgfSxcblxuICBzY3JvbGxUb0VsZW1lbnQodGFyZ2V0RWxlbWVudCwgc2Nyb2xsU3BlZWQgPSAxMDAwKSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXRFbGVtZW50ICE9IFwib2JqZWN0XCIpIHtcbiAgICAgIHJldHVybi
21BmYWxzZTtcbiAgICB9XG4gICAgdmFyICR0YXJnZXRFbGVtZW50ID0gJCh0YXJnZXRFbGVtZW50KTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgIHNjcm9sbFRvcDogJHRhcmdldEVsZW1lbnQub2Zmc2V0KCkudG9wXG4gICAgfSwgc2Nyb2xsU3BlZWQsICgpID0+IHtcbiAgICAgIC8vIENhbGxiYWNrIGFmdGVyIGFuaW1hdGlvblxuICAgICAgLy8gU2V0IGZvY3VzIHRvIHRhcmdldEVsZW1lbnRcbiAgICAgICR0YXJnZXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICBpZiAoJHRhcmdldEVsZW1lbnQuaXMoXCI6Zm9jdXNcIikpIHsgLy8gQ2hlY2tpbmcgaWYgdGhlIHRhcmdldEVsZW1lbnQgd2FzIGZvY3VzZWRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHRhcmdldEVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAnLTEnKTsgLy8gQWRkaW5nIHRhYmluZGV4IGZvciBlbGVtZW50cyBub3QgZm9jdXNhYmxlXG4gICAgICAgICR0YXJnZXRFbGVtZW50LmZvY3VzKCk7IC8vIFNldCBmb2N1cyBhZ2FpblxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICBmb3JtYXRQaG9uZUxpc3RlbmVyKGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCBcIlwiKS5zdWJzdHJpbmcoMCwgMTApO1xuXG4gICAgaWYgKGUua2V5Lmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuXG4gICAgaWYgKGlzTmFOKHBhcnNlSW50KGUua2V5KSkgfHwgdmFsdWUubGVuZ3RoID09PSAxMCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0ID0gdmFsdWUuc3Vic3RyaW5nKDAsIDMpO1xuICAgIGNvbnN0IG1pZGRsZSA9IHZhbHVlLnN1YnN0cmluZygzLCA2KTtcbiAgICBjb25zdCBsYXN0ID0gdmFsdWUuc3Vic3RyaW5nKDYsIDEwKTtcblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPiA2KSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9IGAoJHtmaXJzdH0pICR7bWlkZGxlfS0ke2xhc3R9YDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gNikge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSBgKCR7Zmlyc3R9KSAke21pZGRsZX0tYDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMykge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSBgKCR7Zmlyc3R9KSBgO1xuICAgIH1cbiAgfSxcbiAgLy9hdXRob3IgSm9zaCBLb2xlbmtvIDIwMjItMDctMTlcbiAgLy9leGFtcGxlIHVzYWdlOiBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZmVkbGliLmZvcm1hdFBob25lTGlzdGVuZXIpXG5cbiAgcmVsYXRpdmVGb250U2l6ZShzZXR0aW5ncykge1xuICAgIGNvbnN0IHsgZWxlbWVudCwgZm9udFNpemUsIGJyZWFrcG9pbnQgfSA9IHNldHRpbmdzO1xuICAgIGNvbnN0IHsgbW9iaWxlLCBkZXNrdG9wIH0gPSBzZXR0aW5ncy53aWR0aHM7XG5cbiAgICBjb25zdCBzZXRGb250U2l6ZSA9ICgpID0+IHtcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSBicmVha3BvaW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZm9udFNpemUgPVxuICAgICAgICAgIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAoZGVza3RvcCAvIGZvbnRTaXplKSArIFwicHhcIjtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnN0eWxlLmZvbnRTaXplID0gZWxlbWVudC5vZmZzZXRXaWR0aCAvIChtb2JpbGUgLyBmb250U2l6ZSkgKyBcInB4XCI7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHNldEZvbnRTaXplKTtcblxuICAgIHNldEZvbnRTaXplKCk7XG4gIH0sXG4gIC8vIGF1dGhvciBKb3NoIEtvbGVua28gMjAyMi0wNy0yMlxuICAvLyBleGFtcGxlIHVzYWdlOlxuICAvL1xuICAvLyByZWxhdGl2ZUZvbnRTaXplKHtcbiAgLy8gICBlbGVtZW50OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd5b3VyIGVsZW1lbnQnKSwgLy8gRWxlbWVudCB5b3UnZCBsaWtlIGZvbnQgc2l6ZSByZWxhdGl2ZSAob3V0ZXJtb3N0IGVsZW1lbnQpXG4gIC8vICAgZm9udFNpemU6IDEwLCAvLyBUYXJnZXQgZm9udCBzaXplIGF0IGFzc2V0IG1heCB3aWR0aFxuICAvLyAgIGJyZWFrcG9pbnQ6IDc2OSwgLy8gRGVza3RvcCBicmVha3BvaW50XG4gIC8vICAgd2lkdGhzOiB7XG4gIC8vICAgICBtb2JpbGU6IDc2OCwgLy8gTWF4IHdpZHRoIG9mIHRoZSBhc3NldCBvbiBtb2JpbGVcbiAgLy8gICAgIGRlc2t0b3A6IDEwOTIgLy8gTWF4IHdpZHRoIG9mIGFzc2V0IG9uIGRlc2t0b3BcbiAgLy8gICB9XG4gIC8vIH0pXG5cbiAgcmVDYXB0Y2hhUmVuZGVyKHN0ckVsZW1lbnRJRCkge1xuICAgIGlmICh0eXBlb2YgZ3JlY2FwdGNoYSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJHb29nbGUgcmVDQVBUQ0hBIGlzIG5vdCBhdmFpbGFibGUuXCIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL3JlY2FwdGNoYSBpcyByZWFkeSB0byB1c2VcbiAgICB0cnkge1xuICAgICAgLy9ydW4gcmVjYXB0Y2hhIGFnYWluIGZvciB0aGlzIGVsZW1lbnQsIGJlY2F1c2UgaGUgbWF5IGhhdmUgYmVlbiBtaXNzZWQgZHVlIHRvIHdlbGNvbWUgcG9wdXAgbG9hZGluZyBsYXRlLlxuICAgICAgZ3JlY2FwdGNoYS5yZW5kZXIoc3RyRWxlbWVudElELCB7XG4gICAgICAgIHNpdGVrZXk6IFwiNkxmRUVkQVpBQUFBQUZrUW5IYm9INE5Hc1JVVUpBd0xENFl0WG9NMlwiLFxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJHb29nbGUgcmVDQVBUQ0hBIGhhcyByZW5kZXJlZCBwcm9wZXJseSBmb3IgZWxlbWVudCB3aXRoIElEOiBcIiArXG4gICAgICAgICAgc3RyRWxlbWVudElELFxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vcmVjYXB0Y2hhIGFscmVhZHkgcmVuZGVyZWQgZm9yIHRoaXMgZmVsbGEsIHNvIGRvIG5vdGhpbmcuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJHb29nbGUgcmVDQVBUQ0hBIGhhcyBhbHJlYWR5IGJlZW4gcmVuZGVyZWQgZm9yIGVsZW1lbnQgd2l0aCBJRDogXCIgK1xuICAgICAgICAgI
21HN0ckVsZW1lbnRJRCxcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIGh1bWFuS2luZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8qIFRoaXMgaXMgbWV0aG9kIHdoaWNoIHdpcmVzIHRoZSBldmVudCBsaXN0ZXJuZXJzIHdoaWNoIG9wZW4gdGhlIEh1bWFuS2luZCBzbGlkZW91dCB3aWRnZXQgKi9cbiAgICAvKiBHcmFiIGFsbCB0aGUgZWxlbWVudHMgZWl0aGVyIHdpdGggYSBjbGFzcyBcImhrLWV4dGVybmFsLWVudHJ5LXBvaW50XCIgb3Igd2l0aCBhbiBocmVmIG9mIFwiIy9oay1lbnRyeS13aWRnZXQtb3BlblwiICovXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJy5oay1leHRlcm5hbC1lbnRyeS1wb2ludCxbaHJlZj1cIiMvaGstZW50cnktd2lkZ2V0LW9wZW5cIl0nLFxuICAgICk7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhdHRhY2hIa0VudHJ5UG9pbnRFdmVudHMoKSB7XG4gICAgICBjb25zdCBoa0VudHJ5V2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoay1lbnRyeS13aWRnZXRcIik7XG4gICAgICBpZiAoaGtFbnRyeVdpZGdldCkge1xuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudElkZW50aWZpZXIgPVxuICAgICAgICAgICAgZWxlbWVudC5pZCB8fCBlbGVtZW50LnRleHQgfHwgZWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgaGtFbnRyeVdpZGdldC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJoay1lbnRyeS13aWRnZXQtb3BlblwiLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBlbGVtZW50SWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXR0YWNoSGtFbnRyeVBvaW50RXZlbnRzLCAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhdHRhY2hIa0VudHJ5UG9pbnRFdmVudHMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBpc051bWJlck9kZChudW0pIHtcbiAgICByZXR1cm4gbnVtICUgMjtcbiAgfSxcblxuICAvL3BvcHVsYXRlIHNsaWRlciBmcm9tIGV4dGVybmFsIGdhbGxlcnlcbiAgcG9wdWxhdGVDYXRTbGlkZXI6IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBmdW5jdGlvbiBjb252ZXJ0SW1hZ2VTcmMoc3JjLCBzdWZmaXgpIHtcbiAgICAgIGlmICghc3JjKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJpbW1lZFNyYyA9IHNyYy5zcGxpdChcIj9cIilbMF07XG4gICAgICByZXR1cm4gYCR7dHJpbW1lZFNyY30ke3N1ZmZpeH1gO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByb2R1Y3REYXRhKHByb2R1Y3QsIGltZ1BhcmFtcykge1xuICAgICAgY29uc3QgcHJvZHVjdE5hbWUgPSBwcm9kdWN0LnF1ZXJ5U2VsZWN0b3IoXCIubmFtZS1saW5rXCIpPy50ZXh0Q29udGVudDtcbiAgICAgIGNvbnN0IHByb2R1Y3RMaW5rID0gcHJvZHVjdFxuICAgICAgICAucXVlcnlTZWxlY3RvcihcIi50aHVtYi1saW5rXCIpXG4gICAgICAgID8uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtcbiAgICAgIGNvbnN0IHByb2R1Y3RQcmljZSA9XG4gICAgICAgIHByb2R1Y3QucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXNhbGVzLXByaWNlXCIpPy5pbm5lckhUTUwgfHxcbiAgICAgICAgcHJvZHVjdC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcHJpY2luZ1wiKT8uaW5uZXJIVE1MO1xuXG4gICAgICBjb25zdCByYXdJbWdQYXRoID0gY29udmVydEltYWdlU3JjKFxuICAgICAgICBwcm9kdWN0LnF1ZXJ5U2VsZWN0b3IoXCIudGh1bWItbGluayBpbWdcIik/LmdldEF0dHJpYnV0ZShcInNyY1wiKSxcbiAgICAgICAgaW1nUGFyYW1zLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFwcm9kdWN0TmFtZSB8fCAhcHJvZHVjdExpbmsgfHwgIXByb2R1Y3RQcmljZSB8fCAhcmF3SW1nUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmV0cmlldmUgcHJvZHVjdCBkYXRhXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBwcm9kdWN0TmFtZSwgcHJvZHVjdExpbmssIHByb2R1Y3RQcmljZSwgcmF3SW1nUGF0aCB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm9kdWN0U2Nyb2xsZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcmFtcy50YXJnZXQpO1xuXG4gICAgICBpZiAoIXByb2R1Y3RTY3JvbGxlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIGVsZW1lbnQgd2l0aCBzZWxlY3RvcjogJHtwYXJhbXMudGFyZ2V0fWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNsaWRlQ29udGFpbmVyID1cbiAgICAgICAgcHJvZHVjdFNjcm9sbGVyLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1jb250YWluZXJcIik7XG5cbiAgICAgIGlmIChwYXJhbXMuc2xpZGVyTGliID09PSBcInN3aXBlclwiKSB7XG4gICAgICAgIHByb2R1Y3RTY3JvbGxlci5jbGFzc0xpc3QuYWRkKFwic3dpcGVyXCIpO1xuICAgICAgICBzbGlkZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwic3dpcGVyLXdyYXBwZXJcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2R1Y3RPcmlnaW4gPSBwcm9kdWN0U2Nyb2xsZXIuZGF0YXNldC5wcm9kdWN0cztcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChwcm9kdWN0T3JpZ2luKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZU
21Zyb21TdHJpbmcodGV4dCwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICBjb25zdCBwcm9kdWN0cyA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBcIi5zZWFyY2gtcmVzdWx0LWl0ZW1zIC5ncmlkLXRpbGUgLnByb2R1Y3QtdGlsZVwiLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgIHByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+PSBwYXJhbXMubWF4UHJvZHVjdHMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgcHJvZHVjdE5hbWUsIHByb2R1Y3RMaW5rLCBwcm9kdWN0UHJpY2UsIHJhd0ltZ1BhdGggfSA9XG4gICAgICAgICAgICBnZXRQcm9kdWN0RGF0YShwcm9kdWN0LCBwYXJhbXMuaW1nUGFyYW1zKTtcblxuICAgICAgICAgIGNvbnN0IG5ld1NsaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICBuZXdTbGlkZS5jbGFzc05hbWUgPSBwYXJhbXMuc2xpZGVDbGFzcztcbiAgICAgICAgICBuZXdTbGlkZS5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIke3Byb2R1Y3RMaW5rfVwiIGNsYXNzPVwicHJvZHVjdC1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPHBpY3R1cmU+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtyYXdJbWdQYXRofVwiIGFsdD1cIiR7cHJvZHVjdE5hbWV9XCI+XG4gICAgICAgICAgICAgICAgPC9waWN0dXJlPlxuICAgICAgICAgICAgICAgIDxmb290ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZHVjdC1uYW1lXCI+JHtwcm9kdWN0TmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZHVjdC1wcmljZVwiPiR7cHJvZHVjdFByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgICAgICAgPC9hPmA7XG5cbiAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuZXdTbGlkZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gcHJvY2VzcyBwcm9kdWN0IGF0IGluZGV4ICR7aW5kZXh9OiAke2Vycm9yfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNsaWRlQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgICAgY29uc3QgbG9hZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5keW5hbWljLWxvYWRpbmctaWNvblwiKTtcblxuICAgICAgaWYgKGxvYWRlcikge1xuICAgICAgICBsb2FkZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBwYXJhbXMuaW5pdFNjcmlwdChwcm9kdWN0U2Nyb2xsZXIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgc2xpZGVyOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcG9wdWxhdGUgc2xpZGVyOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfSxcbiAgLy8gU2FtcGxlIHVzYWdlOlxuICAvL05vcm1hbCBpbml0IHNjcmlwdCBmb3Igc2xpZGVyIGNvbmZpZyAtIFVzZSBzd2lwZXIgb3Igc2xpY2tcbiAgLy8gZnVuY3Rpb24gc3dpcGVySW5pdFNjcmlwdChwcm9kdWN0U2Nyb2xsZXIpIHtcbiAgLy8gICBjb25zdCBocFByb2R1Y3RTd2lwZXIgPSBuZXcgU3dpcGVyKHByb2R1Y3RTY3JvbGxlciwge1xuICAvLyAgICAgc3BlZWQ6IDUwMCxcbiAgLy8gICAgIHNsaWRlc1BlclZpZXc6IDIuNSxcbiAgLy8gICAgIHNwYWNlQmV0d2VlbjogMTAsXG4gIC8vICAgICBsb29wOiB0cnVlLFxuICAvLyAgICAgYnJlYWtwb2ludHM6IHtcbiAgLy8gICAgICAgNjQxOiB7XG4gIC8vICAgICAgICAgc2xpZGVzUGVyVmlldzogMy43NSxcbiAgLy8gICAgICAgICBzcGFjZUJldHdlZW46IDMwLFxuICAvLyAgICAgICAgIG5hdmlnYXRpb246IHtcbiAgLy8gICAgICAgICAgIG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnXG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSlcbiAgLy8gfVxuXG4gIC8vIC8vb2JqZWN0IHRvIHBhc3MgdG8gcG9wdWxhdGVDYXRTbGlkZXIgZm9yIGNvbmZpZyBvcHRpb25zXG4gIC8vIGZlZGxpYi5wb3B1bGF0ZUNhdFNsaWRlcih7XG4gIC8vICAgdGFyZ2V0OiAnLmZlZC1wcm9kdWN0LXNjcm9sbGVyJywgLy9zZWxlY3RvciBmb3Igc2xpZGVyIGNvbnRhaW5lclxuICAvLyAgIG1heFByb2R1Y3RzOiAxMCwgLy9tYXggbnVtYmVyIG9mIHByb2R1Y3RzIHRvIHNob3dcbiAgLy8gICBzbGlkZXJMaWI6ICdzd2lwZXInLCAvL3N3aXBlciBvciBzbGljayBvciB3aGF0ZXZlclxuICAvLyAgIHNsaWRlQ2xhc3M6ICdzd2lwZXItc2xpZGUnLCAvL2NsYXNzIHRvIGFwcGVuZCB0byBlYWNoIHNsaWRlIGlmIG5lZWRlZFxuICAvLyAgIGltZ1BhcmFtczogJz8kZmVkLWNhdGVnb3J5LXNsaWRlciQnLCAvL3VybCBwYXJhbXMgZm9yIHNjZW5lNyBpbWFnZXNcbiAgLy8gICBpbml0U2NyaXB0OiBzd2lwZXJJbml0U2NyaXB0IC8vZnVuY3Rpb24gdG8gY2FsbCBmb3Igc3BlY2lmaWMgc2xpZGVyIGNvbmZpZ1xuICAvLyB9KVxuXG4gIC8vZW5kIGZldGNoIHByb2R1Y3RzIGZyb20gZ2FsbGVyeSBhbmQgcmV0dXJuIGEgc2xpZGVyXG5cbiAgLy8gQWRkIHJlc3BvbnNpdmUgdmlkZW8gc291cmNlcyB0byB2aWRlb3NcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHJlc3BvbnNpdmUgdmlkZW8gc291cmNlcyBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjb3JyZWN0IHZpZGVvICdzcmMnIGFuZCAncG9zdGVyJyBhdHRyaWJ1dGVzIGZvclxuICAgKiB2aWRlb3MgbWFya2VkIHdpdGggdGhlIGBkYXRhLXJlc3BvbnNpdmVgIGF0dHJpYnV0ZS4gVGhlIG1lZGlhIHF1ZXJpZXMgZGV0ZXJtaW5lXG4gICAqIHRoZSB2aWRlbyBzb3VyY2U6IHZpZGVvcyB3aWxsIGhhdmUgYC1zbWAgYXBwZW5kZWQgdG8gdGhlaXIgc291cmNlcyBmb3Igc2
211hbGxcbiAgICogc2NyZWVuIHNpemVzICg8PSA2NDBweCB3aWR0aCkgYW5kIGAtbGdgIGFwcGVuZGVkIGZvciBsYXJnZXIgc2NyZWVuIHNpemVzLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gbGlzdGVucyBmb3IgY2hhbmdlcyBpbiBzY3JlZW4gc2l6ZSBhbmQgdXBkYXRlcyB0aGUgdmlkZW9cbiAgICogc291cmNlcyBhY2NvcmRpbmdseS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHZpZGVvIHNvdXJjZVxuICAgKiBpcyBzZXJ2ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2NyZWVuIHdpZHRoLlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogQWRkIGBkYXRhLXJlc3BvbnNpdmVgIGF0dHJpYnV0ZSB0byB2aWRlbyBlbGVtZW50cyBhbmQgcHJvdmlkZSBkYXRhIGF0dHJpYnV0ZXNcbiAgICogYGRhdGEtc3JjLXNtYCwgYGRhdGEtc3JjLWxnYCwgYGRhdGEtcG9zdGVyLXNtYCwgYW5kIGBkYXRhLXBvc3Rlci1sZ2AgZm9yIHRoZVxuICAgKiByZXNwZWN0aXZlIHZpZGVvIGFuZCBwb3N0ZXIgc291cmNlcy5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogPHZpZGVvIGRhdGEtcmVzcG9uc2l2ZSBkYXRhLXNyYy1zbT1cInBhdGgvdG8vc21hbGwubXA0XCIgZGF0YS1zcmMtbGc9XCJwYXRoL3RvL2xhcmdlLm1wNFwiXG4gICAqICAgICAgICBkYXRhLXBvc3Rlci1zbT1cInBhdGgvdG8vc21hbGwtcG9zdGVyLmpwZ1wiIGRhdGEtcG9zdGVyLWxnPVwicGF0aC90by9sYXJnZS1wb3N0ZXIuanBnXCI+PC92aWRlbz5cbiAgICpcbiAgICogQWZ0ZXIgRE9NIGNvbnRlbnQgaXMgbG9hZGVkLCBjYWxsIGBzZXRSZXNwb25zaXZlVmlkZW9Tb3VyY2VzKClgIHRvIGluaXRpYWxpemUuXG4gICAqL1xuXG4gIHNldFJlc3BvbnNpdmVWaWRlb1NvdXJjZXM6IGZ1bmN0aW9uICgpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBzbWFsbE1RID0gXCIobWF4LXdpZHRoOiA2NDBweClcIjtcbiAgICAgIGNvbnN0IHJlc3BvbnNpdmVWaWRlb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBcInZpZGVvW2RhdGEtcmVzcG9uc2l2ZV1cIixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG1xID0gd2luZG93Lm1hdGNoTWVkaWEoc21hbGxNUSk7XG5cbiAgICAgIC8vIFJ1biBvbiBwYWdlIGxvYWRcbiAgICAgIHNldFZpZGVvU3JjKCk7XG5cbiAgICAgIC8vIFJ1biBvbiByZXNpemVcbiAgICAgIG1xLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgc2V0VmlkZW9TcmMpO1xuXG4gICAgICBmdW5jdGlvbiBzZXRWaWRlb1NyYygpIHtcbiAgICAgICAgY29uc3Qgc2l6ZVN1ZmZpeCA9IG1xLm1hdGNoZXMgPyBcInNtXCIgOiBcImxnXCI7XG4gICAgICAgIHJlc3BvbnNpdmVWaWRlb3MuZm9yRWFjaCgodmlkZW9FbGVtZW50KSA9PiB7XG4gICAgICAgICAgLy8gQ2hvb3NlIHNpemUgb2YgcG9zdGVyIGFuZCB2aWRlb1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBcInBvc3RlclwiLFxuICAgICAgICAgICAgdmlkZW9FbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1wb3N0ZXItJHtzaXplU3VmZml4fWApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgIFwic3JjXCIsXG4gICAgICAgICAgICB2aWRlb0VsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLXNyYy0ke3NpemVTdWZmaXh9YCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIC8vIGVuZCBhZGQgcmVzcG9uc2l2ZSB2aWRlbyBzb3VyY2VzIHRvIHZpZGVvc1xuXG4gIC8vIEFkZCByZXNwb25zaXZlIHBvc3RlciBzb3VyY2VzIHRvIHZpZGVvc1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgcmVzcG9uc2l2ZSBwb3N0ZXIgc291cmNlcyBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjb3JyZWN0IHZpZGVvICdwb3N0ZXInIGF0dHJpYnV0ZSBmb3JcbiAgICogdmlkZW9zIG1hcmtlZCB3aXRoIHRoZSBgZGF0YS1yZXNwb25zaXZlYCBhdHRyaWJ1dGUuIFRoZSBtZWRpYSBxdWVyaWVzIGRldGVybWluZVxuICAgKiB0aGUgcG9zdGVyIHNvdXJjZTogdmlkZW9zIHdpbGwgaGF2ZSBgLXNtYCBhcHBlbmRlZCB0byB0aGVpciBwb3N0ZXJzIGZvciBzbWFsbFxuICAgKiBzY3JlZW4gc2l6ZXMgKDw9IDY0MHB4IHdpZHRoKSBhbmQgYC1sZ2AgYXBwZW5kZWQgZm9yIGxhcmdlciBzY3JlZW4gc2l6ZXMuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBsaXN0ZW5zIGZvciBjaGFuZ2VzIGluIHNjcmVlbiBzaXplIGFuZCB1cGRhdGVzIHRoZSB2aWRlb1xuICAgKiBwb3N0ZXJzIGFjY29yZGluZ2x5LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXBwcm9wcmlhdGUgcG9zdGVyIGltYWdlXG4gICAqIGlzIHNlcnZlZCBiYXNlZCBvbiB0aGUgY3VycmVudCBzY3JlZW4gd2lkdGguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiBBZGQgYGRhdGEtcmVzcG9uc2l2ZWAgYXR0cmlidXRlIHRvIHZpZGVvIGVsZW1lbnRzIGFuZCBwcm92aWRlIGRhdGEgYXR0cmlidXRlc1xuICAgKiBgZGF0YS1wb3N0ZXItc21gIGFuZCBgZGF0YS1wb3N0ZXItbGdgIGZvciB0aGVcbiAgICogcmVzcGVjdGl2ZSBwb3N0ZXIgc291cmNlcy5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogPHZpZGVvIGRhdGEtcmVzcG9uc2l2ZSBkYXRhLXBvc3Rlci1zbT1cInBhdGgvdG8vc21hbGwtcG9zdGVyLmpwZ1wiIGRhdGEtcG9zdGVyLWxnPVwicGF0aC90by9sYXJnZS1wb3N0ZXIuanBnXCI+PC92aWRlbz5cbiAgICpcbiAgICogQWZ0ZXIgRE9NIGNvbnRlbnQgaXMgbG9hZGVkLCBjYWxsIGBzZXRSZXNwb25zaXZlUG9zdGVyU291cmNlcygpYCB0byBpbml0aWFsaXplLlxuICAgKi9cblxuICBzZXRSZXNwb25zaXZlUG9zdGVyU291cmNlczogZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHNtYWxsTVEgPSBcIihtYXgtd2lkdGg6IDY0MHB4KVwiO1xuICAgICAgY29uc3QgcmVzcG9uc2l2ZVZpZGVvcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIFwidmlkZW9bZGF0YS1yZXNwb25zaXZlXVwiLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbXEgPSB3aW5kb3cubWF0Y2hNZWRpYShzbWFsbE1RKTtcblxuICAgICAgLy8gUnVuIG9uIHBhZ2UgbG9hZFxuICAgICAgc2V0UG9zdGVyU3JjKCk7XG5cbiAgICAgIC8vIFJ1biBvbiByZXNpemVcbiAgICAgIG1xLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgc2V0UG9zdGVyU3JjKTtcblxuICAgICAgZnVuY3Rpb24gc2V0UG9zdGVyU3JjKCkge1xuICAgICAgICBjb25zdCBzaXplU3VmZml4ID0gbXEubWF0Y2hlcyA/IFwic21cIiA6IFwibGdcIjtcbiAgICAgICAgcmVzcG9uc2l2ZVZpZGVvcy5mb3JFYWNoKCh2aWRlb0VsZW1lbnQpID0+IHtcbiAgICAgICAgICAvLyBDaG9vc2Ugc2l6ZSBvZiBwb3N0ZXJcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgXCJwb3N0ZXJcIixcbiAgICAgICAgICAgI
21HZpZGVvRWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtcG9zdGVyLSR7c2l6ZVN1ZmZpeH1gKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgLy8gZW5kIGFkZCByZXNwb25zaXZlIHBvc3RlciBzb3VyY2VzIHRvIHZpZGVvc1xufTsgLy8gZmVkbGliXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGRUQgTk9URTogRkVEIFVUSUxTIEFSRSBOT1QgRk9SIFBST0RVQ1RJT04gVVNFIVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvZGUgaW4gdGhpcyBzZWN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seS5cbi8vIEl0IHNob3VsZCBPTkxZIGNvbnRhaW4gZnVuY3Rpb25zLCBhbmRcbi8vIE5PVCBjb2RlIHRoYXQgd2lsbCBydW4gYXV0b21hdGljYWxseSBvbiBwYWdlIGxvYWQuXG4vLyBEb24ndCByZWZlcmVuY2UgYW55dGhpbmcgaGVyZSBvbiBQUk9EIVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxud2luZG93LmZlZHV0aWxzID0ge1xuICAvLyBGb3JjZSAoZGVza3RvcCkgZHJvcGRvd24gbWVudSB0byByZW1haW4gb3BlblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmb3JjZV9kcm9wX29wZW46IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIC8vIEluamVjdCBkZWJ1ZyBzdHlsZXMgaW50byBwYWdlIGlmIHRoZXkgZG9uJ3QgZXhpc3RcbiAgICBpZiAoJChcIiNGRUROQVYtc3R5bGVzXCIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbGV0IHN0eWxlcyA9IFwiXCI7XG4gICAgICBzdHlsZXMgKz1cbiAgICAgICAgXCIjbmF2aWdhdGlvbiAjRkVETkFWLWFjdGl2ZS1wYXJlbnQgPiAubGV2ZWwtMSBhIHsgb3V0bGluZTogc29saWQgMXB4IHJlZDsgfVwiO1xuICAgICAgc3R5bGVzICs9XG4gICAgICAgIFwiI25hdmlnYXRpb24gI0ZFRE5BVi1hY3RpdmUtZHJvcHsgbGVmdDogNXB4ICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiA0cHggIWltcG9ydGFudDsgd2lkdGg6IDkxMnB4ICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cIjtcbiAgICAgIHN0eWxlcyArPVxuICAgICAgICBcIiNuYXZpZ2F0aW9uICNGRUROQVYtZHJvcC1iYWNrZ3JvdW5kIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgbWluLWhlaWdodDogNTAwcHggIWltcG9ydGFudDsgfVwiO1xuICAgICAgJChcIjxzdHlsZSBpZD0nRkVETkFWLXN0eWxlcyc+XCIgKyBzdHlsZXMgKyBcIjwvc3R5bGU+XCIpLmFwcGVuZFRvKFwiYm9keVwiKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHplcm8tYmFzZWQgYXJyYXkgaHVtYW4tZnJpZW5kbHlcbiAgICBpZiAoaW5kZXggPiAwKSBpbmRleC0tO1xuXG4gICAgLy8gR2V0IGFsbCB0aGUgdGhpbmdzXG4gICAgY29uc3QgJGFjdGl2ZVBhcmVudCA9ICQoXCIjbmF2aWdhdGlvbiB1bC5sZXZlbC0xID4gbGlcIikuZXEoaW5kZXgpO1xuICAgIGNvbnN0ICRhY3RpdmVEcm9wID0gJChcImRpdi5sZXZlbC0yXCIsICRhY3RpdmVQYXJlbnQpO1xuICAgIGNvbnN0ICRkcm9wQmFja2dyb3VuZCA9ICQoXCIjbmF2aWdhdGlvbiAuc3VibWVudS1iYWNrZ3JvdW5kXCIpO1xuXG4gICAgLy8gUmVtb3ZlIGFueSBwcmV2aW91c2x5LWFkZGVkIElEc1xuICAgICQoXCIjbmF2aWdhdGlvbiBbaWRePUZFRE5BVl1cIikucmVtb3ZlQXR0cihcImlkXCIpO1xuXG4gICAgLy8gQWRkIElEcyB0byB0aGUgaW1wb3J0YW50IHRoaW5ncyBmb3IgQ1NTIG92ZXJyaWRlc1xuICAgICRhY3RpdmVQYXJlbnQuYXR0cihcImlkXCIsIFwiRkVETkFWLWFjdGl2ZS1wYXJlbnRcIik7XG4gICAgJGFjdGl2ZURyb3AuYXR0cihcImlkXCIsIFwiRkVETkFWLWFjdGl2ZS1kcm9wXCIpO1xuICAgICRkcm9wQmFja2dyb3VuZC5hdHRyKFwiaWRcIiwgXCJGRUROQVYtZHJvcC1iYWNrZ3JvdW5kXCIpO1xuXG4gICAgLy8gQWRkIEJTIGNsYXNzIHRvIGluaGVyaXQgYnJhbmRpbmcubWluIHN0eWxpbmdcbiAgICAkKFwiLm1lbnUtd3JhcHBlclwiLCAkYWN0aXZlRHJvcCkuYWRkQ2xhc3MoXCJhZGp1c3QtbWVudS1jb2x1bW5cIik7XG4gIH0sIC8vIEVORDogZnVuY3Rpb24gRkVEX2ZvcmNlX2Ryb3Bfb3BlbigpXG59OyAvLyBmZWR1dGlsc1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gZG9jdW1lbnQgcmVhZHkgY29kZSB0byBydW4gb24gZXZlcnkgcGFnZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiQoZnVuY3Rpb24gKCkge1xuICAvLyBGRUQtMTAxMDYgdGVtcCBmaXggLSByZW1vdmUgb2ZmZXJzIHRhYiBvbiBjaGVja291dCBwYWdlXG4gIGlmIChcbiAgICBmZWRsaWIuZ2V0Q3VycmVudFBhZ2VOYW1lKCkgPT0gXCJjaGVja291dFwiICYmXG4gICAgJChcIi5kZXNrdG9wLXByb21vdGlvbnNcIikubGVuZ3RoXG4gICkge1xuICAgICQoXCIuZGVza3RvcC1wcm9tb3Rpb25zXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuICB9XG4gIC8vIGVuZCBGRUQtMTAxMDZcblxuICBmZWRsaWIuaWRlbnRpZnlBbGxQcm9tb1BhcmVudHMoKTtcblxuICAvLyBGRUQtMTEzNzQgLSBMaW5rIEhvdGphciB0byBGZWVkYmFjayBUYWIgYW5kIGhpZGUuKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gZmluZCBwb3NpdGlvblxuICBjb25zdCAkZmVlZGJhY2tfdGFiID0gJChcIi5kZXNrdG9wLWZlZWRiYWNrLWljb25cIik7XG4gIGlmICgkZmVlZGJhY2tfdGFiLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCAkdGFiX2NvbnRhaW5lciA9ICQoXCIuZGVza3RvcC10YWItY29udGFpbmVyXCIpO1xuICAgIGNvbnN0IHRhYl9jb250YWluZXJfdG9wID1cbiAgICAgICR0YWJfY29udGFpbmVyLmxlbmd0aCA+IDAgPyAkdGFiX2NvbnRhaW5lci5wb3NpdGlvbigpLnRvcCA6IDA7XG4gICAgY29uc3QgdGFiX3RvcCA9ICRmZWVkYmFja190YWIucG9zaXRpb24oKS50b3A7XG4gICAgY29uc3QgdGFiX3RvcF9wYWRkaW5nID0gNDU7XG4gICAgY29uc3QgaGpfdG9wID1cbiAgICAgICh0YWJfY29udGFpbmVyX3RvcCArIHRhYl90b3AgKyB0YWJfdG9wX3BhZGRpbmcpLnRvU3RyaW5nKCkgKyBcInB4XCI7XG4gICAgLy8gaW5qZWN0IHN0eWxlXG4gICAgLy8gdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIC8vIHN0eWxlLmNsYXNzTGlzdC5hZGQoXCJmZWQtZmVlZGJhY2
21stc3R5bGVzXCIpO1xuICAgIC8vIHN0eWxlLmlubmVySFRNTCA9IFwiI19oal9mZWVkYmFja19jb250YWluZXIgPiBkaXYgeyByaWdodDogNTBweDsgYm90dG9tOiBhdXRvOyB0b3A6IFwiICsgaGpfdG9wICsgXCJ9XCI7XG4gICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcblxuICAgICQoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCIuZGVza3RvcC1mZWVkYmFjay1pY29uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICRoal9mZWVkYmFja19jb250YWluZXIgPSAkKFwiI19oal9mZWVkYmFja19jb250YWluZXJcIik7XG4gICAgICBjb25zdCBpc09wZW5BbHJlYWR5ID0gJGhqX2ZlZWRiYWNrX2NvbnRhaW5lci5maW5kKFxuICAgICAgICBcIltjbGFzcyQ9J19fc2xpZGVJblJpZ2h0J11cIixcbiAgICAgICkubGVuZ3RoO1xuICAgICAgaWYgKGlzT3BlbkFscmVhZHkpIHtcbiAgICAgICAgY29uc3QgJGNsb3NlQnRuID0gJGhqX2ZlZWRiYWNrX2NvbnRhaW5lci5maW5kKFxuICAgICAgICAgIFwiW2NsYXNzJD0nX19jbG9zZUJ1dHRvbiddXCIsXG4gICAgICAgICk7XG4gICAgICAgICRjbG9zZUJ0bi50cmlnZ2VyKFwiY2xpY2tcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCAkaGpfbGFiZWwgPSAkaGpfZmVlZGJhY2tfY29udGFpbmVyLmZpbmQoXG4gICAgICAgICAgXCJidXR0b25bY2xhc3MkPSdfX2xhYmVsJ11cIixcbiAgICAgICAgKTtcbiAgICAgICAgJGhqX2xhYmVsLnRyaWdnZXIoXCJjbGlja1wiKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVuZCBGRUQtMTEzNzQgIC0gTGluayBIb3RqYXIgdG8gRmVlZGJhY2sgVGFiIGFuZCBoaWRlKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAvLyBTVEFSVCBGRUQtMTM4OTMgLSBGRUQgSEFDSyAtIElzc3VlIHdpdGggSEVMUCBtZW51IGl0ZW1zIG9wZW5pbmcgZmVlZGJhY2tcblxuICAvLyAvLyBkb24ndCBuZWVkIHRoZSBiZWxvdyBjb2RlIHNpbmNlIHRoZSBqUXVlcnkgLm9mZigpIHNlZW1zIHRvIGRvIHRoZSBzYW1lIHRoaW5nISAgU3dlZXQhIVxuICAvLyB2YXIgaGVscGVyRHJvcGRvd25UZXh0QXJyYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmhlbHBlci1kcm9wZG93bi10ZXh0XCIpO1xuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGhlbHBlckRyb3Bkb3duVGV4dEFycmF5Lmxlbmd0aDsgKytpKSB7XG4gIC8vICAgdmFyIGVsZSA9IGhlbHBlckRyb3Bkb3duVGV4dEFycmF5W2ldO1xuICAvLyAgIGVsZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbGUuY2xvbmVOb2RlKDEpLCBlbGUpO1xuICAvLyB9XG4gICQoXCIuaGVscGVyLWRyb3Bkb3duLXRleHRcIikub2ZmKFwiY2xpY2tcIik7XG5cbiAgJChcIi5oZWxwZXItZHJvcGRvd24tZmVlZGJhY2stbGlua1wiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAkKFwiLmRlc2t0b3AtZmVlZGJhY2staWNvblwiKS50cmlnZ2VyKFwiY2xpY2tcIik7XG4gIH0pO1xuICAvLyBFTkQgRkVELTEzODkzIC0gRkVEIEhBQ0sgLSBJc3N1ZSB3aXRoIEhFTFAgbWVudSBpdGVtcyBvcGVuaW5nIGZlZWRiYWNrXG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICJnT0FBQSxPQUFPLE9BQVMsQ0FPZCxLQUFNLFNBQVVBLEVBQVVDLEVBQVUsQ0FDbEMsSUFBTUMsRUFDSixVQUFVLE9BQVMsR0FBSyxVQUFVLENBQUMsSUFBTSxPQUFZLFVBQVUsQ0FBQyxFQUFJLEdBQ2hFQyxFQUFXLFNBQVMsaUJBQWlCSCxDQUFRLEVBRW5ELE9BQUlHLEVBQVMsT0FB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WSxDQUMxRCxJQUFNRSxFQUF5QixFQUFFLHlCQUF5QixFQUNwQ0EsRUFBdUIsS0FDM0MsMkJBQ0YsRUFBRSxPQUVrQkEsRUFBdUIsS0FDdkMsMEJBQ0YsRUFDVSxRQUFRLE9BQU8sRUFFUEEsRUFBdUIsS0FDdkMsMEJBQ0YsRUFDVSxRQUFRLE9BQU8sQ0FFN0IsQ0FBQyxDQUNILENBWUEsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLE9BQU8sRUFFdEMsRUFBRSxnQ0FBZ0MsRUFBRSxHQU
21FHLFFBQVMsVUFBWSxDQUMxRCxFQUFFLHdCQUF3QixFQUFFLFFBQVEsT0FBTyxDQUM3QyxDQUFDLENBRUgsQ0FBQyIsCiAgIm5hbWVzIjogWyJzZWxlY3RvciIsICJjYWxsYmFjayIsICJpbnRlcnZhbCIsICJlbGVtZW50cyIsICJkYXRhTGF5ZXIiLCAia2V5IiwgInJldCIsICJhcHAiLCAiJCIsICJuYW1lIiwgIm5hbWVFUSIsICJjYSIsICJpIiwgImMiLCAidmFsdWUiLCAiZGF5cyIsICJleHBpcmVzIiwgImRhdGUiLCAiX2tleSIsICJlbGVtZW50IiwgImVtYWlsIiwgInVyaSIsICJwYWdlTmFtZSIsICJ1cmlBcnJheSIsICJwYWdlSUQiLCAibGFzdEluZGV4IiwgImRlbGltIiwgInVybCIsICJyZXN1bHRzIiwgIl9saWJyYXJ5IiwgIl9jb3Vwb25Db2RlIiwgIl9jYiIsICJlIiwgInByb21vSUQiLCAiJHByb21vcyIsICIkcHJvbW8iLCAicHJvbW9JZCIsICJteURpYWxvZyIsICIkZmlyc3RFbGUiLCAiZXZlbnQiLCAidWkiLCAiY291cG9uQWN0aW9uIiwgImNvdXBvbiIsICJjb3Vwb25BcnJheSIsICJteUljb24iLCAibXlQb3BwdXAiLCAibXlDb3Vwb25Db2RlIiwgIm15Q291cG9uIiwgIl9zdHIiLCAidHh0IiwgImN1cnJlbnRDYXQiLCAiJHNvdXJjZVNlbGVjdG9yIiwgIiR0YXJnZXQiLCAiX3VybCIsICJlcnJvciIsICJuIiwgImNvbmQiLCAiYXNzZXRJRCIsICJlcnJvckNhbGxiYWNrIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJ3aW5kb3dMb2NhdGlvbiIsICJsYXN0U2xhc2hJbmRleCIsICJhc3NldFVybCIsICJkYXRhIiwgImFzc2V0U3RhcnRTdHIiLCAiYXNzZXRTdGFydEluZGV4IiwgImFzc2V0U3RhcnRTdHIyIiwgImFzc2V0RW5kSW5kZXgiLCAieGhyIiwgInN0YXR1cyIsICJ0YXJnZXRFbGVtZW50IiwgInRhcmdldFBvc2l0aW9uIiwgImNvbnRlbnRBc3NldEVsZW1lbnQiLCAiJHdyYXBwZWRTZXQiLCAiZXhlY3V0ZUpTIiwgIiRib2R5IiwgIiRiZ092ZXJsYXkiLCAiJGxpZ2h0Ym94IiwgImlzT3ZlcmxheUNsaWNrZWQiLCAiJGxpZ2h0Ym94Q29udGVudCIsICJmaW5pc2hlZCIsICIkc2lkZVNsaWRlIiwgIiRzaWRlU2xpZGVDb250ZW50IiwgInNjcm9sbFNwZWVkIiwgIiR0YXJnZXRFbGVtZW50IiwgImZpcnN0IiwgIm1pZGRsZSIsICJsYXN0IiwgInNldHRpbmdzIiwgImZvbnRTaXplIiwgImJyZWFrcG9pbnQiLCAibW9iaWxlIiwgImRlc2t0b3AiLCAic2V0Rm9udFNpemUiLCAic3RyRWxlbWVudElEIiwgImF0dGFjaEhrRW50cnlQb2ludEV2ZW50cyIsICJoa0VudHJ5V2lkZ2V0IiwgImVsZW1lbnRJZGVudGlmaWVyIiwgIm51bSIsICJwYXJhbXMiLCAiX19hc3luYyIsICJjb252ZXJ0SW1hZ2VTcmMiLCAic3JjIiwgInN1ZmZpeCIsICJnZXRQcm9kdWN0RGF0YSIsICJwcm9kdWN0IiwgImltZ1BhcmFtcyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJfZSIsICJwcm9kdWN0TmFtZSIsICJwcm9kdWN0TGluayIsICJwcm9kdWN0UHJpY2UiLCAicmF3SW1nUGF0aCIsICJwcm9kdWN0U2Nyb2xsZXIiLCAic2xpZGVDb250YWluZXIiLCAicHJvZHVjdE9yaWdpbiIsICJyZXNwb25zZSIsICJ0ZXh0IiwgInByb2R1Y3RzIiwgImZyYWdtZW50IiwgImluZGV4IiwgIm5ld1NsaWRlIiwgImxvYWRlciIsICJzbWFsbE1RIiwgInJlc3BvbnNpdmVWaWRlb3MiLCAibXEiLCAic2V0VmlkZW9TcmMiLCAic2l6ZVN1ZmZpeCIsICJ2aWRlb0VsZW1lbnQiLCAic2V0UG9zdGVyU3JjIiwgInN0eWxlcyIsICIkYWN0aXZlUGFyZW50IiwgIiRhY3RpdmVEcm9wIiwgIiRkcm9wQmFja2dyb3VuZCIsICIkZmVlZGJhY2tfdGFiIiwgIiR0YWJfY29udGFpbmVyIiwgInRhYl9jb250YWluZXJfdG9wIiwgInRhYl90b3AiLCAiaGpfdG9wIiwgIiRoal9mZWVkYmFja19jb250YWluZXIiXQp9Cg==
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.